Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 服务器返回错误500时的cxf INOUT_Java_Spring_Soap_Cxf_Webservice Client - Fatal编程技术网

Java 服务器返回错误500时的cxf INOUT

Java 服务器返回错误500时的cxf INOUT,java,spring,soap,cxf,webservice-client,Java,Spring,Soap,Cxf,Webservice Client,我有一个spring配置的cxfsoap客户端,它使用soap头来维护服务器端的增量sessionId。 当服务器返回http 500错误时,它还包括包含会话下一个值的soap头。我无法读取此值,因为该方法调用引发SoapException,并且没有填充sessionId Holder对象。我想我可以使用故障拦截器,但是 我想知道能不能更干净一点。非常感谢您的帮助 public profileCreateUpdateProfile( @WebParam(partName

我有一个spring配置的cxfsoap客户端,它使用soap头来维护服务器端的增量sessionId。 当服务器返回http 500错误时,它还包括包含会话下一个值的soap头。我无法读取此值,因为该方法调用引发SoapException,并且没有填充sessionId Holder对象。我想我可以使用故障拦截器,但是 我想知道能不能更干净一点。非常感谢您的帮助

    public profileCreateUpdateProfile(
        @WebParam(partName = "Profile_CreateUpdateProfile_1_2", name = "Profile_CreateUpdateProfile")
        ProfileCreateUpdateProfile profileCreateUpdateProfile12,
        @WebParam(partName = "SessionId", mode = WebParam.Mode.INOUT, name = "SessionId", header = true)
        javax.xml.ws.Holder<java.lang.String> sessionId
    );
公共配置文件CreateUpdateProfile( @WebParam(partName=“Profile\u CreateUpdateProfile\u 1\u 2”,name=“Profile\u CreateUpdateProfile”) ProfileCreateUpdateProfile profileCreateUpdateProfile12, @WebParam(partName=“SessionId”,mode=WebParam.mode.INOUT,name=“SessionId”,header=true) javax.xml.ws.Holder sessionId );
我使用了一个iterceptor,它扩展了org.apache.cxf.phase.AbstractPhaseInterceptor。实现类在SOAPHeader上迭代以获取sessionId值并保存它

public class SessionFaultInterceptor extends AbstractPhaseInterceptor<Message> {
    public SessionFaultInterceptor() {
        super(Phase.RECEIVE);
    }

    @Override
    public void handleMessage(Message message) throws Fault {
        Message in = message.getExchange().getInFaultMessage();
        if(in != null){
            List<SoapHeader> headers = (List<SoapHeader>) in.get(Header.HEADER_LIST);

            for(SoapHeader header:headers){
                if(header.getObject() instanceof Element){
                    Element headerElement = (Element)header.getObject(); 
                    if("SessionId".equalsIgnoreCase(headerElement.getNodeName())){
                        if(log.isDebugEnabled()){
                            log.debug("Update"+headerElement.getNodeName()+" with value "+headerElement.getTextContent());
                        }
                        break;
                    }
                }
            }
        }
    }
}   
公共类SessionFaultInterceptor扩展了AbstractPhaseInterceptor{
public SessionFaultInterceptor(){
超级(相位接收);
}
@凌驾
public void handleMessage(消息消息消息)引发错误{
Message in=Message.getExchange().getInFaultMessage();
if(in!=null){
List headers=(List)in.get(Header.Header\u List);
for(SoapHeader:headers){
if(header.getObject()instanceof元素){
元素headerElement=(元素)header.getObject();
if(“SessionId.equalsIgnoreCase(headerElement.getNodeName())){
if(log.isDebugEnabled()){
log.debug(“使用值“+headerElement.getTextContent()”更新“+headerElement.getNodeName()+”);
}
打破
}
}
}
}
}
}