2016-03-11 17 views
0

我有2個模式:a.xsdb.xsd它依賴於a.xsd(情節)。當位置不是URL時,使用模塊化JAXB編譯不會(似乎)工作

模式被分割到不同的maven項目和包中。

本來b.xsd進口a.xsd這樣的(我不想改變它):

<import namespace="urn:a" schemaLocation="a.xsd"/> 

什麼我需要把我的catalog.cat翻譯a.xsdmaven:com.mycompany:a:jar::!/com/mycompany/a/a.xsd

我試過PUBLIC ,SYSTEM,URI,REWRITE_URI,REWRITE_SYSTEM,但沒有任何工作。

只要我在我的模式中將參考a.xsd更改爲http://.../a.xsd,並在我的目錄中使用REWRITE_SYSTEM,那麼它正在工作。但正如我所說,我不想修改我的模式。

回答

1

沒關係,它似乎與SYSTEM_SUFFIX一起使用。

+0

謝謝,這也適用於我。 –

0

Modular Schema Compilation,從

但是有一個bug in JAXB/XJC如果您在xs:import擁有的schemaLocation這不起作用。

在XJC中解析模式非常麻煩,在過去的幾年中我沒有看到任何進展。

那麼對我的作品相當不錯的numberofprojects

編譯從本地路徑,但有些絕對URL模式沒有。這並不需要實際存在,可以完全虛擬。只需使用一個絕對的URL:

<plugin> 
      <groupId>org.jvnet.jaxb2.maven2</groupId> 
      <artifactId>maven-jaxb2-plugin</artifactId> 
      <configuration> 
       <schemas> 
        <schema> 
         <url>http://schemas.opengis.net/ows/2.0/owsAll.xsd</url> 
        </schema> 
       </schemas> 
       <!-- ... --> 
      </configuration> 
     </plugin> 

使用目錄文件到您的絕對URL前綴改寫到一個JAR一些本地路徑或資源:

REWRITE_SYSTEM "http://schemas.opengis.net" "maven:org.jvnet.ogc:ogc-schemas:jar::!/ogc" 

套用您的綁定不是本地文件,但通過絕對網址:

<jaxb:bindings schemaLocation="http://schemas.opengis.net/ows/2.0/owsAll.xsd" node="/xs:schema"> 
    <jaxb:schemaBindings> 
     <jaxb:package name="net.opengis.ows.v_2_0"/> 
    </jaxb:schemaBindings> 
</jaxb:bindings> 

因此所有網址,將是絕對的(不需要打補丁的模式)等根據需要REWRITE_SYSTEM會工作。這是迄今爲止我發現的最好的選擇,並且相信我,我已經編譯了很多模式。

免責聲明:我是maven-jaxb2-plugin的作者。

+0

在頁面[Modular Schema Compilation](https://github.com/highsource/maven-jaxb2-plugin/wiki/Modular-Schema-Compilation)上,Oracle pull請求的鏈接不起作用,你能修復它請,所以我們可以看到狀態。 –

+0

與此同時。以某種方式在我的目錄文件中使用SYSTEM_SUFFIX(如上述答案中所述)解決了我的問題。在您的示例中,我能夠編譯和生成項目B的源代碼。在我們的案例中,我們從包含項目A.xsd的第三方獲得合同,如下所示,不幸的是,我無法更改它。 ''只是好奇地想知道這是否可以使用,因爲你還沒有推薦使用這個選項中的任何答案? –