Java 7 是包含 JAX-WS 实现还是仅包含 API?

2022-09-04 03:37:07

我被告知Java 7应该包含JAX-WS,这样我就不需要像Apache CXF中的库。但是,官方文档说:

此发行版包含用于 XML 处理的 Java API (JAXP) 1.4.5,支持 Java Architecture for XML Binding (JAXB) 2.2.3,并支持 Java API for XML Web Services (JAX-WS) 2.2.4。

此外,JAX-WS 上的 Eclipse 页面谈到了使用 Apache CXF、Sun Metro 或 Apache Axis 等实现。我在 JAX-WS 上找到的每个示例/教程都使用一个库集,如 CXF 或 Metro。

我在Eclipse中有一个项目,它在一个带有javax.jws.WebService注释的类上调用“Endpoint.publish(...)”。下面引用的 WSDL 文件位于 Eclipse 外部。这个项目运行(作为一个“Java应用程序”)与Apache CXF库包含。一旦我删除了它们(以及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

Jdk 7(如6)包括一个基于metro的实现。

从异常中可以看出,内部实现正在运行“com.sun.xml.internal.ws.transport.http.server.EndpointImpl”。问题似乎是它不喜欢你的WsdlLocation(我相信jaxws期待一个本地资源,但你已经给了它一个http资源)。


答案 2

推荐