gpt4 book ai didi

java - JAX-WS = 安装 Apache CXF 时 "steals"默认 JDK JAX-WS 实现,如何解决?

转载 作者:IT老高 更新时间:2023-10-28 20:56:51 25 4
gpt4 key购买 nike

我有一个奇怪的问题。

  1. 使用 wsimport 我从 WSDL 生成了 als JAX-WS 代码(在一个专用的 eclipse java 项目中)。这在 JDK6 中运行良好,没有任何外部依赖项(在 Eclipse 中运行)

  2. 我有第二个项目,我曾经使用过 Apache CXF。如果我将 1.) 中描述的代码复制到这个项目中,突然间不是 JDK 执行 JAX-WS 的东西(我生成的文件),而是 Apache CXF。

如何防止 Apache CXF “运行” JAX-WS 的东西。 (问题是,CXF 无法运行代码......)。我也完全不明白 Apache CXF 是如何发现这些类的。我没有注册吗?

非常感谢!马库斯

最佳答案

Apache CXF(准确地说是 cxf-rt-frontend-jaxws-*.jar)在 JVM 中将自己注册为 JAX-WS 提供程序。在上述 JAR 中有一个名为:/META-INF/services/javax.xml.ws.spi.Provider 的文件,其内容如下:

org.apache.cxf.jaxws.spi.ProviderImpl

如果您现在查看 javax.xml.ws.spi.FactoryFinder#find 方法,您会发现 JDK 在 CLASSPATH 中搜索 javax.xml.ws.spi 的存在。 Provider 文件,如果不可用,则回退到默认的 Sun 实现。所以你有两个选项可以强制回退:

  • 要么从 CLASSPATH 中删除 cxf-rt-frontend-jaxws-*.jar

  • 或覆盖CXF提供的javax.xml.ws.spi.Provider文件指向回退位置

第二个选项实际上更容易一些。只需创建:

/src/main/resources/META-INF/services/javax.xml.ws.spi.Provider

包含以下内容的文件(假设您使用的是 Maven):

org.apache.cxf.jaxws.spi.ProviderImpl

就是这样,用 javax.xml.ws.Endpoint#publish 测试。

关于java - JAX-WS = 安装 Apache CXF 时 "steals"默认 JDK JAX-WS 实现,如何解决?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6364333/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com