Nul*_*ion 5 java soap cxf soapfault interceptor
我编写了一个自定义 CXF 拦截器来将所有 SOAP 请求和响应记录到数据库中,并且它似乎在正面测试用例和服务器错误的情况下工作正常。
但是当发生 SOAP 错误时,它只是忽略了我的拦截器并且没有记录任何内容。
自定义 CXF 拦截器。
public class DbLogOutInterceptor extends AbstractSoapInterceptor {
public void handleMessage(SoapMessage message) {
logger.info("Handling outbound request");
String transaction = MDC.get(mdcKey);
logger.info("OutBound Transaction ID : {} ", transaction);
//code to log the SOAP message in database
.......
}
}
Run Code Online (Sandbox Code Playgroud)
我没有看到此方法的日志语句,而是看到了
11:56:34,102 INFO [Soap12FaultOutInterceptor] class org.apache.cxf.binding.soap.interceptor.Soap12FaultOutInterceptor$Soap12FaultOutInterceptor Internalapplication/soap+xml
11:56:34,103 INFO [EligibilityInfo] Outbound Message
---------------------------
ID: 2
Response-Code: 500
Encoding: UTF-8
Content-Type: application/soap+xml
Headers: {}
Payload :
Run Code Online (Sandbox Code Playgroud)
为了在我的自定义拦截器中捕获 SOAP 错误错误,我必须做什么。
所以在我的自定义拦截器中我编写了以下代码:
Fault fault = new Fault(message.getContent(Exception.class));
Run Code Online (Sandbox Code Playgroud)
现在,这是在一些遗留代码中,这些代码从 Java 抛出异常并让框架将其转换为错误。我不会表达我对此的感受,但这会给你带来所产生的错误。
现在,如果您从服务方法中抛出错误,请执行以下操作
Fault fault = message.getContect(Fault.class);
Run Code Online (Sandbox Code Playgroud)
希望这能帮助您得到您想要的答案。确保您注册了拦截器,如下所示
<jaxws:endpoint
id="fooService" implementor="com.bar.FooService" address="/FooServices">
<jaxws:outFaultInterceptors>
<ref class="com.bar.interceptor.DbLogOutInterceptor"/>
</jaxws:outFaultInterceptors>
</jaxws:endpoint>
<jaxws:endpoint
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
21306 次 |
| 最近记录: |