【问题标题】:apache cxf and wsdl in the classpath issue类路径问题中的 apache cxf 和 wsdl
【发布时间】:2017-02-27 15:58:38
【问题描述】:

我已经使用以下命令创建了一个服务

wsdl2java -ant -impl -wsdlLocation classpath:wsdl/Interface.wsdl -server -d serverclasses Interface.wsdl

我创建了一个文件夹 res/wsdl 并将 Interface.wsdl 放在那里。我将 res 文件夹添加到构建路径中。

但是,当我运行该项目时,它会失败:

Exception in thread "main" com.sun.xml.internal.ws.server.ServerRtException: [failed to localize] cannot.load.wsdl(classpath:wsdl/Interface.wsdl)
at com.sun.xml.internal.ws.transport.http.server.EndpointImpl.getPrimaryWsdl(Unknown Source)
at com.sun.xml.internal.ws.transport.http.server.EndpointImpl.createEndpoint(Unknown Source)
at com.sun.xml.internal.ws.transport.http.server.EndpointImpl.publish(Unknown Source)

这里有什么问题?处理此问题的最佳方法是什么?注意我使用命令行从 wsdl 创建 java 类。

附带说明,其中一个包名称包含关键字 interface,因此不会编译。有没有办法告诉java不要把它当作关键字?

【问题讨论】:

    标签: jakarta-ee cxf


    【解决方案1】:

    这里有什么问题?

    似乎 WSDL 文件不在服务器的类路径中。当 wsdl 文件位于生成的 jar 文件中时,将使用类路径协议。将 res 文件夹放入构建路径可能还不够。 wsdl 目录必须位于运行时类路径中(或构建在生成的 jar 中)。

    当您启动服务器时,您可以(选择其中一个选项):

    1. 添加指向 res 目录的类路径参数
    2. 使用相对文件路径而不是类路径协议
    3. 在构建 jar 文件时,包含 wsdl 文件夹

    其中一个包名称包含关键字 interface,因此将 不编译

    确实,“接口”是保留字,将被视为保留字。您可以为命名空间或服务名称强制使用自定义包名称或类名。

    【讨论】:

    • 如何告诉 eclipse 在 jar 文件中包含 wsdl 文件夹?我更喜欢这个选项。
    • 假设它是一个简单的 java 项目(不是 maven 或其他自动化辅助构建的),您可以尝试简单地将 wsdl 文件夹复制到您的项目源文件夹中。清理构建项目并检查 jar 文件(虽然我有一段时间没有使用 Eclipse 项目)
    • 好像不是因为找不到wsdl文件。当我把它设为绝对路径时,它仍然找不到它。我在某处读到需要添加 cxf-rt-frontend-jaws-3.1.7.jar 文件,但它通过了这个错误。现在我得到一个 java.util.ServiceConfigurationError: javax.xml.ws.spi.Provider: Provider org.apache.cxf.jaxws.spi.ProviderImpl 无法实例化错误。也许我错过了另一个 jar 文件。 Web服务需要哪些jar文件?
    • 确实你需要 cxf-rt-frontend-jaxws-.jar + 它的所有依赖项(一大堆)。我建议使用 maven 构建项目(并解决其所有依赖项)或下载整个 cxf 发行版
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多