java - CXF 故障拦截器 - 记录soap 故障消息,如soap 客户端中所示
问题描述
我正在使用 apache CXF(spring boot) 来开发我的肥皂服务器。在这里,我需要在我的soap 故障拦截器中记录故障消息,就像它在任何soap 客户端中显示的那样(例如:Soap UI)。如何在我的故障拦截器中记录相同的输出?现在它只显示异常详细信息
输入
<Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/">
<Body>
<sayHello xmlns="http://service.sample.com/">
<GreetingsRequest xmlns="">test</GreetingsRequest>
</sayHello>
</Body>
</Envelope>
输出(显示在soap客户端中)
UserNotfound Exception 是代码中抛出的自定义异常
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<soap:Fault>
<faultcode>soap:Server</faultcode>
<faultstring>Fault occurred while processing.</faultstring>
<detail>
<ns1:UserNotFoundException xmlns:ns1="http://service.sample.com/">
<user xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns2="http://service.sample.com/" xsi:type="ns2:user">
<userId>U-123</userId>
<username>TestUser</username>
</user>
</ns1:UserNotFoundException>
</detail>
</soap:Fault>
</soap:Body>
</soap:Envelope>
我的自定义拦截器代码
import org.apache.cxf.binding.soap.SoapMessage;
import org.apache.cxf.binding.soap.interceptor.AbstractSoapInterceptor;
import org.apache.cxf.interceptor.Fault;
import org.apache.cxf.phase.Phase;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class CustomSoapFaultInterceptor extends AbstractSoapInterceptor{
private static final Logger logger = LoggerFactory.getLogger(CustomSoapFaultInterceptor.class);
public CustomSoapFaultInterceptor() {
super(Phase.PRE_STREAM);
}
@Override
public void handleMessage(SoapMessage soapMessage) throws Fault {
Fault fault = (Fault) soapMessage.getContent(Exception.class);
Throwable faultCause = fault.getCause();
String faultMessage = fault.toString();
logger.error("Test Error",fault);
}
}
解决方案
推荐阅读
- javascript - 显示进度条
- sql - 当字段为空时从 SQL 数据透视表中删除行
- json - 如何使用 Django DRF 将“CSV 杂乱数据”转换为“JSON 结构化数据”
- yii2 - Yii2:如何将数据库控制台迁移参数设置为数组
- .net - 为什么 DirectoryEntry.Invoke("SetPassword", value) 触发 Credential Required CryptoAPI Private Key
- c# - 在 C# 中实现部分递归函数
- sql - SQL Server:将表连接到自身以水平显示数据
- c++ - 有没有办法从模板参数和字符串中生成模板类中的类型
- promise - 量角器测试+管理执行顺序
- mysql - 使用 SQL 数据库查询以不同的时间间隔减去相同的列值