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