Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.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 使用Spring WS将故障从Soap主体移动到Soap头_Java_Spring_Soap_Spring Ws_Fault - Fatal编程技术网

Java 使用Spring WS将故障从Soap主体移动到Soap头

Java 使用Spring WS将故障从Soap主体移动到Soap头,java,spring,soap,spring-ws,fault,Java,Spring,Soap,Spring Ws,Fault,将soap主体中的soap错误移动到SpringWeb服务中响应的soap头的最佳方法是什么?有什么例子吗 我可以截获故障,但我不认为我可以用这个解析器修改任何东西 public class LisSoapFaultTranslatorExceptionResolver extends SoapFaultMappingExceptionResolver { @Override protected void customizeFault(Object endpoint, Exce

将soap主体中的soap错误移动到SpringWeb服务中响应的soap头的最佳方法是什么?有什么例子吗

我可以截获故障,但我不认为我可以用这个解析器修改任何东西

public class LisSoapFaultTranslatorExceptionResolver extends SoapFaultMappingExceptionResolver {

    @Override
    protected void customizeFault(Object endpoint, Exception ex, SoapFault fault) {

        fault = null;
    }
}

可选的SOAP Fault元素用于指示错误消息

如果存在故障元素,则它必须显示为主体元素的子元素。错误元素在SOAP消息中只能出现一次

如果SOAP错误出现在响应的开头,那么SOAP信封将不再遵循规范。你不应该那样做。我怀疑实现SOAP接口的框架是否允许您这样做

要被识别为携带SOAP错误信息,SOAP消息必须包含单个SOAP错误元素信息项,作为SOAP正文的唯一子元素信息项

要被识别为携带SOAP错误信息,SOAP消息 必须包含单个SOAP故障元素信息项作为唯一 SOAP主体的子元素信息项

在生成故障时,SOAP发送器不得包含额外的 SOAP主体中的元素信息项。其正文为 包含故障和其他元素信息项没有 SOAP定义的语义

SOAP故障元素信息项可能出现在SOAP头中 块,或作为 皂体;在这种情况下,元素没有SOAP定义的语义

重要的部分是
如果这样做,元素没有SOAP定义的语义。我想这是你自己的事。如果没有故障,可以使用Spring生成SOAP响应,否则自己生成。

From

可选的SOAP Fault元素用于指示错误消息

如果存在故障元素,则它必须显示为主体元素的子元素。错误元素在SOAP消息中只能出现一次

如果SOAP错误出现在响应的开头,那么SOAP信封将不再遵循规范。你不应该那样做。我怀疑实现SOAP接口的框架是否允许您这样做

要被识别为携带SOAP错误信息,SOAP消息必须包含单个SOAP错误元素信息项,作为SOAP正文的唯一子元素信息项

要被识别为携带SOAP错误信息,SOAP消息 必须包含单个SOAP故障元素信息项作为唯一 SOAP主体的子元素信息项

在生成故障时,SOAP发送器不得包含额外的 SOAP主体中的元素信息项。其正文为 包含故障和其他元素信息项没有 SOAP定义的语义

SOAP故障元素信息项可能出现在SOAP头中 块,或作为 皂体;在这种情况下,元素没有SOAP定义的语义


重要的部分是
如果这样做,元素没有SOAP定义的语义。我想这是你自己的事。如果没有错误,可以使用Spring生成SOAP响应,否则您可以自己生成。

我可以通过向标题中添加项来完成此操作

Spring配置文件:

<sws:interceptors>    
    <sws:payloadRoot
    namespaceUri="http://www.imsglobal.org/services/lis/cmsv1p0/wsdl11/sync/imscms_v1p0">
        <bean class="com.openclass.adapter.interceptors.LisResponseInterceptor"/>    
    </sws:payloadRoot>  
</sws:interceptors>
public class LisResponseInterceptor extends EndpointInterceptorAdapter {

    @Override
    public boolean handleResponse(MessageContext messageContext, Object endpoint{
        return true;
    }

    @Override
    public boolean handleRequest(MessageContext messageContext, Object endpoint){
        return true;
    }

    @Override
    public boolean handleFault(MessageContext messageContext, Object endpoint){

        SoapMessage response = (SoapMessage) messageContext.getResponse();
        SoapHeader header = response.getSoapHeader();
        header.addHeaderElement(new QName("ims","imsx_syncRequestHeaderInfo"));

        return true;
    }
}

我可以这样做,添加项目的标题

Spring配置文件:

<sws:interceptors>    
    <sws:payloadRoot
    namespaceUri="http://www.imsglobal.org/services/lis/cmsv1p0/wsdl11/sync/imscms_v1p0">
        <bean class="com.openclass.adapter.interceptors.LisResponseInterceptor"/>    
    </sws:payloadRoot>  
</sws:interceptors>
public class LisResponseInterceptor extends EndpointInterceptorAdapter {

    @Override
    public boolean handleResponse(MessageContext messageContext, Object endpoint{
        return true;
    }

    @Override
    public boolean handleRequest(MessageContext messageContext, Object endpoint){
        return true;
    }

    @Override
    public boolean handleFault(MessageContext messageContext, Object endpoint){

        SoapMessage response = (SoapMessage) messageContext.getResponse();
        SoapHeader header = response.getSoapHeader();
        header.addHeaderElement(new QName("ims","imsx_syncRequestHeaderInfo"));

        return true;
    }
}

我们遵循的规范就是这样。“SOAP错误在SOAP头中报告。这意味着当发出SOAP请求消息时,响应消息可能包含SOAP错误代码,而没有进一步的有用信息。”我知道你的意思,但我可以反驳他们的规范。我只需要一个解决方案伙伴。一个解决方案是在出现故障时自己编写SOAP响应。我本来想我可以修改进入web服务的消息上下文参数,但我认为抛出异常、捕获它,然后修改标头会更干净。例外情况包括缺少必填字段。我没有使用Spring WS的经验,在刷新响应
OutputStream
之前,您有权访问它吗?我们遵循的规范正是这样做的。“SOAP错误在SOAP头中报告。这意味着当发出SOAP请求消息时,响应消息可能包含SOAP错误代码,而没有进一步的有用信息。”我知道你的意思,但我可以反驳他们的规范。我只需要一个解决方案伙伴。一个解决方案是在出现故障时自己编写SOAP响应。我本来想我可以修改进入web服务的消息上下文参数,但我认为抛出异常、捕获它,然后修改标头会更干净。例外情况包括缺少必填字段。我没有使用Spring WS的经验,在刷新响应
OutputStream
之前,您有权访问它吗?