NoClassDefFoundError для com / sun / istack / logging / Logger в Glassfish v3 - PullRequest
3 голосов
/ 03 марта 2010

У меня есть клиент приложения, который вызывает сервис SOAP. Я использовал wsimport из дистрибутива glassfish для генерации классов ws, и все отлично работает в Glassfish v2. Когда я запускаю его (веб-запуск) из v3, приложение работает нормально, но когда я инициирую вызов SOAP, я получаю

Exception in thread "Thread-146" java.lang.NoClassDefFoundError: com/sun/istack/logging/Logger
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:621)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
    at java.net.URLClassLoader.access$000(URLClassLoader.java:56)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
    at com.sun.jnlp.JNLPClassLoader.findClass(JNLPClassLoader.java:257)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
    at com.sun.xml.ws.policy.jaxws.WsitPolicyResolver.<clinit>(WsitPolicyResolver.java:62)
    at com.sun.xml.ws.policy.jaxws.WsitPolicyResolverFactory.doCreate(WsitPolicyResolverFactory.java:48)
    at com.sun.xml.ws.api.policy.PolicyResolverFactory.create(PolicyResolverFactory.java:58)
    at com.sun.xml.ws.wsdl.parser.RuntimeWSDLParser.parse(RuntimeWSDLParser.java:131)
    at com.sun.xml.ws.client.WSServiceDelegate.parseWSDL(WSServiceDelegate.java:267)
    at com.sun.xml.ws.client.WSServiceDelegate.<init>(WSServiceDelegate.java:230)
    at com.sun.xml.ws.client.WSServiceDelegate.<init>(WSServiceDelegate.java:178)
    at com.sun.xml.ws.spi.ProviderImpl.createServiceDelegate(ProviderImpl.java:106)
    at javax.xml.ws.Service.<init>(Service.java:56)
    at (class generated from wsdl)
    at (SOAP call)

Я нигде не могу найти названный класс, и, похоже, в сети почти нет ссылок на него.

РЕДАКТИРОВАТЬ Это в jaxb-osgi.jar

Разве это не должно быть предоставлено Glassfish? Конечно, если я включу его в свое приложение, оно создает риск конфликта?

1 Ответ

3 голосов
/ 06 марта 2010

Описание вашей проблемы и действия по ее воспроизведению не совсем понятны, но в состав GlassFish v3 входят Metro 2.0 и Metro 2.0, включающий JAX-WS 2.2, который конфликтует с JAX-WS 2.1 , поставляемой с Java SE 6:

Подробный анализ, когда именно это происходит, см. На вики-странице . Причина этих сбоев состоит в том, что Metro 2.0 содержит JAX-WS 2.2, который конфликтует с JAX-WS 2.1 1, встроенным в Java SE 6. Эти сбои вы увидите, только если вы не установили Metro 2.0 с нашими сценариями установки metro. на glassfish.xml / метро-на-tomcat.xml. Это тот случай, если вы, например, установил Metro 2.0 для GlassFish V3 через центр обновлений или если вы используете версию GlassFish V3, встроенную в NetBeans.

Самое простое решение - это загрузить Metro 2.0 nightly build и запустить скрипт установки. Сценарий копирует файл webservices-api.jar, который содержит API JAX-WS 2.2, в <java-home>/lib/endorsed. Кроме того, вы можете, конечно, вручную скопировать webservices-api.jar в подходящий одобренный каталог.

И поскольку com/sun/istack/logging/Logger является зависимостью JAX-WS 2.2 , вы, скорее всего, находитесь в ситуации, описанной на упомянутой вики-странице :

Пакеты Metro 2.0 JAX-WS 2.2. Java SE 6 содержит JAX-WS 2.1 (обновление 3 SE 6 и более ранняя версия содержат JAX-WS 2.0). Это означает, что Java по умолчанию будет использовать API-интерфейсы JAX-WS 2.1, и реализация, и код, использующий функции JAX-WS 2.2, не будет работать.

...