Вызов службы JAX-WS RI 2.2 из Tomcat6 с помощью java6 - PullRequest
0 голосов
/ 27 июня 2018

Я пытаюсь получить доступ к сервису JAX-WS 2.2 из Tomcat6 с Java6. В том, что я исследовал, есть проблема с этим, поскольку Java пытается сначала использовать некоторые из своих библиотек javax.xml.ws по умолчанию, у которых нет метода WebFault.messageName. Так что это не с этой ошибкой:

GRAVE: javax.xml.ws.WebFault.messageName()Ljava/lang/String;
java.lang.NoSuchMethodError: javax.xml.ws.WebFault.messageName()Ljava/lang/String;
at com.sun.xml.ws.model.RuntimeModeler.processExceptions(RuntimeModeler.java:1162)
...

Решением, похоже, является создание «одобренного» каталога в JAVA_HOME / jre / lib / (или в TOMCAT_HOME) и помещение туда необходимых библиотек.

Однако некоторые люди говорят, что необходимая библиотека - webservices-api.jar, например, здесь (#Issue 3):

https://www.fromdev.com/2010/01/trying-to-run-jax-ws-sample-application.html

А другие люди говорят о jaxb-api-2.2.jar и jaxws-api.jar, например, здесь:

Grizzly - java.lang.NoSuchMethodError: javax.xml.ws.WebFault.messageName

Я скачал все три из них и поместил их в обе директории (внутри JAVA_HOME и TOMCAT_HOME).

Мои проблемы:

· У меня нет проблем с доступом к этому сервису из отдельного приложения java6, как из NetBeans, так и из-за запуска .jar из командной строки. Сбой только из Tomcat. Поэтому я не уверен, является ли указанное выше причиной моих проблем. Потому что, не должно ли оно также выйти из командной строки?

· Я не могу протестировать вышеуказанные решения, потому что Tomcat, похоже, не знает «одобренный» каталог. Когда я запускаю это в автономном приложении:

System.out.println(System.getProperty("java.endorsed.dirs"));

Он печатает:

/usr/lib/jvm/jdk1.6.0_45/jre/lib/endorsed

Однако Tomcat печатает пустую строку.

Я попытался изменить tomcat6.conf, с помощью этого (и перезапуска, конечно):

JAVA_OPTS = " -Djava.endorsed.dirs = / usr / share / tomcat6 / endorsed -Djavax.sql.DataSource.Factory = org.apache.commons.dbcp.BasicDataSourceFactory -Djava.awt. без головы = true -Xms1024m -Xmx1024m -XX: PermSize = 1024 м -XX: MaxPermSize = 1024 м "

Но, похоже, это свойство еще не известно.

Итак, как я могу сообщить Tomcat, где находится одобренный каталог? Вы думаете, что моя проблема может отличаться от заявленной, так как она работает из автономного приложения?

1 Ответ

0 голосов
/ 28 июня 2018

Итак, решение:

Считаете ли вы, что моя проблема может отличаться от заявленной, так как она работает из автономного приложения?

Нет, это была именно проблема.

как мне сообщить Tomcat, где находится одобренный каталог?

Похоже, что установка этой опции в tomcat6.conf:

-Djava.endorsed.dirs=/usr/share/tomcat6/endorsed

недостаточно. Требуется создать переменную с именем JAVA_ENDORSED_DIRS. Итак, эти две строки нужны в tomcat6.conf:

JAVA_ENDORSED_DIRS="/usr/share/tomcat6/endorsed"
JAVA_OPTS="-Djava.endorsed.dirs=$JAVA_ENDORSED_DIRS [-Djava....]"

Не очень хорошо задокументированная проблема, я думаю.

...