首页 > 解决方案 > 如何在 wildfly 10 中隔离战争类加载。获取 org.apache.cxf.enpoint.Client 类的可见性问题

问题描述

我正在尝试部署一个战争,它在 Wildfly 10.1.0.Final 中有一个用于 SOAP 服务的 JAX-WS 客户端。当我试图获取 web 服务的端口时,javax.xml.ws.Service 中的委托接口会自动转到 getPort() 方法的 apache cxf 实现。

当它在内部尝试创建代理连接时,我收到 IllegalArgumentException,因为 org.apache.cxf.enpoint.Client 对类加载器不可见。

我已经阅读了 wildfly 的文档和类加载层次结构。Wildfly 有一个 cxf-core.jar(3.1.6),我的战争也有 cxf-core.jar(3.1.7)。我的估计是它试图从 wildfly 访问 cxf-core.jar 并引发类加载问题。

JBOSS 有不同的元文件来改变正常类加载的流程,如 jboss-web.xml、jboss-classloading.xml 等。我的查询应该使用哪个元文件来解决这个类加载器的可见性问题。

元文件是什么,内容是什么,我需要在内容中写入什么引用(比如战争名称 mywar.war)。

我得到的错误跟踪:

13:38:22,877 INFO [org.apache.cxf.wsdl.service.factory.ReflectionServiceFactoryBean] (e99c3221-b10d-4fe7-b0ff-22fac3e1754d) 从 WSDL 创建服务 { http://exp.com/webservices/ }CustomerRelationshipManagementWebService:http://localhost:5321/Nsb.CustomerRelationshipManagement.WebService.asmx?wsdl 13:39:18,632 错误 [stderr] (e99c3221-b10d-4fe7-b0ff-22fac3e1754d) java.lang.IllegalArgumentException:接口 org.apache.cxf.endpoint.Client 在类加载器中不可见 13:39:18,642 错误 [stderr ] (e99c3221-b10d-4fe7-b0ff-22fac3e1754d) 在 java.lang.reflect.Proxy$ProxyClassFactory.apply(Proxy.java:581) 13:39:18,646 错误 [stderr] (e99c3221-b10d-4fe7-b0ff-22fac3e1754d ) 在 java.lang.reflect.Proxy$ProxyClassFactory.apply(Proxy.java:557) 13:39:18,648 错误 [stderr] (e99c3221-b10d-4fe7-b0ff-22fac3e1754d) 在 java.lang.reflect.WeakCache$Factory .get(WeakCache.java:230) 13:39:18,654 错误 [stderr] (e99c3221-b10d-4fe7-b0ff-22fac3e1754d) 在 java.lang.reflect.WeakCache.get(WeakCache.java:127) 13:39: 18,656 错误 [stderr] (e99c3221-b10d-4fe7-b0ff-22fac3e1754d) 在 java.lang.reflect.Proxy.getProxyClass0(Proxy.java:419) 13:39:18,662 错误 [stderr] (e99c3221-b10d-4fe7-b0ff-22fac3e1754d) 在 java.lang.reflect.Proxy.newProxyInstance(Proxy.java:719) 13:39:18,664 错误 [stderr] (e99c3221 -b10d-4fe7-b0ff-22fac3e1754d) 在 org.apache.cxf.common.util.ProxyHelper.getProxyInternal(ProxyHelper.java:47) 13:39:18,666 错误 [stderr] (e99c3221-b10d-4fe7-b0ff-22fac3e1754d)在 org.apache.cxf.common.util.ProxyHelper.getProxy(ProxyHelper.java:101) 13:39:18,669 错误 [stderr] (e99c3221-b10d-4fe7-b0ff-22fac3e1754d) 在 org.apache.cxf.frontend。 ClientProxyFactoryBean.create(ClientProxyFactoryBean.java:175) 13:39:18,671 错误 [stderr] (e99c3221-b10d-4fe7-b0ff-22fac3e1754d) 在 org.apache.cxf.jaxws.JaxWsProxyFactoryBean.create(JaxWsProxyFactoryBean.java:142) 13 :39:18,673 错误 [stderr] (e99c3221-b10d-4fe7-b0ff-22fac3e1754d) 在 org.apache.cxf。jaxws.ServiceImpl.createPort(ServiceImpl.java:493) 13:39:18,675 错误 [stderr] (e99c3221-b10d-4fe7-b0ff-22fac3e1754d) 在 org.jboss.wsf.stack.cxf.client.ProviderImpl$JBossWSServiceImpl.createPort (ProviderImpl.java:578) 13:39:18,680 错误 [stderr] (e99c3221-b10d-4fe7-b0ff-22fac3e1754d) 在 org.apache.cxf.jaxws.ServiceImpl.getPort(ServiceImpl.java:359) 13:39: 18,691 错误 [stderr] (e99c3221-b10d-4fe7-b0ff-22fac3e1754d) 在 org.apache.cxf.jaxws.ServiceImpl.getPort(ServiceImpl.java:350) 13:39:18,700 错误 [stderr] (e99c3221-b10d-4fe7 -b0ff-22fac3e1754d) 在 javax.xml.ws.Service.getPort(Service.java:99) 13:39:18,705 错误 [stderr] (e99c3221-b10d-4fe7-b0ff-22fac3e1754d) 在 com.abc.client.CustomerRelationshipManagementWebService .getCustomerRelationshipManagementWebServiceSoap(CustomerRelationshipManagementWebService.java:72)ServiceImpl.createPort(ServiceImpl.java:493) 13:39:18,675 错误 [stderr] (e99c3221-b10d-4fe7-b0ff-22fac3e1754d) 在 org.jboss.wsf.stack.cxf.client.ProviderImpl$JBossWSServiceImpl.createPort(ProviderImpl .java:578) 13:39:18,680 错误 [stderr] (e99c3221-b10d-4fe7-b0ff-22fac3e1754d) 在 org.apache.cxf.jaxws.ServiceImpl.getPort(ServiceImpl.java:359) 13:39:18,691 错误[stderr] (e99c3221-b10d-4fe7-b0ff-22fac3e1754d) at org.apache.cxf.jaxws.ServiceImpl.getPort(ServiceImpl.java:350) 13:39:18,700 错误 [stderr] (e99c3221-b10d-4fe7-b0ff -22fac3e1754d) 在 javax.xml.ws.Service.getPort(Service.java:99) 13:39:18,705 错误 [stderr] (e99c3221-b10d-4fe7-b0ff-22fac3e1754d) 在 com.abc.client.CustomerRelationshipManagementWebService.getCustomerRelationshipManagementWebServiceSoap (客户关系管理WebService.java:72)ServiceImpl.createPort(ServiceImpl.java:493) 13:39:18,675 错误 [stderr] (e99c3221-b10d-4fe7-b0ff-22fac3e1754d) 在 org.jboss.wsf.stack.cxf.client.ProviderImpl$JBossWSServiceImpl.createPort(ProviderImpl .java:578) 13:39:18,680 错误 [stderr] (e99c3221-b10d-4fe7-b0ff-22fac3e1754d) 在 org.apache.cxf.jaxws.ServiceImpl.getPort(ServiceImpl.java:359) 13:39:18,691 错误[stderr] (e99c3221-b10d-4fe7-b0ff-22fac3e1754d) at org.apache.cxf.jaxws.ServiceImpl.getPort(ServiceImpl.java:350) 13:39:18,700 错误 [stderr] (e99c3221-b10d-4fe7-b0ff -22fac3e1754d) 在 javax.xml.ws.Service.getPort(Service.java:99) 13:39:18,705 错误 [stderr] (e99c3221-b10d-4fe7-b0ff-22fac3e1754d) 在 com.abc.client.CustomerRelationshipManagementWebService.getCustomerRelationshipManagementWebServiceSoap (客户关系管理WebService.java:72)72)72)createPort(ServiceImpl.java:493) 13:39:18,675 错误 [stderr] (e99c3221-b10d-4fe7-b0ff-22fac3e1754d) 在 org.jboss.wsf.stack.cxf.client.ProviderImpl$JBossWSServiceImpl.createPort(ProviderImpl.java :578) 13:39:18,680 错误 [stderr] (e99c3221-b10d-4fe7-b0ff-22fac3e1754d) 在 org.apache.cxf.jaxws.ServiceImpl.getPort(ServiceImpl.java:359) 13:39:18,691 错误 [stderr ] (e99c3221-b10d-4fe7-b0ff-22fac3e1754d) 在 org.apache.cxf.jaxws.ServiceImpl.getPort(ServiceImpl.java:350) 13:39:18,700 错误 [stderr] (e99c3221-b10d-4fe7-b0ff-22fac3e1754d ) at javax.xml.ws.Service.getPort(Service.java:99) 13:39:18,705 错误 [stderr] (e99c3221-b10d-4fe7-b0ff-22fac3e1754d) 在 com.abc.client.CustomerRelationshipManagementWebService.getCustomerRelationshipManagementWebServiceSoap(CustomerRelationshipManagementWebService .java:72)createPort(ServiceImpl.java:493) 13:39:18,675 错误 [stderr] (e99c3221-b10d-4fe7-b0ff-22fac3e1754d) 在 org.jboss.wsf.stack.cxf.client.ProviderImpl$JBossWSServiceImpl.createPort(ProviderImpl.java :578) 13:39:18,680 错误 [stderr] (e99c3221-b10d-4fe7-b0ff-22fac3e1754d) 在 org.apache.cxf.jaxws.ServiceImpl.getPort(ServiceImpl.java:359) 13:39:18,691 错误 [stderr ] (e99c3221-b10d-4fe7-b0ff-22fac3e1754d) 在 org.apache.cxf.jaxws.ServiceImpl.getPort(ServiceImpl.java:350) 13:39:18,700 错误 [stderr] (e99c3221-b10d-4fe7-b0ff-22fac3e1754d ) at javax.xml.ws.Service.getPort(Service.java:99) 13:39:18,705 错误 [stderr] (e99c3221-b10d-4fe7-b0ff-22fac3e1754d) 在 com.abc.client.CustomerRelationshipManagementWebService.getCustomerRelationshipManagementWebServiceSoap(CustomerRelationshipManagementWebService .java:72)java:493) 13:39:18,675 错误 [stderr] (e99c3221-b10d-4fe7-b0ff-22fac3e1754d) 在 org.jboss.wsf.stack.cxf.client.ProviderImpl$JBossWSServiceImpl.createPort(ProviderImpl.java:578) 13 :39:18,680 错误 [stderr] (e99c3221-b10d-4fe7-b0ff-22fac3e1754d) 在 org.apache.cxf.jaxws.ServiceImpl.getPort(ServiceImpl.java:359) 13:39:18,691 错误 [stderr] (e99c3221- b10d-4fe7-b0ff-22fac3e1754d) at org.apache.cxf.jaxws.ServiceImpl.getPort(ServiceImpl.java:350) 13:39:18,700 错误 [stderr] (e99c3221-b10d-4fe7-b0ff-22fac3e1754d) 在 javax。 xml.ws.Service.getPort(Service.java:99) 13:39:18,705 错误 [stderr] (e99c3221-b10d-4fe7-b0ff-22fac3e1754d) 在 com.abc.client.CustomerRelationshipManagementWebService.getCustomerRelationshipManagementWebServiceSoap(CustomerRelationshipManagementWebService.java:72 )java:493) 13:39:18,675 错误 [stderr] (e99c3221-b10d-4fe7-b0ff-22fac3e1754d) 在 org.jboss.wsf.stack.cxf.client.ProviderImpl$JBossWSServiceImpl.createPort(ProviderImpl.java:578) 13 :39:18,680 错误 [stderr] (e99c3221-b10d-4fe7-b0ff-22fac3e1754d) 在 org.apache.cxf.jaxws.ServiceImpl.getPort(ServiceImpl.java:359) 13:39:18,691 错误 [stderr] (e99c3221- b10d-4fe7-b0ff-22fac3e1754d) at org.apache.cxf.jaxws.ServiceImpl.getPort(ServiceImpl.java:350) 13:39:18,700 错误 [stderr] (e99c3221-b10d-4fe7-b0ff-22fac3e1754d) 在 javax。 xml.ws.Service.getPort(Service.java:99) 13:39:18,705 错误 [stderr] (e99c3221-b10d-4fe7-b0ff-22fac3e1754d) 在 com.abc.client.CustomerRelationshipManagementWebService.getCustomerRelationshipManagementWebServiceSoap(CustomerRelationshipManagementWebService.java:72 )675 错误 [stderr] (e99c3221-b10d-4fe7-b0ff-22fac3e1754d) 在 org.jboss.wsf.stack.cxf.client.ProviderImpl$JBossWSServiceImpl.createPort(ProviderImpl.java:578) 13:39:18,680 错误 [stderr] (e99c3221-b10d-4fe7-b0ff-22fac3e1754d) at org.apache.cxf.jaxws.ServiceImpl.getPort(ServiceImpl.java:359) 13:39:18,691 错误 [stderr] (e99c3221-b10d-4fe7-b0ff-22fac3e1754d)在 org.apache.cxf.jaxws.ServiceImpl.getPort(ServiceImpl.java:350) 13:39:18,700 错误 [stderr] (e99c3221-b10d-4fe7-b0ff-22fac3e1754d) 在 javax.xml.ws.Service.getPort( Service.java:99) 13:39:18,705 错误 [stderr] (e99c3221-b10d-4fe7-b0ff-22fac3e1754d) 在 com.abc.client.CustomerRelationshipManagementWebService.getCustomerRelationshipManagementWebServiceSoap(CustomerRelationshipManagementWebService.java:72)675 错误 [stderr] (e99c3221-b10d-4fe7-b0ff-22fac3e1754d) 在 org.jboss.wsf.stack.cxf.client.ProviderImpl$JBossWSServiceImpl.createPort(ProviderImpl.java:578) 13:39:18,680 错误 [stderr] (e99c3221-b10d-4fe7-b0ff-22fac3e1754d) at org.apache.cxf.jaxws.ServiceImpl.getPort(ServiceImpl.java:359) 13:39:18,691 错误 [stderr] (e99c3221-b10d-4fe7-b0ff-22fac3e1754d)在 org.apache.cxf.jaxws.ServiceImpl.getPort(ServiceImpl.java:350) 13:39:18,700 错误 [stderr] (e99c3221-b10d-4fe7-b0ff-22fac3e1754d) 在 javax.xml.ws.Service.getPort( Service.java:99) 13:39:18,705 错误 [stderr] (e99c3221-b10d-4fe7-b0ff-22fac3e1754d) 在 com.abc.client.CustomerRelationshipManagementWebService.getCustomerRelationshipManagementWebServiceSoap(CustomerRelationshipManagementWebService.java:72)cxf.client.ProviderImpl$JBossWSServiceImpl.createPort(ProviderImpl.java:578) 13:39:18,680 错误 [stderr] (e99c3221-b10d-4fe7-b0ff-22fac3e1754d) 在 org.apache.cxf.jaxws.ServiceImpl.getPort(ServiceImpl .java:359) 13:39:18,691 错误 [stderr] (e99c3221-b10d-4fe7-b0ff-22fac3e1754d) 在 org.apache.cxf.jaxws.ServiceImpl.getPort(ServiceImpl.java:350) 13:39:18,700 错误[stderr] (e99c3221-b10d-4fe7-b0ff-22fac3e1754d) 在 javax.xml.ws.Service.getPort(Service.java:99) 13:39:18,705 错误 [stderr] (e99c3221-b10d-4fe7-b0ff-22fac3e1754d ) 在 com.abc.client.CustomerRelationshipManagementWebService.getCustomerRelationshipManagementWebServiceSoap(CustomerRelationshipManagementWebService.java:72)cxf.client.ProviderImpl$JBossWSServiceImpl.createPort(ProviderImpl.java:578) 13:39:18,680 错误 [stderr] (e99c3221-b10d-4fe7-b0ff-22fac3e1754d) 在 org.apache.cxf.jaxws.ServiceImpl.getPort(ServiceImpl .java:359) 13:39:18,691 错误 [stderr] (e99c3221-b10d-4fe7-b0ff-22fac3e1754d) 在 org.apache.cxf.jaxws.ServiceImpl.getPort(ServiceImpl.java:350) 13:39:18,700 错误[stderr] (e99c3221-b10d-4fe7-b0ff-22fac3e1754d) 在 javax.xml.ws.Service.getPort(Service.java:99) 13:39:18,705 错误 [stderr] (e99c3221-b10d-4fe7-b0ff-22fac3e1754d ) 在 com.abc.client.CustomerRelationshipManagementWebService.getCustomerRelationshipManagementWebServiceSoap(CustomerRelationshipManagementWebService.java:72)680 错误 [stderr] (e99c3221-b10d-4fe7-b0ff-22fac3e1754d) 在 org.apache.cxf.jaxws.ServiceImpl.getPort(ServiceImpl.java:359) 13:39:18,691 错误 [stderr] (e99c3221-b10d-4fe7 -b0ff-22fac3e1754d) 在 org.apache.cxf.jaxws.ServiceImpl.getPort(ServiceImpl.java:350) 13:39:18,700 错误 [stderr] (e99c3221-b10d-4fe7-b0ff-22fac3e1754d) 在 javax.xml.ws .Service.getPort(Service.java:99) 13:39:18,705 错误 [stderr] (e99c3221-b10d-4fe7-b0ff-22fac3e1754d) 在 com.abc.client.CustomerRelationshipManagementWebService.getCustomerRelationshipManagementWebServiceSoap(CustomerRelationshipManagementWebService.java:72)680 错误 [stderr] (e99c3221-b10d-4fe7-b0ff-22fac3e1754d) 在 org.apache.cxf.jaxws.ServiceImpl.getPort(ServiceImpl.java:359) 13:39:18,691 错误 [stderr] (e99c3221-b10d-4fe7 -b0ff-22fac3e1754d) 在 org.apache.cxf.jaxws.ServiceImpl.getPort(ServiceImpl.java:350) 13:39:18,700 错误 [stderr] (e99c3221-b10d-4fe7-b0ff-22fac3e1754d) 在 javax.xml.ws .Service.getPort(Service.java:99) 13:39:18,705 错误 [stderr] (e99c3221-b10d-4fe7-b0ff-22fac3e1754d) 在 com.abc.client.CustomerRelationshipManagementWebService.getCustomerRelationshipManagementWebServiceSoap(CustomerRelationshipManagementWebService.java:72)700 错误 [stderr] (e99c3221-b10d-4fe7-b0ff-22fac3e1754d) 在 javax.xml.ws.Service.getPort(Service.java:99) 13:39:18,705 错误 [stderr] (e99c3221-b10d-4fe7-b0ff -22fac3e1754d) 在 com.abc.client.CustomerRelationshipManagementWebService.getCustomerRelationshipManagementWebServiceSoap(CustomerRelationshipManagementWebService.java:72)700 错误 [stderr] (e99c3221-b10d-4fe7-b0ff-22fac3e1754d) 在 javax.xml.ws.Service.getPort(Service.java:99) 13:39:18,705 错误 [stderr] (e99c3221-b10d-4fe7-b0ff -22fac3e1754d) 在 com.abc.client.CustomerRelationshipManagementWebService.getCustomerRelationshipManagementWebServiceSoap(CustomerRelationshipManagementWebService.java:72)

提前致谢

标签: jax-wsclassloadersoap-clientwildfly-10class-visibility

解决方案


您需要通过将 jboss-deployment-structure.xml 文件添加到 WAR 的 WEB-INF 文件夹中来从部署中排除 JBoss Web 服务子系统。

来源: 从部署中排除子系统

这是一个可以做到这一点的例子。

    <?xml version="1.0" encoding="UTF-8"?>  
    <jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2">  
      <deployment>  
        <exclude-subsystems>   
          <subsystem name="webservices" />
        </exclude-subsystems>
        <dependencies>
          <module name="org.apache.cxf" />
          <module name="org.apache.cxf.impl" />
        </dependencies>  
      </deployment>  
    </jboss-deployment-structure> 

推荐阅读