CXF如何在没有Spring的情况下在CXF端口上设置SoapVersion

时间:2010-11-22 17:11:04

标签: java configuration jax-ws cxf

我目前正在使用没有Spring配置文件的CXF的Web服务客户端。

它工作得很好,但我无法弄清楚如何使用Java Api设置绑定SoapVersion。 使用Spring文件,如下所示:

<jaxws:binding>
    <soap:soapBinding version="1.2"/>
</jaxws:binding>

你们是否知道如何在Java代码中执行此操作(在端口上,在SOAPBinding上...)?

提前感谢您的帮助!

EDIT ----------------------

我仍然坚持这个问题...... 我尝试在接口上添加SOAPBinding注释,如下面的响应之一所示,但它不起作用... 我仍然在寻找一种方法来手动配置我的PortType / Binding / Bus以使用Soap 1.2 ...

有什么想法吗?

EDIT ----------------------

问题解决了!其实我回答了我自己的问题:见下文......

谢谢!

5 个答案:

答案 0 :(得分:13)

好的我再次回答我自己的问题,分享解决方案。 在CXF邮件列表的帮助下,我发现了一个适合我的解决方案。 实际上有两种方法可以解决这个问题。 以下是解释:

问题来自我构建CXF服务的方式。

第一个解决方案是在服务创建时指定WSDL位置:

// Create the service
Service service = Service.create(urlToWsdl, serviceQName);
// Access the port
return service.getPort(serviceQName, portTypeClass);

这解决了这个问题,但我不想让这个链接到WSDL,所以这里是摆脱这个链接的第二个解决方案:

// Create the service
Service service = Service.create(serviceQName);
// Add a Port to the service and specify the SOAP 1.2 binding
service.addPort(serviceQName, javax.xml.ws.soap.SOAPBinding.SOAP12HTTP_BINDING, wsUrl);
// Access the port
return service.getPort(serviceQName, portTypeClass);

在我的项目中,我们决定选择第二种解决方案。

希望这有帮助!

答案 1 :(得分:6)

最简单的可能只是在以下界面上添加注释:

@BindingType(SOAPBinding.SOAP12HTTP_BINDING)

答案 2 :(得分:2)

如果您使用的是cxf客户端,则可以使用以下方式。它也可以绑定多个wsdl。

JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
factory.setServiceClass(WebServiceClass);
        BindingConfiguration config = new BindingConfiguration() {

    @Override
    public String getBindingId() {
            // TODO Auto-generated method stub
            return "http://www.w3.org/2003/05/soap/bindings/HTTP/";//SOAPVersion.SOAP_12.httpBindingId
    }
    };
    factory.setBindingConfig(config);

答案 3 :(得分:0)

根据Donal Fellows的建议,我回答了我自己的问题;)

实际上问题与服务器可以处理的Soap版本有关。 在客户端,我不需要指定我想使用Soap 1.2,似乎将WSDL文件中的PortType配置为Soap 1.2就足够了。 但是在服务器端我需要明确告诉我想要哪个Soap版本。 在服务器端,我仍然使用“Spring-mode”进行CXF配置,因此我在XML配置文件中添加了以下内容:

<jaxws:binding>
    <soap:soapBinding version="1.2"/>
</jaxws:binding>

那是所有人! 感谢您的时间和帮助!

编辑--------------------------------

实际上这个解决方案现在无法联系我们不管理的服务器....我们仍然坚持我们的问题....

答案 4 :(得分:0)

旧线程。我以为我会发布一个对我有用的解决方案。 在cxf-beans.xml文件中,我从endpointName="tns:MR_ServerSoap12"更改了endpointName="tns:MR_ServerSoap"。请注意,端点名称在wsdl中将有自己的名称。使用该名称。