2017-01-03 12 views
0

В нашем приложении мы делаем вызов службы 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.

Ваша помощь очень ценится.

ответ

0
  • Это похоже на проблему с классом, связанное с вашим приложением или сервером приложений.

  • Класс ClassNotFoundException будет происходить при первом обращении к классу, и загрузчик классов попытается загрузить его. В следующий раз, когда класс ссылается, загрузчик классов имеет кешированный, который не найден и будет вызывать NoClassDefFoundError.

  • Убедитесь, что ClassNotFoundException не вызвано тем, что класс не упакован правильно или другие параметры загрузчика классов. Кроме того, убедитесь, что ClassNotFoundException не возникает при первом обращении к классу.

  • Проверьте, нет ли символических ссылок в пути JBoss. Это расскажет нам о классах, которые вы развернули в своем приложении, и позвольте нам проверить, запущен ли на нем com.sun.xml.internal.ws.spi.ProviderImpl или связанный с ним класс. Этот класс поставляется с сервером приложений в этом каталоге, и я думаю, что это должно быть единственное место, из которого оно загружено.

    SRC/JBoss-а/ThirdParty/ВС-JAXWS/Lib/JAXWS-rt.jar

  • Единственная ссылка, которую я могу найти сообщение «ClassLoader не подключен к домену (вероятно, раскрылись?) для класса "

  • Если вы используете пользовательскую реализацию JAX-WS и не хотите использовать JBossWS CXF (поддерживаемая библиотека JAX-WS, которая поставляется с EAP 6.x), вам необходимо сначала удалить JBossWS из вашего развертывания

  • После того, как вы это сделали, вам необходимо разоблачить классы JDK, которые представляют JA X-WS и SAAJ.

  • Убедитесь, что вы добавляете зависимости модулей для sun.internal.saaj и sun.internal.ws к вашему развертыванию.

-

Anup