2009-10-30 20 views
3

我们试图从一系列WSDL(每个都有自己的XSD)生成源代码存根。我们可以做得很好,在JDK1.6下完美工作,但是我们需要它在JDK1.5下工作。JAXWS代码生成和JDK1.5侧面Spring的实现

我们使用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一起工​​作?

预先感谢

乔纳森

+0

难道你不能简单地尝试使用JDK6构建并使用JRE5运行? – sfussenegger 2009-10-30 13:22:34

回答

0

We're using jaxws-maven-plugin to generate the source code, however it depends on the wsimport binary being available (this is not available in JDK1.5). We found a work around for this, we can now generate the source code.

实际上,wsimport,这是JAX-WS的一部分,不包括在Java 5的(不像Java 6中,其中包括JAX-WS 2.x中, Java 6u14包含JAX-WS 2.1.6),但只要您提供它,就是可用于Java 5。奇怪的是,jaxws-maven-plugin声明了这些依赖关系(请参阅jaxws-maven-plugin-1.12.pom),因此必须在某处存在类加载问题,因此需要“解决方法”。

The final problem comes when we try and use the compiled stub code with Spring (2.5.6) we're using a JaxWsPortProxyFactoryBean to interface with the generated client code. We get a java.lang.NoClassDefFoundError: javax/xml/ws/soap/Addressing. [...]

您准确使用哪个版本的插件?我建议你pom.xml使用的版本1.12和同一版本的JAX-WS的作为插件:

<dependency> 
    <groupId>com.sun.xml.ws</groupId> 
    <artifactId>jaxws-tools</artifactId> 
    <version>2.1.7</version> 
</dependency> 
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)。如果任何人有建议让这个解决方案更好,请让我知道。

感谢您的帮助。

2

看来,他们惹这个罐子,见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> 
    
+0

@ user213917:感谢您的链接。我遇到了同样的问题! – 2010-09-28 16:28:47