CXF故障拦截器-记录soap错误消息,如soap客户端中所示

我正在使用apache CXF(春季启动)来开发我的soap服务器。在这里,我需要以完全在任何soap客户端中显示的方式(例如:Soap UI)将错误消息记录在soap Fault拦截器中。如何在故障拦截器中记录相同的输出?现在它只是显示异常详细信息

输入

<Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/">
    <Body>
        <sayHello xmlns="http://service.sample.com/">
            <GreetingsRequest xmlns="">test</GreetingsRequest>
        </sayHello>
    </Body>
</Envelope>

输出(显示在soap客户端中)

UserNotfound异常是代码中引发的自定义异常

<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);
    }
}
ilys2013 回答:CXF故障拦截器-记录soap错误消息,如soap客户端中所示

您可以使用集成的日志记录工具:https://cxf.apache.org/docs/message-logging.html

该代码可在GitHub上使用,以防您需要扩展它:https://github.com/apache/cxf/blob/master/rt/features/logging/src/main/java/org/apache/cxf/ext/logging/LoggingFeature.java

本文链接:https://www.f2er.com/2953220.html

大家都在问