在传入的soap请求中,soap头中有一个soap:mustUnderstand =“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进行网络服务。
答案 0 :(得分:1)
您的服务应明确告知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
}
答案 1 :(得分:0)
如果标题块使用mustUnderstand =“1”注释并且 接收器的设计不支持给定的标头,即消息 不应该处理,并且应该将错误返回给发件人 (使用soap:MustUnderstand状态代码)。当mustUnderstand =“0”或 mustUnderstand属性不存在,接收者可以忽略 那些标题并继续处理。 mustUnderstand属性 在整个SOAP处理模型中起着核心作用。
有关详细信息,请参阅此link