2016-11-17 79 views
1

我有Vendor.xsd,其中名稱空間定義引用了供應商特定名稱空間http://vendor.com/xjc-plugins。下面一個片段中給出:供應商特定名稱空間不受支持的綁定名稱空間例外

... 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
xmlns:common="http://annox.dev.java.net" 
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" xmlns:vendor="http://vendor.com/xjc-plugins" 
elementFormDefault="qualified" 
jaxb:extensionBindingPrefixes="vendor common" 
jaxb:version="2.0"> 
... 
xs:complexType name="VendorType"> 
    <xs:annotation> 
     <xs:appinfo> 
      <vendor:package>vendor.package</vendor:package> 
     </xs:appinfo> 
    </xs:annotation> 
... 

當嘗試通過使用命令行或XJC生成jaxbs行家-jaxb22-插件以下發生異常:

Unsupported binding namespace "http://vendor.com/xjc-plugins". Perhaps you meant "http://annox.dev.java.net"? 

的行家插件我使用在這裏給出:

 <plugin> 
    <groupId>org.jvnet.jaxb2.maven2</groupId> 
    <artifactId>maven-jaxb22-plugin</artifactId> 
    <version>0.13.1</version> 
    <executions> 
     <execution> 
     <goals> 
      <goal>generate</goal> 
     </goals> 
     <configuration> 
      <schemaDirectory>src/main/resources</schemaDirectory> 
      <schemaIncludes> 
      <include>Vendor.xsd</include> 
      </schemaIncludes> 
      <generatePackage>com.vendor.model</generatePackage> 
      <extension>true</extension> 
      <args> 
      <arg>-Xannotate</arg> 
      </args> 
      <plugins> 
      <plugin> 
       <groupId>org.jvnet.jaxb2_commons</groupId> 
       <artifactId>jaxb2-basics-annotate</artifactId> 
       <version>1.0.2</version> 
      </plugin> 
      <plugin> 
       <groupId>org.jvnet.jaxb2_commons</groupId> 
       <artifactId>jaxb2-basics</artifactId> 
       <version>1.11.1</version> 
      </plugin> 
      <plugin> 
       <groupId>org.jvnet.jaxb2_commons</groupId> 
       <artifactId>jaxb2-basics-tools</artifactId> 
       <version>1.11.1</version> 
      </plugin> 
      </plugins> 
     </configuration> 
     </execution> 
    </executions> 
    </plugin> 

任何想法歡迎?

回答

1

您似乎沒有在maven-jaxb2-plugin配置的plugins部分中包含您的XJC插件。綁定名稱空間必須由某個插件確認。您只包含jaxb2-basics,但不包括承認http://vendor.com/xjc-plugins的插件。

+0

那麼你是否說我需要掌握供應商的jxc插件jar?假設有一個 – theo

+0

只要你有'jaxb:extensionBindingPrefixes =「vendor」',你就需要一個插件確認'vendor'命名空間。或者獲取插件或者編寫一個只會確認這些定製的插件,或者例如通過在處理之前修補架構來移除'jaxb:extensionBindingPrefixes =「vendor」'。最後,與供應商交談,這個XJC特定的東西不屬於公共模式。供應商應將其從模式中移出到綁定文件中。 – lexicore