2017-01-11 11 views
1

リクエストとレスポンスを取得できるように、残りのSOAPサービスとServlet Filterを実装しています。コールが休止状態になる前にフィルタが呼び出されますが、ペイロードから要求の要素を取得できません。 したがって、フィルタが初期化されると、呼び出しはdoFilterに行きサービスを停止しますが、要求と応答の変数では、残りの要求と応答に関連するものは表示されません。 質問が明確になることを願っています。サーブレットフィルタを使用してリクエスト/レスポンスペイロードを取得する方法

フィルタクラス

public class ESignLoggingInterceptor implements Filter { 

private static final Logger logger = Logger.getLogger(ESignLoggingInterceptor.class.getSimpleName()); 

@Override 
public void init(FilterConfig config) throws ServletException { 
    System.out.println("Logging filter initiated"); 

} 

@Override 
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { 
    String path = null; 
    if(request != null && request instanceof HttpServletRequest) { 
     path = ((HttpServletRequest) request).getRequestURL().toString(); 
    } 
    chain.doFilter(request, response); 
    System.out.println("Request URL:" + " " + path); 
} 

@Override 
public void destroy() { 
} 

}

web.xmlの

<servlet> 
    <servlet-name>Jersey Spring</servlet-name> 
    <servlet-class>com.sun.jersey.spi.spring.container.servlet.SpringServlet</servlet-class> 
    <init-param> 
     <param-name>com.sun.jersey.config.property.packages</param-name> 
     <param-value>com.mercuryinsurance.esignature.client.rest.service</param-value> 
    </init-param> 
    <init-param>   
     <param-name>com.sun.jersey.config.property.JSPTemplatesBasePath</param-name>   
     <param-value>/WEB-INF/jsps/rest</param-value>  
    </init-param>  
    <init-param> 
     <param-name>com.sun.jersey.config.property.WebPageContentRegex</param-name>   
     <param-value>/(resources|(WEB-INF/jsp))/.*</param-value>  
    </init-param> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>Jersey Spring</servlet-name> 
    <url-pattern>/rest/*</url-pattern> 
</servlet-mapping> 

<filter> 
    <filter-name>LoggingFilter</filter-name> 
    <filter-class>com.mercuryinsurance.esignature.common.logging.ESignLoggingInterceptor</filter-class> 
</filter> 

<filter-mapping> 
    <filter-name>LoggingFilter</filter-name> 
    <url-pattern>/rest/*</url-pattern> 
</filter-mapping> 
+0

ペイロードをキャプチャするためにサーブレット要求/応答をラップする必要があります。 – ThomasRS

答えて

1

JAX-RSのスタックは、サーブレットの上の層ですが、あなたが使用する方がいいでしょう標準。これを行うにはいくつかの方法があります。 「ジャージーJAX-RSロギング」のようなGoogleの場合、ジャージー固有のログの方法を見つけることができます。つまり、like this linkです。それ以外の場合は、JEE標準に準拠したい場合は、入力用のContainerRequestFilterと出力用のWriterInterceptorが必要です。しかし免責事項 - JEEではないので、Springとどのように相互作用するのか分かりません。

私はthis stackoverflow answerから大量の情報を習得しましたが、これもまた標準的な方法です。

+0

JAX-RSの問題点は、SOAPサービスが正しく機能しないことです。 – Mike

+0

JAX-WSロギングが必要です。私はhttp://java.globinch.com/enterprise-java/web-services/jax-ws/logging-tracing-web-service-xml-request-response-jax-ws/を見つけましたが、テストしていません。 – stdunbar

+0

実際に私は両方のタイプのサービスを稼働させています。両方をログに記録する必要があります。したがって、最初は、Servlet Filterがこれを行うためのより良いアプローチになると思いました。 – Mike

関連する問題