如何处理 soap:mustUnderstand= "1" in webservice



在传入的肥皂请求中,肥皂头中有一个肥皂:必须理解="1"元素,我如何在我的Web服务中处理这个问题。如果 soap:mustUnderstand="1",它在 0 时会抛出异常(soap:mustUnderstand="0"),它会按预期运行。

这是我的部分肥皂请求是这样的

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Header xmlns="http://www.xxxxxxx/zzzzz-msg/schema/msg-header-1_0.xsd">
          <MessageHeader ResponseRequested="true" version="1.0" Terminate="true" Reverse="true" id="0002P559C1" soap:mustUnderstand="1">
   .......
   ......

我正在使用Apache CXF进行Web服务。

您的服务应显式告诉 CXF 给定的标头已被理解和处理。

一种方法是注册一个负责实际处理标头的SOAPHandler子类。在该接口中,实现方法 Set<QName> getHeaders() 并返回一组处理程序负责的标头名称非常重要。

然后,CXF 会将所有这些标头视为已理解的标头

例:

在 Spring 上下文 XML 中:

<jaxws:endpoint ...>
    <jaxws:handlers>
        <bean class="example.MySOAPHandler" />
    </jaxws:handlers>
</jaxws:endpoint>

在 Java 代码中:

public class MySOAPHandler implements SOAPHandler<SOAPMessageContext> {
    public static final String MY_NS_URI = "http://www.xxxxxxx/zzzzz-msg/schema/msg-header-1_0.xsd";
    public static final String MY_HEADER_NAME = "MessageHeader";
    @Override
    public Set<QName> getHeaders() {
        // This will tell CXF that the following headers are UNDERSTOOD
        return Collections.singleton(new QName(MY_NS_URI, MY_HEADER_NAME));
    }
    // other handler methods here
}

如果标头块使用 mustUnderstand="1" 和 接收器不是为支持给定的标头而设计的,消息 不应处理,并且应将错误返回给发件人 (使用 soap:必须了解状态代码)。当必须理解="0"或 必须理解属性不存在,接收方可以忽略 这些标头并继续处理。必须理解属性 在整个 SOAP 处理模型中起着核心作用。

有关详细信息,请参阅此链接

最新更新