2013-09-26 52 views
2

我使用的是Apache CXF 2.7.6 wsdl2java,似乎該工具忽略或無法找到公共目錄條目。Apache CXF :: wsdl2java忽略公共條目的目錄配置

<xs:import namespace="http://www.ivoa.net/xml/STC/STCcoords/v1.10"/> 

以上不能正常使用的目錄文件項解決:特別是我已經中了我XSD文件中的一個下面<xs:import>

<public publicId="http://www.ivoa.net/xml/STC/STCcoords/v1.10" uri="STCcoords-v1.10.xsd"/> 

如果我加入了schemaLocation屬性改變<xs:import> ,即將其更改爲:

<xs:import namespace="http://www.ivoa.net/xml/STC/STCcoords/v1.10" schemaLocation="http://www.ivoa.net/xml/STC/STCcoords/v1.10/> 

它解析文件,但我的理解是,這不應該是必要的,因爲我不w螞蟻必須編輯我提供的XSD。

無論使用OASIS XML格式還是TR9401格式,其行爲都是相同的。

回答

3

我從Apache CXF用戶郵件列表中得到的答覆是,XML Schema規範將這一點留給實現,因此不被視爲錯誤。

主題here(帖子發佈日期爲2013年9月26日,位於第2頁,我似乎無法直接鏈接到該頁面)。相關結論是here。我引述:

我的想法在此:

1)根據架構規範,如果的schemaLocation提示是沒有指定 ,它是由應用程序計算出,如果如何解決它 需要。因此,我不認爲這是一個「錯誤」。我們 具體只是使用提供的信息,並且是 「編譯單元」(aka:wsdl)的一部分。

2)我個人認爲,不提供 模式位置非常愚蠢,並強烈建議增加它。 只有當我看到它沒有指定的時候,導入模式 也嵌入在相同的wsdl(所以沒有一個位置)。
當我在規範中看到諸如「達到應用程序」之類的東西時,我認爲這是一個互操作性的噩夢。只需指定它。

3)也就是說,根本問題將出現在XmlSchema的SchemaBuilder 類中。如果沒有schemaLocation,它假定它是編譯單元的一部分,它正在編譯並繼續。不要嘗試 解決任何問題。如果你想追求一個補丁或其他東西,它將在SchemaBuilder.java的680左右。但即使改變了這一點,CXF也需要更多的支持來預先填充名字空間 已經知道避免它們進入互聯網。不是 真的很確定。

所以,它被證實了:

  • 默認wsimport工具附帶甲骨文的Java 7使用目錄來解析進口聲明即使沒有的schemaLocation屬性。
  • 了Apache CXF 2.7.6 wsdl2java工具使用目錄來解析進口聲明沒有的schemaLocation屬性
  • 了Apache CXF社會不認爲這是一個錯誤。
+1

猜猜我會看看我是否可以找到另一個工具來使用... – tzrlk