在传入的肥皂请求中,肥皂头中有一个肥皂:必须理解="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 处理模型中起着核心作用。
有关详细信息,请参阅此链接