Java JAX-WS客户端,在测试/生产之间切换时无需生成新代理

Java JAX-WS客户端,在测试/生产之间切换时无需生成新代理,java,spring,web-services,jax-ws,Java,Spring,Web Services,Jax Ws,我正在尝试配置我的JAX-WS客户端,以便在测试/生产enpoint之间切换,而不必使用wsimport重新生成代理类 我尝试使用的服务在测试和生产中使用不同的WSDL。例如,targetNamespace和soapAction地址都不同 我尝试使用Springs JaxWsPortProxyFactoryBean,并根据部署环境指向不同的wsdl,但即使指向生产,它仍然使用测试中的WebMethod操作地址。我猜这是因为它们在使用指向测试wsdl的wsimport生成的服务接口中进行了硬编码

我正在尝试配置我的JAX-WS客户端,以便在测试/生产enpoint之间切换,而不必使用wsimport重新生成代理类

我尝试使用的服务在测试和生产中使用不同的WSDL。例如,targetNamespace和soapAction地址都不同

我尝试使用Springs JaxWsPortProxyFactoryBean,并根据部署环境指向不同的wsdl,但即使指向生产,它仍然使用测试中的WebMethod操作地址。我猜这是因为它们在使用指向测试wsdl的wsimport生成的服务接口中进行了硬编码


有人知道是否可以在不重新生成代理的情况下使用不同的targetNamespace和action地址在WSDL之间切换吗?

您可以覆盖endpoint address属性:

//从生成的服务类创建服务和代理。
HelloService服务=新的HelloService();
HelloPort proxy=service.getHelloPort();
((BindingProvider)proxy.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_属性,
"http://new/endpointaddress");
proxy.sayHello(“你好,世界!”);

根据您的问题,我不确定您是否还需要覆盖其他参数。

看起来是媒体类型标题中的操作参数出错了。将尝试使用处理程序进行更改。我进行了一些挖掘,发现我必须禁用HTTP媒体类型标头中的操作参数。这样,即使代理是使用测试wsdl生成的,我也能够调用生产服务。因此,我的下一个问题是更改返回信封中使用的名称空间,因为prod/testwsdl使用不同的名称空间,从而导致解组中出现问题。有人知道这是否可行吗?谢谢你的回答,问题不是覆盖端点地址。见上面的评论。
//Create service and proxy from the generated Service class.
HelloService service = new HelloService();
HelloPort proxy = service.getHelloPort();

<b>((BindingProvider)proxy).getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY,
                                                    "http://new/endpointaddress");</b>

proxy.sayHello("Hello World!");