jaxb2简化了xs的插件:具有相同类型的选择

时间:2016-01-18 17:19:46

标签: jaxb2-maven-plugin jaxb2-basics jaxb2-simplify-plugin

我正在尝试使用jaxb2基础知识简化我的架构的插件到JAXB转换。 它适用于下面的复杂类型。每个元素都在xs:choice内定义,具有不同的类型(type1type2)。

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 install会抛出错误。

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 个答案:

答案 0 :(得分:1)

它应该有效,但请尝试自定义其中一个xs:element

根据产生的媒体类型,您需要自定义xs:choice或其中一个xs:elements

如果你得到一个&#34;元素&#34;属性,自定义xs:choice。见the documentation。这就是你在第一种情况下所拥有的。

如果你得到一个&#34;元素引用&#34;属性,自定义xs:elements之一。见the documentation。这就是你在第二种情况下所拥有的。