我已经在网络中的固定位置运行了一个服务,附加了WSDL等。我可以轻松地创建一个带有wsimport的jax-ws客户端以及通常的东西,当这样做时,我会非常希望能够从另一个Web应用程序中调用此服务。
不幸的是我遇到了一些陷阱。首先,一切都在普通的Web容器中运行得很好,但在jboss上却没有,这显然会在一个支持的目录中放入一些不兼容的类,导致部署失败:
java.lang.ClassCastException: com.sun.xml.ws.client.WSServiceDelegate cannot be cast to javax.xml.ws.spi.ServiceDelegate21
有一个博客条目建议通过删除已签署的jax-ws jars来解决这个问题,但这可能最终打破了这个特定服务器上的其他东西,所以我想知道是否有更好的方法来隔离这个进一步?完全依赖j2ee特定支持可能是一个选项,但我真的希望保留在简单的Web容器上部署应用程序的能力(jetty,tomcat,...)。
答案 0 :(得分:3)
我的建议是忘记客户端上的JAX-WS。它既复杂又不像它认为的那样便携,而且往往是整合头痛。
我建议使用更轻量级的Web服务客户端,例如Spring-WS's WebServiceTemplate。它将支持您现有的wsimport生成的JAXB绑定,但会忽略JAX-WS的内容。它简单,易用,可以在完整的JBoss堆栈和Jetty应用程序中运行,而无需使用现有框架。