2016-01-18 71 views
0

我試圖使用jaxb2基礎爲我的模式簡化JAXB插件的插件。 它適用於像下面這樣的複雜類型。 xs:choice中定義的每個元素都有不同的類型(type1type2)。jaxb2簡化xs的插件:具有相同類型的選擇

sample.xsd(複雜類型的選擇具有不同的類型)

<xs:complexType name="doclist"> 
    <xs:sequence> 
     <xs:choice minOccurs="0" maxOccurs="unbounded"> 
      <xs:annotation> 
       <xs:appinfo> 
        <simplify:as-element-property /> 
       </xs:appinfo> 
      </xs:annotation> 
      <xs:element name="document1" type="type1" /> 
      <xs:element name="document2" type="type2" /> 
     </xs:choice> 
    </xs:sequence> 
    <xs:attribute name="heading" type="xs:string" /> 
</xs:complexType> 

但是,如果複雜類型包含具有相同的類型(xs:string)多於一個的元件,如下所示,然後Maven的安裝拋出錯誤。

sample.xsd(複選類型同類型)

<xs:complexType name="addressTEST"> 
    <xs:choice minOccurs="0" maxOccurs="unbounded"> 
     <xs:annotation> 
      <xs:appinfo> 
       <simplify:as-element-property /> 
      </xs:appinfo> 
     </xs:annotation> 
     <xs:element name="street" type="xs:string" /> 
     <xs:element name="city" type="xs:string" /> 
    </xs:choice> 
</xs:complexType> 

是否JAXB2簡化,如果我有相同類型的多個元素將無法​​正常工作?

[ERROR] Error while parsing schema(s).Location [ file:/D:/workspace/trunk/sampmes/src/main/resources/sample.xsd{1099,38}]. 
com.sun.istack.SAXParseException2: compiler was unable to honor this as-element-property customization. It is attached to a wrong place, or its inconsistent with other bindings. 
    at com.sun.tools.xjc.ErrorReceiver.error(ErrorReceiver.java:82) 
    at com.sun.tools.xjc.reader.xmlschema.ErrorReporter.error(ErrorReporter.java:79) 
    at com.sun.tools.xjc.reader.xmlschema.UnusedCustomizationChecker.check(UnusedCustomizationChecker.java:144) 
    at com.sun.tools.xjc.reader.xmlschema.UnusedCustomizationChecker.check(UnusedCustomizationChecker.java:122) 
    at com.sun.tools.xjc.reader.xmlschema.UnusedCustomizationChecker.modelGroup(UnusedCustomizationChecker.java:220) 
    at com.sun.xml.xsom.impl.ModelGroupImpl.visit(ModelGroupImpl.java:125) 
    at com.sun.tools.xjc.reader.xmlschema.UnusedCustomizationChecker.particle(UnusedCustomizationChecker.java:241) 
    at com.sun.xml.xsom.impl.ParticleImpl.visit(ParticleImpl.java:124) 
    at com.sun.tools.xjc.reader.xmlschema.UnusedCustomizationChecker.complexType(UnusedCustomizationChecker.java:182) 
    at com.sun.xml.xsom.impl.ComplexTypeImpl.visit(ComplexTypeImpl.java:295) 
    at com.sun.tools.xjc.reader.xmlschema.UnusedCustomizationChecker.run(UnusedCustomizationChecker.java:108) 
    at com.sun.tools.xjc.reader.xmlschema.UnusedCustomizationChecker.run(UnusedCustomizationChecker.java:98) 
    at com.sun.tools.xjc.reader.xmlschema.BGMBuilder._build(BGMBuilder.java:187) 
    at com.sun.tools.xjc.reader.xmlschema.BGMBuilder.build(BGMBuilder.java:116) 
    at com.sun.tools.xjc.ModelLoader.annotateXMLSchema(ModelLoader.java:415) 
    at com.sun.tools.xjc.ModelLoader.load(ModelLoader.java:167) 
    at com.sun.tools.xjc.ModelLoader.load(ModelLoader.java:113) 
    at org.jvnet.mjiip.v_2_1.XJC21Mojo.loadModel(XJC21Mojo.java:50) 
    at org.jvnet.mjiip.v_2_1.XJC21Mojo.doExecute(XJC21Mojo.java:40) 
    at org.jvnet.mjiip.v_2_1.XJC21Mojo.doExecute(XJC21Mojo.java:28) 
    at org.jvnet.jaxb2.maven2.RawXJC2Mojo.doExecute(RawXJC2Mojo.java:505) 
    at org.jvnet.jaxb2.maven2.RawXJC2Mojo.execute(RawXJC2Mojo.java:328) 
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101) 
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209) 
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153) 
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145) 
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84) 
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59) 
    at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183) 
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161) 
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:320) 
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156) 
    at org.apache.maven.cli.MavenCli.execute(MavenCli.java:537) 
    at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196) 
    at org.apache.maven.cli.MavenCli.main(MavenCli.java:141) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290) 
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230) 
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409) 
    at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352) 

回答

1

它應該可以工作,但可以嘗試自定義其中一個xs:element

根據所生產的房產類型,您需要自定義xs:choice或其中一個子xs:elements

如果您收到「元素」屬性,請自定義xs:choice。見the documentation。這是你在第一種情況下所擁有的。

如果您收到「元素引用」屬性,請自定義其中一個xs:elements。請參閱the documentation。這是你在第二種情況下所擁有的。

+0

太棒了!謝謝。有效。雖然我不明白爲什麼JAXB有時會生成XMLElementRef和XMLelement。 – ulab

+0

如果您有不同的類型,那麼JAXB可以從該類型推斷元素名稱。如果具有相同類型的不同元素,那麼這是不可能的,JAXB必須使用'@ XmlElementRef'屬性。 – lexicore