使用Java6

时间:2018-06-27 13:04:47

标签: java web-services tomcat jax-ws

我正在尝试使用Java6从Tomcat6访问JAX-WS 2.2服务。对于我所研究的问题,这是有问题的,因为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,例如,在这里(#问题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认可目录位于何处?您认为我的问题可能不是上述问题,因为它可以在独立应用程序中工作?

1 个答案:

答案 0 :(得分:0)

因此,解决方案:

  

您认为我的问题可能与上述问题不同,因为它可以在独立应用程序中工作?

不,这就是问题所在。

  

如何告诉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....]"

我认为这不是很好记录的问题。