JBoss 6.x throwing java.lang.ClassNotFoundException: com.sun



在我们的应用程序中,我们进行WSDL服务调用(假设为"SomeService")。我们在环境中使用JBoss6.x和JDK1.8(测试)。对于其他一些服务,我们的应用程序还依赖于CXF。应该通过标准JAXWS而不是"CXF"来调用"SomeService"。默认情况下,c all是通过CXF路由的,这会导致策略问题。因此,我采用了下面提到的解决方案:

JAX-WS=当Apache CXF被安装时;偷窃;JDK JAX-WS默认实现,如何解决。

我在代码中做了以下更改:

if (previousDelegate.getClass().getName().contains("cxf")) {
ServiceDelegate serviceDelegate = ((Provider)    Class.forName("com.sun.xml.internal.ws.spi.ProviderImpl").newInstance())
.createServiceDelegate(SomeService.WSDL_LOCATION,    SomeService.SERVICE_NAME, service.getClass());
delegateField.set(service, serviceDelegate);
}

这个更改在我的本地环境中对我来说很好(我使用的是Tomcat8+JDK1.8)。我在测试平台(它是JBoss6.x+JDK1.8)中部署了代码。在测试功能时,我得到了以下错误:

java.lang.ClassNotFoundException: com.sun.xml.internal.ws.spi.ProviderImpl from [Module "deployment.MyAPP.war:main" from Service Module Loader]

不确定这个错误的原因。有人知道这件事的线索吗?我们需要对JBoss服务器进行任何额外的更改吗。由于"com.sun.xml.internal.ws.spi.ProviderImpl"是标准类,并且在JDK1.8中可用,我看不出有任何原因会出现上述错误,因为我们的JBoss服务器指向JDK1.8。

非常感谢你的帮助。

  • 这看起来像是应用程序或应用程序服务器的类加载问题。

  • ClassNotFoundException将在第一次引用类并且类加载器尝试加载它时发生。下次引用类时,类加载器缓存了找不到的内容,并将抛出NoClassDefFoundError。

  • 确认ClassNotFoundException不是由类未正确打包或其他类加载器设置引起的。此外,请确保在第一次引用类时不会发生ClassNotFoundException。

  • 检查JBoss路径中是否有符号链接。这将告诉我们您已部署到应用程序中的类,并允许我们检查com.sun.xml.internal.ws.spi.ProviderImpl或相关类是否已部署到该应用程序中。该类与该目录中的应用程序服务器一起提供,我认为这应该是加载该类的唯一位置。

    src/jboss-as/thirdparty/sun-jaxws/lib/jaxws-rt.jar

  • 我能找到的唯一参考消息"classLoader没有连接到类"的域(可能未部署?)

  • 如果您正在使用自定义的JAX-WS实现,并且不想使用JBossWS CXF(EAP 6.x附带的受支持的JAX-WS库),则需要首先从部署中删除JBossWS

  • 完成后,您需要公开表示JAX-WS和SAAJ实现的JDK类。

  • 请确保将sun.internal.saaj和sun.internal-ws的模块依赖项添加到部署中。

-

Anup

最新更新