2009-10-30 44 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