我正在使用Apache CXF 3.1.12(使用springboot)使用soap 1.1服务
我试图理解如何强制它将mustUnderstand头生成为整数(0 | 1)而不是boolean(true | false)。请参阅下面的错误文档。根据我的理解,在肥皂1.1中,真/假是不可接受的。无论如何,我的客户不喜欢它,我无法控制它们。
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">
<s:Header>
<a:Action s:mustUnderstand="true">http://...</a:Action>
</s:Header>
<s:Body>
...
</s:Body>
</s:Envelope>
这是一个WSDL优先服务,并且在WSDL中没有提到SOAP 1.2命名空间。我的包裹信息是:
@javax.xml.bind.annotation.XmlSchema(namespace = "http://...", elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)
,我的端点创建于:
EndpointImpl endpoint = new EndpointImpl(bus,
new MyClass(), SOAPBinding.SOAP11HTTP_BINDING);
我使用hdr-&gt; setMustUnderstand(true)修改Phase.WRITE中的AbstractSoapInterceptor中的mustUnderstand标头,但它仍然以布尔值的形式出现。
JIRA中有一个关于此问题的旧问题,并且在很久以前被标记为已修复:https://issues.apache.org/jira/browse/CXF-2213?jql=text%20~%20%22mustUnderstand%22
任何帮助都将不胜感激。
答案 0 :(得分:0)
我设法通过强制响应成为拦截器中的SOAP 1.1响应来解决这个问题,通过:
final SoapVersion soap11 = Soap11.getInstance();
message.setVersion(soap11);
我怀疑这是正确的方法,我不确定为什么它坚持认为它不是SOAP 1.1消息。但这至少解决了上面的具体问题,并允许我继续进行,直到找到正确的方法。