这是这里问题的延续:JBoss - 应用程序是否必须在与 JBOSS 运行时相同的 jdk 下编译?

尽管它需要一个新问题,但它已经足够不同了。

我正在尝试使用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。这似乎没有必要,但确实有必要。

除了使用我刚才描述的解决方法之外,还有其他方法可以实现此目的吗?

有帮助吗?

解决方案

看起来就像您遇到了 JAX-WS 作为 JDK 1.6 的官方功能一样。不要将内容复制到“lib”,而是将它们复制到“endorsed”目录(在 java.endorsed.dirs 中列出的目录)。 可能会有帮助。

如果你有最新的 1.6,你可以用同样的方式解决这个问题 阿帕奇CXF 做。有关如何在 1.6 环境中使用 CXF 的信息,请参阅文档。

其他提示

各自的建议和解释 错误报告 和其他地方(例如 这里这里)。我不知道他们的工作效果如何。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top