当前位置: 首页 > 知识库问答 >
问题:

Wildfly的JAXWS实现似乎忽略了bindingProvider属性com。太阳xml。ws。运输https。客户SSLSocketFactory

李跃
2023-03-14

我的环境是一个Maven项目,Wildfly(8.2.1)作为应用服务器。我需要的是使用SOAP将传入REST调用中的wihin连接到第三方服务器。我需要SSL客户端身份验证;因此,我有自己的密钥库和信任库。因此,我创建了自己的SSLContext,需要让Web服务使用这个SSLContext。

Wildfly存在一个问题,它用于实现JAXWS(Apache CXF?)-我在这里描述了它(但用了另一种解决问题的方法;因此它不是重复的帖子!):
Wildfly:如何使用JAXWS-RI代替Apache CXF(仅限WebService客户端)

主要问题之一似乎是,Wildfly中使用的JAXWS似乎忽略了使用属性com设置自己的SSLContext。太阳xml。内部的ws。运输https。客户SSLSocketFactory

MyWS_Service service = new MyWS_Service(null, new QName("http://...", "MyWS"));
MyWS port = service.getMyWSSOAP();

BindingProvider bindingProvider = (BindingProvider) port;
bindingProvider.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, "https://hostname:443/.../...");

// the following setting is ignored!
bindingProvider.getRequestContext().put("com.sun.xml.internal.ws.transport.https.client.SSLSocketFactory", mySslSocketFactory);

// in some posts, we see that we need to eliminate 'internal' in the property. This does not help!
bindingProvider.getRequestContext().put("com.sun.xml.ws.transport.https.client.SSLSocketFactory", mySslSocketFactory);

它被忽略的证据是,如果我使用HttpsURLConnection。setDefaultSSLSocketFactory(mysslssocketFactory)要设置SSLContext,它确实有效-意味着SSL连接是通过导入根CA到SSLContext中的自定义信任库设置而建立的。

如果我们看看其他帖子(例如,如何以编程方式设置JAX-WS客户端的SSLContext?)这个属性应该可以使用(根据一些评论,甚至对Wildfly也是如此)。但在我的情况下不是这样的。这可能是什么原因?

共有3个答案

商曦
2023-03-14

Apache CXF忽略JAX-WS属性。您可以通过以下方式以编程方式指定TLS客户端参数:

TLSClientParameters tlsParams = new TLSClientParameters();
tlsParams.setUseHttpsURLConnectionDefaultSslSocketFactory(false);
tlsParams.setSSLSocketFactory(sslSocketFactory);
bindingProvider.getRequestContext().put(TLSClientParameters.class.getName(), tlsParams);
狄鸿禧
2023-03-14

在使用Wildfly 10的httpconductor解决方案时,我必须添加jboss部署结构。xml

<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
    <deployment>
        <dependencies>
  <module name="org.jboss.ws.cxf.jbossws-cxf-client" services="import" />

  <module name="org.apache.cxf.impl" export="true">  
       <imports>  
            <include path="META-INF" />  
            <include path="META-INF/cxf" />  
            <include path="META-INF/services" />  
       </imports>         
  </module>   
        </dependencies>
    </deployment>

</jboss-deployment-structure>
竺和洽
2023-03-14

问题是Apache CXF完全忽略了

bindingProvider.getRequestContext().put(
    "com.sun.xml.[internal.]ws.transport.https.client.SSLSocketFactory", mySslSocketFactory);

在oposite上发表了一些评论。

因此,我的最终解决方案是以编程方式设置使用的httpconductor(而不是在cxf.xml文件中设置配置)。

// Set custom SSLContext.
HTTPConduit conduit = (HTTPConduit) ClientProxy.getClient(port).getConduit();
TLSClientParameters tlsClientParameters = new TLSClientParameters();
tlsClientParameters.setSSLSocketFactory(customSSLContext.getSocketFactory());
conduit.setTlsClientParameters(tlsClientParameters);

我希望这能帮助有类似问题的人。。。

 类似资料:
  • 问题内容: 我的环境是作为应用程序服务器的Maven项目和Wildfly(8.2.1)。我需要使用SOAP将传入的REST调用与第三方服务器连接。我需要SSL客户端身份验证;因此,我有自己的KeyStore和TrustStore。因此,我创建了自己的SSLContext,需要让WebService使用此SSLContext。 Wildfly出现问题,并且使用了JAXWS的实现(Apache CXF

  • 我在配置Spring MessageSource以忽略我的系统区域设置时遇到问题。当我使用null locale参数调用getMessage时,我希望我的MessageSource选择默认属性文件messages.properties.相反,它选择messages_en.properties.当我将此属性文件的名称更改为messages_fr.properties然后选择默认属性文件。我的系统区域

  • 我已经为这个问题挣扎了几天了,希望有人能帮上忙。 当我的应用程序尝试构建Hibernate3 SessionFactory时,我遇到以下错误: 下面是我的/WEB-INF/jboss网站。xml: Hibernate在我的单元测试中运行良好,只有当我将其部署到测试服务器时才会发生这种情况。 从我发现的情况来看,这似乎是因为jboss已经有了dom4j的副本。 不,我无法从我的项目中删除dom4j,

  • 我需要访问JDK 11中的遗留SOAP网络服务。但是我正在遭受“找不到提供商” JDK11实现是:zulu11。2.3-jdk11。0.1-win_x64。 在我的build.gradle,我有以下依赖: 我看到: 以下https://github.com/javaee/metro-jax-ws/issues/1247我尝试设置: -贾瓦克斯。xml。ws。spi。Provider=com。太阳x

  • 我正在将Spring Boot应用程序转换为Quarkus,作为概念证明。当我构建Quarkus应用程序并用Java运行它时,它运行良好,但当我尝试将其作为本机应用程序运行时,我在内部sun类(com.sun.xml.internal.ws.spi.ProviderImpl)上得到一个ClassNotFoundException,因为它在Java中运行,我希望本机应用程序也能工作。 我正在使用:

  • 问题内容: 我想在VPS上运行一个用Java编写的非常简单的机器人。我想将jvm内存限制为10MB(我怀疑是否需要更多内存)。 我正在使用以下命令运行机器人: java -Xms5M -Xmx10M -server -jar IrcBot.jar“ / home / jbot” 但是表明为Java保留的实际内存是(或者我在这里解释错了吗?)。 13614 jbot 17 0 144米 16米674