我正在使用 JAXWS 调用 SOAP Web 服务,但 SSL 套接字工厂不起作用。该应用程序不使用我的信任库和密钥库,而是使用 JRE 的默认信任库。
BindingProvider bindingProvider = (BindingProvider) myWebservicePort;
Map<String, Object> requestContext = bindingProvider.getRequestContext();
requestContext.put(JAXWSProperties.SSL_SOCKET_FACTORY, sslSocketFactory);
常量
SSL_SOCKET_FACTORY
具有不同的值,具体取决于所使用的 JAXWS 实现。 JDK 8 中的类位于 com.sun.xml.internal.ws.developer.JAXWSProperties
类中,而参考实现 JAXWS-RI(例如由 JakartaEE 或 JakartaEE 接管 Oracle 之前的其他来源提供)在不同的包中具有相同的类:com.sun.xml.ws.developer.JAXWSProperties
。
因此,请确保导入具有与您的运行时匹配的
JAXWSProperties
常量的 SSL_SOCKET_FACTORY
版本。
仅供参考,实际的字符串是:
"com.sun.xml.internal.ws.transport.https.client.SSLSocketFactory"
"com.sun.xml.ws.transport.https.client.SSLSocketFactory"
但是,不要逐字使用它们,而是选择正确的
JAXWSProperties
类。