【问题标题】:JAXWS code generation and implementation along side Spring for JDK1.5JDK1.5 的 JAXWS 代码生成和实现
【发布时间】:2009-10-30 12:45:12
【问题描述】:

我们正在尝试从一系列 WSDL(每个都有自己的 XSD)生成源代码存根。我们可以很好地做到这一点,并且在 JDK1.6 下完美运行,但是我们需要它在 JDK1.5 下运行。

我们使用 jaxws-maven-plugin 来生成源代码,但是它取决于可用的 wsimport 二进制文件(这在 JDK1.5 中不可用)。我们为此找到了work around,我们现在可以生成源代码。

当我们尝试将编译后的存根代码与 Spring (2.5.6) 一起使用时,最后一个问题出现了,我们正在使用 JaxWsPortProxyFactoryBean 与生成的客户端代码进行交互。我们得到一个 java.lang.NoClassDefFoundError: javax/xml/ws/soap/Addressing。我调查了为什么会这样,发现 javax.xml.ws/javax-api/2.1 依赖项不包含此类。我将版本号升级到 2.1-1,现在当我们构建项目(生成源代码)时,我们收到以下错误:

cannot find symbol
symbol : method partName()
location : @interface javax.jws.WebParam

谁能为此提供解决方案,以便我们生成 JAXWS 客户端存根代码并使其与 JaxWsPortProxyFactoryBean 一起工作?

提前致谢

乔纳森

【问题讨论】:

  • 你不能简单地尝试用JDK6构建并用JRE5运行吗?

标签: java maven-2 jax-ws spring-ws jdk1.5


【解决方案1】:

看来他们把这个罐子弄乱了,见this link

解决方法如下:

  1. 删除M2_REPO/javax/xml/ws/jaxws-api/2.1/目录
  2. 使用这个依赖

    <dependency>
     <groupId>javax.xml.ws</groupId>
     <artifactId>jaxws-api</artifactId>
     <version>2.1</version>
    </dependency>
    
  3. 将这些存储库放在列表的顶部:

    <repository>
     <id>javanet</id>
     <url>http://download.java.net/maven/2/</url>
    </repository>
    <repository>
     <id>javanet legacy</id>
     <url>http://download.java.net/maven/1/</url>
     <layout>legacy</layout>
    </repository>
    

【讨论】:

  • @user213917:谢谢你的链接。我遇到了同样的问题!
【解决方案2】:

我设法解决了这个问题,经过数小时研究依赖关系并查看它们每个内部的内容后,我发现依赖关系 javax.xml.ws:jaxws-api:2.1-1 是必需的,但我们必须复制这个依赖并取出:

<dependency>
    <groupId>javax.jws</groupId>
    <artifactId>jsr181</artifactId>
    <version>1.0</version>
</dependency>

然后我必须在我的应用程序的 pom.xml 中包含以下依赖项:

<dependency>
    <groupId>javax.jws</groupId>
    <artifactId>jsr181-api</artifactId>
    <version>1.0-MR1</version>
</dependency>

这远非理想,我们必须在我们的 maven 存储库中维护一个单独的专有依赖项,并记住包含此依赖项。烦人的是 Maven 不允许我按版本号排除(仅按 groupId 和 artifactId)。如果有人对改进此解决方案有任何建议,请告诉我。

感谢您的帮助。

【讨论】:

    【解决方案3】:

    我们正在使用 jaxws-maven-plugin 来生成源代码,但是它取决于可用的 wsimport 二进制文件(这在 JDK1.5 中不可用)。我们为此找到了work around,我们现在可以生成源代码。

    实际上,wsimport 是 JAX-WS 的一部分,它不包含在 Java 5 中(与包含 JAX-WS 2.x 的 Java 6 不同,Java 6u14 包含 JAX-WS 2.1.6)但它 只要您提供它,它就可用于 Java 5。奇怪的是 jaxws-maven-plugin 声明了这些依赖项(例如参见 jaxws-maven-plugin-1.12.pom),某处肯定存在类加载问题,因此需要“解决”。

    当我们尝试将编译后的存根代码与 Spring (2.5.6) 一起使用时,最后一个问题出现了,我们正在使用 JaxWsPortProxyFactoryBean 与生成的客户端代码进行交互。我们得到一个 java.lang.NoClassDefFoundError: javax/xml/ws/soap/Addressing。 [...]

    您使用的是哪个版本的插件?我建议使用 1.12 版本和与 pom.xml 中的插件相同版本的 jax-ws:

    <dependency>
      <groupId>com.sun.xml.ws</groupId>
      <artifactId>jaxws-tools</artifactId>
      <version>2.1.7</version>
    </dependency>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-21
      • 2013-08-30
      • 1970-01-01
      • 2017-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多