Проблема загрузки классов в Eclipse RCP с Metro - PullRequest
1 голос
/ 20 января 2010

Я пытаюсь вызвать веб-службу, используя библиотеку Metro из приложения Eclipse RCP. Я связал соответствующие фляги Metro (webservices-tools.jar, webservices-rt.jar и webservices-api.jar) в плагин и сделал свой основной плагин приложения зависимым от этого нового плагина Metro.

Я также добавил webservices-api.jar в мой каталог $JAVA_HOME/jre/lib/endorsed. Согласно веб-сайту Metro, это требуется при использовании Metro с Java 1.6.

Теперь, когда я вызываю любой веб-сервис, я получаю следующую ошибку:

javax.xml.ws.WebServiceException: Provider com.sun.xml.ws.spi.ProviderImpl not found
at javax.xml.ws.spi.FactoryFinder.newInstance(FactoryFinder.jav a:38)
at javax.xml.ws.spi.FactoryFinder.find(FactoryFinder.java:133)
at javax.xml.ws.spi.Provider.provider(Provider.java:83)
at javax.xml.ws.Service.<init>(Service.java:56)  
...  
Caused by: java.lang.ClassNotFoundException: com.sun.xml.ws.spi.ProviderImpl
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301 )
at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
at org.eclipse.core.runtime.internal.adaptor.ContextFinder.load Class(ContextFinder.java:129)
at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
at javax.xml.ws.spi.FactoryFinder.newInstance(FactoryFinder.jav a:34)
... 43 more

Класс com.sun.xml.ws.spi.ProviderImpl находится в webservices-rt.jar, который является частью моего плагина Metro. Кроме того, я убедился, что мой код плагина приложения может успешно загрузить этот класс, поэтому я не уверен, почему javax.xml.ws.spi.FactoryFinder не может.

Поскольку javax.xml.ws.spi.FactoryFinder находится в webservices-api.jar (банку, которую я должен был поместить в одобренный каталог jre), я подозреваю, что это связано с тем, что одобренный код не может загружать классы из плагина Eclipse. *

Это тот случай, когда код, загруженный JVM из одобренного каталога, не может загружать классы из плагинов? Есть ли способ включить это?

Java версия: 1.6.0_16

Версия Eclipse: Eclipse Java EE IDE для веб-разработчиков Идентификатор сборки: 20090920-1017 (версия не отображается)

Версия Metro: в комплекте со Glassfish 2.1

Любая помощь очень ценится. Спасибо.

Ответы [ 2 ]

1 голос
/ 28 января 2010

Для всех, кто сталкивался с этой проблемой, я смог найти решение. Я добавил файлы jar metro вместе с каталогом config, содержащим мои файлы конфигурации wsit, в путь загрузки JVM, используя следующие параметры JVM:

-Xbootclasspath/a:./lib/webservices-api.jar
-Xbootclasspath/a:./lib/webservices-rt.jar
-Xbootclasspath/a:./lib/webservices-tools.jar
-Xbootclasspath/a:./config

webservices-api.jar больше не должен быть в $JAVA_HOME/jre/lib/endorsed, чтобы это работало. Это, конечно, не нормальная модель Eclipse, но я нашел единственный способ использовать Metro в приложении Eclipse RCP с Java 1.6.

0 голосов
/ 20 января 2010

Java SE 6 уже включает в себя метро. Он включает в себя jax-ws 2.0, поэтому вы можете полностью удалить эти банки.

Только если у вас есть конкретная необходимость использовать jax-ws 2.1 вместе с java SE 6, вы можете следовать инструкциям здесь -> https://jax -ws.dev.java.net / faq / index.html

РЕДАКТИРОВАТЬ: Вы правы насчет вашего последнего комментария. Код, помещенный в одобренную папку, загружается вместе с одобренным загрузчиком классов, поэтому он не может найти классы, которые находятся в плагинах. Я предлагаю вам положить все банки метро в утвержденный каталог. Таким образом, они будут доступны не только для вашего плагина, но и для всей виртуальной машины.

...