3

我正在尝试打开跟踪以调试 Jersey WS 调用。我尝试在我的 Guice servlet 配置和 web.xml 中添加此处描述的 init-param ,但似乎无法使其正常工作。

下面是 Guice servlet 配置的样子:

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 回答
1

发布的代码工作正常。我在日志中寻找跟踪消息。我没有意识到跟踪消息是在此处描述的响应标头中发回的。

于 2013-08-15T23:46:53.970 回答
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 回答