带有 JDK6 的 JBOSS 5.1 中的 Web 服务客户端

Posted

技术标签:

【中文标题】带有 JDK6 的 JBOSS 5.1 中的 Web 服务客户端【英文标题】:Web Service Client in JBOSS 5.1 with JDK6 【发布时间】:2011-01-27 03:42:28 【问题描述】:

这是这里问题的延续: 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/endorsed 文件夹并将其复制到 JDK6_HOME/lib。这似乎不应该是必要的,但它是。

除了使用我刚刚描述的解决方法之外,还有其他方法可以完成这项工作吗?

【问题讨论】:

【参考方案1】:

在各自的bug report 和其他地方(例如here 和here)有各种建议和解释。我不知道它们的效果如何。

【讨论】:

【参考方案2】:

看起来好像您遇到了 JAX-WS 作为 JDK 1.6 的官方特性。不要将东西复制到“lib”,将它们复制到“认可”目录(在 java.endorsed.dirs 中列出的目录)。 This 可能会有所帮助。

如果您有最新的 1.6,您可以像 Apache CXF 一样解决这个问题。有关如何在 1.6 环境中使用 CXF 的信息,请参阅文档。

【讨论】:

不确定我是否理解。我把 JBOSS_HOME/lib/endorsed 文件夹复制到 JDK6_HOME/lib,所以我最终得到了 JDK6_HOME/lib/endorsed。你还有别的意思吗? 据我所知 JBoss 不使用 JDK/lib/endorsed 文件夹。需要把所有webapps需要的jar包放到JBOSS/lib/endorsed文件夹下。【参考方案3】:

您可以在 JBoss 官方安装和入门指南中找到有关此问题的信息: http://docs.jboss.org/jbossas/docs/Installation_And_Getting_Started_Guide/5/html/Installation_Alternatives.html

【讨论】:

以上是关于带有 JDK6 的 JBOSS 5.1 中的 Web 服务客户端的主要内容,如果未能解决你的问题,请参考以下文章

java.lang.ClassCastException: org.jboss.jca.adapters.jdbc.jdk6.WrappedConnectionJDK6

以编程方式确定JBoss 5.1中的JNDI根上下文/ ear名称

在 JBoss 5.1 上应该使用哪个 JMS ConnectionFactory?

如何使用jboss-eap-5.1服务器在Linux环境中进行线程转储

在 JBoss 5.1 中以编程方式确定 JNDI 根上下文/耳朵名称

如何在 Jboss AS 5.1 中追踪非堆 JVM 内存泄漏?