2

我有maven-jaxb2-plugin以下配置:Maven的JAXB2-插件失敗,JAXB版本屬性必須存在

  <!-- https://mvnrepository.com/artifact/org.jvnet.jaxb2.maven2/maven-jaxb2-plugin --> 
      <plugin> 
       <groupId>org.jvnet.jaxb2.maven2</groupId> 
       <artifactId>maven-jaxb2-plugin</artifactId> 
       <version>0.13.2</version> 
       <executions> 
        <execution> 
         <goals> 
          <goal>generate</goal> 
         </goals> 
        </execution> 
       </executions> 
       <configuration> 
        <strict>false</strict> 
        <schemaLanguage>WSDL</schemaLanguage> 
        <generatePackage>com.mycompany.project.domain.wsdl</generatePackage> 
        <schemas> 
         <schema> 
          <url>url or file</url> 
         </schema> 
        </schemas> 
       </configuration> 
      </plugin> 

,並與失敗:

[ERROR] Error while parsing schema(s).Location [ file:/home/hasancansaral/workspace/company/domain/src/main/xsd/delivery.wsdl{2,366}]. 

org.xml.sax中。的SAXParseException; systemId:file:/home/hasancansaral/workspace/company/domain/src/main/xsd/delivery.wsdl; lineNumber:2; columnNumber:366; JAXB版本屬性必須存在

如果我通過IntelliJ IDEA運行插件或執行簡單的mvn clean jax2b:generate,這並沒有什麼不同。然而,該行動是成功的,可以發現的模式here,所以我懷疑我的wsdl模式實際上是格式不正確的,我暫時不能公開,但可以通過消息提供(我知道它並沒有太大的幫助按原樣公開,但如果問題出現在模式中,我會在這裏發佈相關的問題部分)。

注意: SOAP UI也驗證架構。

注2: 同樣的錯誤存在與兩個jax2b-maven-pluginmaven-jax2b-plugin

+1

首先,我會建議使用[jaxb2-maven-plugin](http://www.mojohaus.org/jaxb2-maven-plugin/Documentation/v2.3.1/)...並使用最新版本.. 。如果你檢查另一個模式意味着你的模式必須是罪魁禍首... – khmarbaise

+0

@khmarbaise感謝您的評論。我已經嘗試了兩種插件,以及它們的最新版本。我也懷疑格式不正確,並感謝您是否可以看看它。你介意我是否通過聊天向你發送模式? –

+0

@khmarbaise我可以用[SoapUI](https://www.soapui.org/)成功地使用webservice。 –

回答

5

TL; DR您的WSDL不正確/適用於XJC。您需要創建JAXB自定義或將xmlns:jxb="http://java.sun.com/xml/ns/jaxb" jxb:version="2.1"添加到根元素。

問題是您的WSDL在包含的模式中包含很多JAXB自定義項。這是一個壞主意。 JAXB定製是特定於供應商的東西,任何將它們放入WSDL(應該是廠商中立規範)的人都沒有做正確的事情。

現在的事情是,XJC,JAXB模式編譯期望有內聯JAXB自定義時的某些花裏胡哨的聲音。像根元素上的jaxb:version屬性一樣。在這種情況下,失蹤。它出現在schema元素上,但不在根元素wsdl:definitions上。如果你add it,編譯成功。

這與JAXB插件無關。如果你嘗試xjc -wsdl delivery.wsdl,你會得到同樣的錯誤。

可能有一些神奇的選擇來抑制這個問題,但很難弄清楚。所以我建議修補WSDL。創建一個補丁,並在預代碼生成步驟中將其應用於WSDL。我個人會從WSDL中去除所有的JAXB定製,因爲他們幾乎忘記了那裏的任何東西。

+0

非常感謝。我真的無法控制wsdl,所以我唯一能做的就是添加'xmlns:jxb =「http://java.sun.com/xml/ns/jaxb」jxb:version =「2.1」'這個解決了問題。順便說一句,作爲插件作者的支持只是向我展示了爲什麼我應該使用maven-jaxb2-plugin。 –