首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使JAX端点接受SOAP1.2消息

如何使JAX端点接受SOAP1.2消息
EN

Stack Overflow用户
提问于 2016-11-09 12:49:39
回答 2查看 5.2K关注 0票数 4

我有一个基于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中:

代码语言:javascript
复制
    endpoint.setBindingConfig(new BindingConfiguration()
    {
        @Override
        public String getBindingId()
        {
            return SOAPBinding.SOAP12HTTP_MTOM_BINDING;
        }
    });

这没什么用。当我变得更加绝望时,我尝试了@BindingType@SOAPBinding注释,这当然不起作用,然后我尝试了SaajSoapMessageFactorySoapVersion.SOAP_12。没起作用。我在我的jaxws-maven-plugin里尝试了jaxws-maven-plugin。失败。

端点显然没有配置为接收SOAP1.2消息。我怎样才能做到这一点?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-11-11 23:05:19

我想通了。在实现端点时,我需要设置绑定url。由于某种不明显的原因,事后设置它不起作用。

代码语言:javascript
复制
EndpointImpl endpoint = new EndpointImpl(springBus(), statusService(), SOAPBinding.SOAP12HTTP_BINDING);
票数 5
EN

Stack Overflow用户

发布于 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,如下所示:

代码语言:javascript
复制
    <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端点,请通过调用以下命令确保获得服务实例:

代码语言:javascript
复制
    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服务春信任。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40507443

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档