[英]Calling a JAX-WS RI 2.2 service from Tomcat6 with java6
我正在嘗試使用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.jar
和jaxws-api.jar
:
灰熊-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認可目錄位於何處? 您是否認為我的問題可能與上述問題不同,因為它可以在獨立應用程序中工作?
因此,解決方案:
您是否認為我的問題可能與上述問題不同,因為它可以在獨立應用程序中工作?
不,那正是問題所在。
如何告訴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....]"
我認為這還沒有很好地記錄在案的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.