JBOSS 5.1和JDK6中的java Web服务客户端
这是问题的延续: JBoss - does app have to be compiled under same jdk as JBOSS is running under?
不过,这已经足够不同了,需要一个新问题
我试图使用jdk6运行JBOSS 5.1,我下载了JBOSS 5.1的jdk6版本。这很好,我的EAR应用程序部署也很好。但是,当我想用这样的代码运行web服务客户端时:
public static void main(String[] args) throws Exception {
System.out.println("creating the web service client...");
TestClient client = new TestClient("http://localhost:8080/tc_test_project-tc_test_project/TestBean?wsdl");
Test service = client.getTestPort();
System.out.println("calling service.retrieveAll() using the service client");
List<TestEntity> list = service.retrieveAll();
System.out.println("the number of elements in list retrieved using the client is " + list.size());
}
我得到以下例外:
javax.xml.ws.WebServiceException: java.lang.UnsupportedOperationException: setProperty must be overridden by all subclasses of SOAPMessage
at org.jboss.ws.core.jaxws.client.ClientImpl.handleRemoteException(ClientImpl.java:396)
at org.jboss.ws.core.jaxws.client.ClientImpl.invoke(ClientImpl.java:302)
at org.jboss.ws.core.jaxws.client.ClientProxy.invoke(ClientProxy.java:170)
at org.jboss.ws.core.jaxws.client.ClientProxy.invoke(ClientProxy.java:150)
现在,这里是真正有趣的部分。如果我将运行上述代码的JDK从JDK6更改为JDK5,上述异常就会消失!真奇怪
我发现上面的代码在JDK6下运行的唯一方法是将JBOSS_HOME/lib/annowed文件夹复制到JDK6_HOME/lib。这似乎不应该是必要的,但确实如此
除了使用我刚才描述的变通方法之外,还有什么其他方法可以实现这一点吗
# 1 楼答案
看起来好像你遇到了JAX-WS作为JDK1.6的一个官方特性。不要将内容复制到“lib”,而是将它们复制到一个“背书”目录(java.annocated.dirs中列出的目录)This可能会有帮助
如果你有一个最新的1.6版本,你可以像Apache CXF一样处理这个问题。有关如何在1.6环境中使用CXF的信息,请参阅文档
# 2 楼答案
在各自的bug report和其他地方(例如here和here)有各种建议和解释。我不知道它们的效果如何