【发布时间】:2017-05-18 02:25:15
【问题描述】:
在我们的应用程序中,我们进行 WSDL 服务调用(让我们说“SomeService”)。我们在我们的环境(测试)中使用 JBoss 6.x 和 JDK1.8。我们的应用程序还依赖于 CXF 来提供其他一些服务。应该通过标准 JAXWS 而不是“CXF”调用“SomeService”。默认情况下,c 所有都通过 CXF 路由,这会导致策略问题。因此,我遵循了下面提到的解决方案:
JAX-WS = When Apache CXF is installed it "steals" default JDK JAX-WS implementation, how to solve? 。
我在我的代码中做了以下更改:
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);
}
此更改在我的本地环境中适用于我(我使用的是 Tomcat 8 +JDK 1.8)。我在测试平台(它是 JBoss 6.x + JDK 1.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.
非常感谢您的帮助。
【问题讨论】: