Java 7是否包含JAX-WS实现,还是只有API?

14

有人告诉我Java 7应该包含JAX-WS,因此我不需要像Apache CXF这样的库。 但是,官方文档说:

此版本包含用于XML处理的Java API(JAXP)1.4.5, 支持XML绑定的Java体系结构(JAXB)2.2.3,并支持XML Web服务的Java API(JAX-WS)2.2.4。

此外,Eclipse关于JAX-WS的页面提到要使用如Apache CXF、Sun Metro或Apache Axis等实现。我能找到的所有JAX-WS示例/教程都使用了类似CXF或Metro的库集。

我在Eclipse中有一个项目,对带有javax.jws.WebService注释的类调用"Endpoint.publish(...)"。下面引用的WSDL文件位于Eclipse之外。此项目与包括Apache CXF库的情况下正常运行(作为"Java应用程序")。一旦我删除它们(和Eclipse对Apache CXF的引用),它就崩溃并显示以下异常:

com.sun.xml.internal.ws.server.ServerRtException: [failed to localize] cannot.load.wsdl(http://localhost:8081/wsdl/csw.wsdl)
    at com.sun.xml.internal.ws.transport.http.server.EndpointImpl.getPrimaryWsdl(EndpointImpl.java:313)

所以要么我做错了什么,要么Apache为JDK本身只有API的东西提供了实现。请指出哪种情况是正确的,并附上相关链接。


1
Java 7 包含 JAX-WS 实现,但与 CXF 或 Metro 相比相当有限。 - Christian Schneider
1个回答

12

Jdk 7(和6一样)包含基于Metro的实现。

从您的异常信息可以看出,内部实现正在运行“com.sun.xml.internal.ws.transport.http.server.EndpointImpl”。问题似乎在于它不喜欢您的WsdlLocation(我认为jaxws期望本地资源,但您提供了http资源)。


1
@kuloch - 你需要使用认可的覆盖机制来使用更新的jaxb或jaxws实现,请参见http://docs.oracle.com/javase/6/docs/technotes/guides/standards/。相关建议请参考http://weblogs.java.net/blog/ramapulavarthi/archive/2007/01/problems_using.html。 - jtahlborn
谢谢。在看到你的帖子之前,我们已经遇到了这个问题,现在服务已经恢复了 - 这次应该是在(可能是)Metro上运行。 - kuloch
1
据我所知,“Jdk 7(像6一样)包括了Metro实现。”并不完全正确。JDK 6+确实包含了JAX-WS RI(参考实现),但是Metro是JAX-WS RI的超集,即Metro = JAX-WS RI + WSIT。 - Miljen Mikic
1
@MiljenMikic 你能否只使用RI在Tomcat上设置JAX-WS?我尝试过但失败了,所以用了Metro。 - John Eipe
1
@John,你试过mkyong的教程吗?(http://www.mkyong.com/webservices/jax-ws/deploy-jax-ws-web-services-on-tomcat)。它提供了一个很好的、逐步实践的指南,告诉你如何在Tomcat上设置JAX-WS。 - Miljen Mikic
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接