Generate Modular Code from Schemas

If your XSD Schema lends itself to modularization, the JiBX code generator offers the most flexible code generation that you will find.

Since JiBX allows generation of code into different java packages, JiBX is the best choice if you want to split a large schema into smaller OSGi modules.

Here is a sample pom.xml for a base schema:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.jibx.test.simplewebschema</groupId>
        <artifactId>simple-web-schema-test</artifactId>
        <version>1.2.5</version>
    </parent>

    <artifactId>org.jibx.schema.person</artifactId>
    <packaging>bundle</packaging>

    <name>simple-web-schema-person</name>

    <build>
        <plugins>
            <plugin>
                <groupId>org.jibx</groupId>
                <artifactId>jibx-maven-plugin</artifactId>
                <version>1.2.5</version>

                <executions>
                    <execution>
                        <id>generate-java-code-from-schema</id>
                        <goals>
                            <goal>schema-codegen</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>compile-binding</id>
                        <goals>
                            <goal>bind</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <schemaLocation>http://www.jibx.org/sampleschema/</schemaLocation>
                    <includeSchemas>
                        <includeSchema>person.xsd</includeSchema>
                    </includeSchemas>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.felix</groupId>
                <artifactId>maven-bundle-plugin</artifactId>
                <extensions>true</extensions>
                <configuration>
                    <instructions>
                        <Include-Resource>META-INF/binding.xml=${basedir}/target/generated-sources/binding.xml</Include-Resource>
                        <Export-Package>org.jibx.schema.jibx-maven-plugin.*;version=1.2.5</Export-Package>    <!-- Override jibxPackage or jibxPackageExport with actual packages -->
                    </instructions>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

This JiBX Module uses the base module from the previous example.

Here is the sample:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.jibx.test.simplewebschema</groupId>
        <artifactId>simple-web-schema-test</artifactId>
        <version>1.2.5</version>
    </parent>

    <artifactId>org.jibx.schema.address</artifactId>
    <packaging>bundle</packaging>

    <name>simple-web-schema-address</name>

    <build>
        <plugins>

            <plugin>
                <groupId>org.jibx</groupId>
                <artifactId>jibx-maven-plugin</artifactId>
                <version>1.2.5</version>

                <executions>
                    <execution>
                        <id>generate-java-code-from-schema</id>
                        <goals>
                            <goal>schema-codegen</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>compile-binding</id>
                        <goals>
                            <goal>bind</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <schemaLocation>http://www.jibx.org/sampleschema/</schemaLocation>
                    <includeSchemas>
                        <includeSchema>address.xsd</includeSchema>
                    </includeSchemas>
                    <includeBaseBindings>
                        <includeBaseBinding>
                            <groupId>org.jibx</groupId>
                            <artifactId>org.jibx.schema.person</artifactId>
                            <directory>META-INF</directory>
                            <includes>
                                <include>binding.xml</include>
                            </includes>
                        </includeBaseBinding>
                    </includeBaseBindings>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.felix</groupId>
                <artifactId>maven-bundle-plugin</artifactId>
                <extensions>true</extensions>
                <configuration>
                    <instructions>
                        <Include-Resource>META-INF/binding.xml=${basedir}/target/generated-sources/binding.xml</Include-Resource>
                        <Export-Package>org.jibx.schema.jibx-maven-plugin.*;version=1.2.5</Export-Package>    <!-- Override jibxPackage or jibxPackageExport with actual packages -->
                    </instructions>
                </configuration>
            </plugin>
        </plugins>
    </build>

    <dependencies>
        <dependency>
            <groupId>org.jibx</groupId>
            <artifactId>org.jibx.schema.person</artifactId>
            <version>1.2.5</version>
        </dependency>

        <dependency>
            <groupId>org.jibx</groupId>
            <artifactId>jibx-run</artifactId>
            <version>1.2.5</version>
        </dependency>
        <dependency>
            <groupId>org.jibx</groupId>
            <artifactId>jibx-extras</artifactId>
            <version>1.2.5</version>
        </dependency>
    </dependencies>
</project>

Note: This module includes the base module as a dependency AND the schema-codegen goal points to the base binding file.