ulab
ulab

Reputation: 1089

jaxb2 simplify plugin binding issue

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>

Upvotes: 1

Views: 1285

Answers (1)

ulab
ulab

Reputation: 1089

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>

Upvotes: 1

Related Questions