3

Jersey WS 呼び出しをデバッグするためにトレースをオンにしようとしています。ここで説明されている init-paramを Guice サーブレット構成と web.xml の両方に追加しようとしましたが、機能しないようです。

Guice サーブレットの構成は次のようになります。

public class GuiceServletConfig extends GuiceServletContextListener
{
private static final Logger log = LoggerFactory.getLogger(GuiceServletConfig.class);

public GuiceServletConfig()
{
    super();
    log.debug("creating GuiceServletConfig");
}



private static class ServletModule extends JerseyServletModule {
    private InputStream getInputStream() throws FileNotFoundException {
        File file = new File("tmp");
        String pathToTempFile = file.getAbsolutePath();
        log.debug("path to config: {}", pathToTempFile);
        String pathWithoutTmp = pathToTempFile.substring(0,
            pathToTempFile.indexOf(File.separator + "tmp"));
        StringBuilder stringBldr = new StringBuilder(pathWithoutTmp)
            .append(File.separator).append("extensions")
            .append(File.separator).append("__lib__")
            .append(File.separator).append("gelato.config.properties");
        log.debug("loading guice properties from: {}",  stringBldr.toString());
        return new FileInputStream(new File(stringBldr.toString()));
    }

    @Override
    protected void configureServlets() {
        Properties properties = new Properties();
        try {
            InputStream is = getInputStream();
            properties.load(is);
            Names.bindProperties(binder(), properties);
        } catch (Exception ex) {
            log.error("Error binding properties: {}", ex.toString());
        }
        // Must configure at least one JAX-RS resource or the
        // server will fail to start.
        // Must configure at least one JAX-RS resource or the
        // server will fail to start.
        bind(UserResource.class);
        bind(PlayersManager.class).to(GelatoPlayersManager.class);
        bind(MessageHandler.class).to(SFSMessageHandler.class);
        Map<String, String> params = new HashMap<String, String>();
        params.put(PackagesResourceConfig.PROPERTY_PACKAGES, "org.buffalo.gelato.resources");
        // Route all requests through GuiceContainer
        params.put("com.sun.jersey.config.feature.Trace", "true");
        serve("/rest/*").with(GuiceContainer.class, params);
    }
}

また、web.xmlに入れてみましたが、Guiceを介してJerseyを構成しているため、これは無視されると思います。

<servlet>
    <servlet-name>Jersey REST Service for value codes</servlet-name>
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
    <init-param>
        <param-name>com.sun.jersey.config.feature.Trace</param-name>
        <param-value>true</param-value>
    </init-param>
</servlet>
4

3 に答える 3

3

サーバー ログにログ メッセージを表示する場合 (トレースの最初の構成が適切です)、次のようにResourceConfig.PROPERTY_CONTAINER_REQUEST_FILTERSおよび/またはResourceConfig.PROPERTY_CONTAINER_RESPONSE_FILTERSプロパティを構成に追加する必要があります。

params.put(ResourceConfig.PROPERTY_CONTAINER_REQUEST_FILTERS, com.sun.jersey.api.container.filter.LoggingFilter.class);
params.put(ResourceConfig.PROPERTY_CONTAINER_RESPONSE_FILTERS, com.sun.jersey.api.container.filter.LoggingFilter.class);

コンテナーLoggingFilterの JavaDoc を参照してください。

于 2013-08-16T07:12:08.500 に答える
0

同じことですが、ResourceConfig ファイルを使用します。

web.xml

<servlet>
    <servlet-name>com.example.myapp</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
    <init-param>
        <param-name>javax.ws.rs.Application</param-name>
        <param-value>com.example.myapp.JerseyApplication</param-value>
    </init-param>
</servlet>
<servlet-mapping>
    <servlet-name>com.example.myapp</servlet-name>
    <url-pattern>/rest/*</url-pattern>
</servlet-mapping>

そしてコードで:

package com.example.myapp;

import org.glassfish.jersey.server.ResourceConfig;
import java.util.HashMap;
import java.util.Map;

public class JerseyApplication extends ResourceConfig {
    public JerseyApplication() {
        System.out.println("Processing Jersey2 configuration");

        // Tracing properties (modification of the response HTTP headers)
        Map<String, Object> params = new HashMap<String, Object>();
        params.put("jersey.config.server.tracing.type","ALL");
        params.put("jersey.config.server.tracing.threshold","TRACE");
        addProperties(params);

        // Scan packages for resources
        packages(true,"com.example.myapp.resources");
    }
}

サーバー側のトレースが必要な場合は、上記のMichal Gajdosが述べたようにプロパティを追加するだけです。

于 2016-11-30T15:05:16.380 に答える