我有一个基于Spring的项目,使用CXF构建一个SOAP服务。
发送SOAP1.1消息(使用SOAPUI)很好,但是当我尝试发送SOAP1.2消息时(当然使用相同的WSDL ),我就会得到消息"A SOAP 1.2 message is not valid when sent to a SOAP 1.1 only endpoint"。这条消息是自我解释的,但我不明白为什么我的端点不接受1.2消息。
我的WSDL包含正确的soap12绑定和命名空间。
在spring @Configuration类中,我将其添加到CXF端点bean中:
endpoint.setBindingConfig(new BindingConfiguration()
{
@Override
public String getBindingId()
{
return SOAPBinding.SOAP12HTTP_MTOM_BINDING;
}
});这没什么用。当我变得更加绝望时,我尝试了@BindingType和@SOAPBinding注释,这当然不起作用,然后我尝试了SaajSoapMessageFactory和SoapVersion.SOAP_12。没起作用。我在我的jaxws-maven-plugin里尝试了jaxws-maven-plugin。失败。
端点显然没有配置为接收SOAP1.2消息。我怎样才能做到这一点?
发布于 2016-11-11 23:05:19
我想通了。在实现端点时,我需要设置绑定url。由于某种不明显的原因,事后设置它不起作用。
EndpointImpl endpoint = new EndpointImpl(springBus(), statusService(), SOAPBinding.SOAP12HTTP_BINDING);发布于 2016-11-11 22:43:13
您发送的请求似乎触及了SOAP1.1端点,而不是SOAP1.2。
如果您的wsdl是使用自顶向下方法构建的,请确保WSDL中存在用于SOAP1.2的SOAP绑定。此外,SOAP 1.2的端口( wsdl : Port )必须出现在wsdl中的wsdl:service下面。
如果它是使用自下而上的方法构建的,请确保此注释@BindingType(value = SOAPBinding.SOAP12HTTP_MTOM_BINDING)在启用mtom时位于SIB上,否则使用@BindingType(value =SOAPBinding.SOAP12HTTP_MTOM_BINDING)
然后,在使用maven插件生成客户端wsdl时,确保使用<extension>true</extension>。
例如,如果您在wsdl:service部分中使用带有两个端口的wsdl,如下所示:
<wsdl:service name="TestService">
<wsdl:port name="TestPortSoap11" binding="tns:TestPort12Binding">
<soap:address location="http://127.0.0.1:8081/testSoap11Endpoint"/>
</wsdl:port>
<wsdl:port name="TestPortSoap12" binding="tns:TestPort12Binding">
<soap12:address location="http://127.0.0.1:8081/testSoap12Endpoint"/>
</wsdl:port>
</wsdl:service>若要使用SOAP1.2端点,请通过调用以下命令确保获得服务实例:
TestPortType testService = new TestService().getTestPortSoap12();请注意粗体中的文本“新与SOAP1.2端口名的名称匹配。
或者在web服务客户端的配置中,确保所使用的端点地址指向SOAP1.2端口,例如,在我们的示例中,它是http://127.0.0.1:8081/testSoap12Endpoint而不是http://127.0.0.1:8081/testSoap11Endpoint。
如果这些步骤失败,请共享wsdl片段(显示wsdl:service部分),并且您的@Configuration服务春信任。
https://stackoverflow.com/questions/40507443
复制相似问题