【发布时间】:2023-04-03 07:58:01
【问题描述】:
我正在尝试使用 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,比如这里(#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 .headless=true -Xms1024m -Xmx1024m -XX:PermSize=1024m -XX:MaxPermSize=1024m"
但它似乎仍然不知道该属性。
那么,我怎样才能告诉 Tomcat 背书目录在哪里呢?您是否认为我的问题可能与所述不同,因为它可以在独立应用程序中运行?
【问题讨论】:
标签: java web-services tomcat jax-ws