Search code examples
springjax-ws

How can I change the port of a Spring JaxWs proxy?


I have a working web service client based on Spring, defined as:

<bean id="myService" class="org.springframework.remoting.jaxws.JaxWsPortProxyFactoryBean">
    <property name="wsdlDocumentUrl"  value="classpath:/ex/MyService.wsdl" />
    <property name="namespaceUri"     value="http://ex.tld/namespace" />
    <property name="serviceName"      value="MyService" />
    <property name="portName"         value="MyServicePort01" />
    <property name="serviceInterface" value="ex.MyService" />
</bean>

I need to access the same service on a list of different endpoints. Since the list is dynamic I cannot simply configure several Spring JaxWsPortProxy beans for this.

Can I change the binding dynamically? How can I solve this while still leveraging Spring facilities for WS clients?


Solution

  • I simply changed the endpoint address of the proxy:

    ((BindingProvider)myService).getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, "http://new/endpoint/address");

    As seen above, the proxy that Spring returns can be casted to a BindingProvider (like a normal JaxWs proxy).

    If someone adopts this, beware of synchronization issues.