It’s very easy to configure custom SSLSocketFactory for JAX-WS web-service: just specify custom property referring to SSLSocketFactory bean. But there is a nuance…

In SpringFramework you may setup web service port with following XML configuration:

<bean id="myPort" class="org.springframework.remoting.jaxws.JaxWsPortProxyFactoryBean">
    <property name="serviceInterface" value="com.example.ServicePortInterface"/>
    <property name="wsdlDocumentResource" value="classpath:wsdl/MyService.wsdl"/>
    <property name="namespaceUri" value="urn:MyServer"/>
    <property name="serviceName" value="MyServerService"/>
    <property name="endpointAddress" value="${my.service.url}"/>
    <property name="customProperties">
        <map key-type="java.lang.String">
            <entry key="com.sun.xml.ws.transport.https.client.SSLSocketFactory"
                   value-ref="mySslSocketFactoryBean"/>
        </map>
    </property>
</bean>

<!--  My bean implements javax.net.ssl.SSLSocketFactory -->
<bean id="mySslSocketFactoryBean" .../>

The code above will work if you are using JAX-WS reference implementation but will not work with JAX-WS bundled in Oracle JDK. For that case you need to set a custom property named "com.sun.xml.internal.ws.transport.https.client.SSLSocketFactory".

That’s confusing, but you should use a property name defined in the JAXWSProperties class of JAX-WS implementation of your choice. For example:

  • com.sun.xml.ws.developer.JAXWSProperties.SSL_SOCKET_FACTORY – if you’re using JAXWS-RI implementation;
  • com.sun.xml.internal.ws.developer.JAXWSProperties.SSL_SOCKET_FACTORY – for Oracle JDK implementation;
  • weblogic.wsee.jaxws.JAXWSProperties.SSL_SOCKET_FACTORY – for WebLogic server’s implementation. …

So find a JAXWSProperties and use a value of constant SSL_SOCKET_FACTORY in JAX-WS binding custom properties.