jaxb2 simplify plugin binding issue

2019-08-11 11:22发布

I tried to use JAXB2 simplify plugin using the XJC 2.2.4.

D:\>xjc -d . -extension -p org.my.space sample.xsd parsing a schema... [ERROR] Unsupported binding namespace
"http://jaxb2-commons.dev.java.net/basic/simplify". Perhaps you meant
"http://jaxb.dev.java.net/plugin/code-injector"?   line 7 of file:/D:/sample.xsd
Failed to parse a schema.

sample.xsd has the declared simplify

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" jaxb:version="2.1"
    xmlns:simplify="http://jaxb2-commons.dev.java.net/basic/simplify"
    jaxb:extensionBindingPrefixes="simplify"
    xmlns="http://www.example.org/sampleXML" targetNamespace="http://www.example.org/sampleXML"
    elementFormDefault="qualified">

any thoughts?

EDIT: I tried other way around with bindings file xjb and still the same error. Does it mean my XJC version(2.2) does not support JAXB2 simplify ?

xjc -d . -extension -b bindings.xjb sample.xsd

<bindings version="2.1"
      xmlns="http://java.sun.com/xml/ns/jaxb"
      xmlns:xs="http://www.w3.org/2001/XMLSchema"
      xmlns:simplify="http://jaxb2-commons.dev.java.net/basic/simplify"
      extensionBindingPrefixes="simplify">

    <bindings schemaLocation="sample.xsd" node="/xs:schema">
        <bindings
            node="/xs:schema/xs:complexType[@name='dlist']/xs:choice/xs:element[1]">
            <simplify:as-element-property />
        </bindings>
    </bindings>

</bindings>

1条回答
老娘就宠你
2楼-- · 2019-08-11 11:53

I switched to maven jaxb2 plugin and with some more efforts it worked fine. For people who have trouble in future. This setup works just fine in JDK 1.6 (for those still cant migrate).

pom.xml

<build>
        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.6</source>
                    <target>1.6</target>
                </configuration>
            </plugin>
            <!--  plugin to compile schemas to JAXB classes -->
            <plugin>
                <groupId>org.jvnet.jaxb2.maven2</groupId>
                <artifactId>maven-jaxb21-plugin</artifactId>
                <version>0.13.1</version>
                <executions>
                    <execution>
                        <id>generate-JAXB</id>
                        <phase>generate-sources</phase>
                        <goals>
                            <goal>generate</goal>
                        </goals>
                        <configuration>
                            <forceRegenerate>true</forceRegenerate>
                            <schemaDirectory>src/main/resources</schemaDirectory>
                            <schemaIncludes>
                                <include>sample.xsd</include>
                            </schemaIncludes>
                            <cleanPackageDirectories>true</cleanPackageDirectories>
                        </configuration>
                    </execution>
                </executions>
                <configuration>
                    <extension>true</extension>
                    <args>
                        <arg>-Xsimplify</arg>
                    </args>
                    <plugins>
                        <plugin>
                            <groupId>org.jvnet.jaxb2_commons</groupId>
                            <artifactId>jaxb2-basics</artifactId>
                            <version>0.11.0</version>
                        </plugin>
                    </plugins>
                </configuration>
            </plugin>
        </plugins>
    </build>

I did not use binding.xjb as I have included the simplify directly in the schema (as i have access).

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>
查看更多
登录 后发表回答