使用 java6 从 Tomcat6 调用 JAX-WS RI 2.2 服务



我正在尝试从Tomcat6和Java6访问JAX-WS 2.2服务。对于我所研究的内容,这有一个问题,因为Java首先尝试使用一些没有WebFault.messageName方法的默认 javax.xml.ws 库。所以它失败并出现此错误:

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.jarjaxws-api.jar,例如这里:

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

我已经下载了所有三个并将它们放在两个目录中(在 JAVA_HOME 和 TOMCAT_HOME 内(。

我的问题:

·无论是从 Netbeans 还是从命令行运行.jar,我从独立的 java6 应用程序访问此服务都没有问题,它仅从 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.headless=true -Xms1024m -Xmx1024m -XX:PermSize=1024m -XX:MaxPermSize=1024m">

但它似乎仍然不知道那个属性。

那么,我怎样才能告诉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....]"

我认为,这个问题没有很好的记录。

相关内容

  • 没有找到相关文章