В нашем приложении мы делаем вызов службы WSDL (скажем, «SomeService»). Мы используем JBoss 6.x и JDK1.8 в нашей среде (тест). Наше приложение также имеет зависимость от CXF для некоторых других сервисов. «SomeService» следует вызывать через стандартный JAXWS вместо «CXF». По умолчанию c все маршрутизируется через CXF, и это приводит к проблемам политики. Следовательно, я следовал указанному ниже решению:JBoss 6.x throwing java.lang.ClassNotFoundException: com.sun.xml.internal.ws.spi.ProviderImpl
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.
Ваша помощь очень ценится.