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

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

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

   

你们知道如何在Java代码中实现这一点(在端口上,在SOAPBinding上……)?

在此先感谢您的帮助!

编辑 – – – – – – – – – – –

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

有任何想法吗?

编辑 – – – – – – – – – – –

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

谢谢!

好的,我再次回答我自己的问题,分享解决方案。 在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); 

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

希望这可以帮助!

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

 @BindingType(SOAPBinding.SOAP12HTTP_BINDING) 

如果您使用的是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); 

正如Donal Fellows所建议我回答我自己的问题;)

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

    

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

编辑——————————–

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

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