我試圖通過運行這個命令(應來自任何人的機器工作)把一個WSDL文件到使用wsimport
Java代碼:當'lang'已經定義時如何從WSDL生成Java文件?
wsimport https://webservices-uatprod.dhisco.com/OTAHotelDescriptiveInfo/web_services?WSDL -J-Djavax.xml.accessExternalDTD=all -J-Djavax.xml.accessExternalSchema=all -B-XautoNameResolution -Xnocompile
不過,我不斷收到此錯誤:
[ERROR] 'lang' is already defined
line 93 of http://www.w3.org/2001/03/xml.xsd
[ERROR] (related to above error) the first definition appears here
line 43 of http://www.w3.org/2001/xml.xsd
[ERROR] 'space' is already defined
line 102 of http://www.w3.org/2001/03/xml.xsd
[ERROR] (related to above error) the first definition appears here
line 89 of http://www.w3.org/2001/xml.xsd
[ERROR] 'base' is already defined
line 109 of http://www.w3.org/2001/03/xml.xsd
[ERROR] (related to above error) the first definition appears here
line 113 of http://www.w3.org/2001/xml.xsd
[ERROR] 'specialAttrs' is already defined
line 117 of http://www.w3.org/2001/03/xml.xsd
[ERROR] (related to above error) the first definition appears here
line 157 of http://www.w3.org/2001/xml.xsd
我花了數小時搜索這個試圖找到解決方案。我相對相信我需要用-b binding.xml
標誌指定一個綁定文件。
但是,我很難搞清楚如何創建綁定文件。以下是我已經嘗試:
binding.xml
<jaxb:bindings xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
xmlns:xsd="http://www.w3c.org/2001/XMLSchema"
xmlns:xs="http://www.w3.org/2001/03/xml.xsd"
jaxb:version="2.0">
<jaxb:bindings schemaLocation="http://www.w3.org/2001/xml.xsd">
<jaxb:bindings node="//xs:attribute[@name='lang']">
<jaxb:property name="langAttribute"/>
</jaxb:bindings>
</jaxb:bindings>
</jaxb:bindings>
然後在這個地方,我嘗試用綁定文件運行:
wsimport https://webservices-uatprod.dhisco.com/OTAHotelDescriptiveInfo/web_services?WSDL -J-Djavax.xml.accessExternalDTD=all -J-Djavax.xml.accessExternalSchema=all -B-XautoNameResolution -Xnocompile -b binding.xml
現在我得到:
[ERROR] XPath evaluation of "//xs:attribute[@name='lang']" results in empty target node
line 6 of file:/Users/name/git/foo/bar/src/main/resources/wsdl/binding.xml
我試過許多其他的綁定文件的X路徑......我想我需要將所有元素的屬性從'lang'重命名爲其他東西,但是我真的很難找出它。
在此先感謝您的幫助!
解決方案更新: 我過去的這個錯誤由本地下載的模式,並且只要有是schemaLocation="http://www.w3.org/2001/03/xml.xsd"
和schemaLocation="http://www.w3.org/2001/xml.xsd"
一個參考,我編輯的XML指向我的本地文件系統上的文件的副本。
I.e.開闢了那裏是參考這些文件中的每個* .xsd文件,並從一些更新的每一行是這樣的:
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="http://www.w3.org/2001/xml.xsd"/>
要這樣:
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="./xml.xsd"/>
之後,它能夠產生使用上面的語法wsimport
的Java類(確實需要一個小的綁定文件,但是與供應商定義的類相關)。
我試着在本地下載模式和xml文件,但不知道如何告訴wsimport尋找本地副本而不是去互聯網。如果我在本地有'xsd.xml'的副本...有沒有辦法告訴wsimport使用它,而不是它可能在互聯網上找到的任何東西? – Cuga
你可以用目錄文件來做。我會盡快更新答案。 – lexicore
我很確定'maven-jaxb2'插件和'wsimport'都調用'xjc'來完成很多工作。 – Cuga