Alan Evangelista
Alan Evangelista

Reputation: 3163

Jibx Maven plugin: how to set Java package in xsd -> Java transform when namespace was defined

I use Spring Object-Xml mapping with Jibx to convert some xsd files to Java source files. Jibx is called by jibx-maven-plugin in the build process. My schema files (.xsd) have a namespace "a.b.com" but I want that the generated Java sources are under package "a.com" because the rest of the Java code is organized like that.

I noticed Java packages are determined automatically based on xsd's namespace. Therefore, the question: is it possible to set the java package of output Java source files in xsd->Java transform when using the Jibx Maven plugin when a namespace was defined in the the schema files?

Proposed solutions so far:

1) Use build executions

Proposed below.

Problems:

2) Use customization xml to set Java package

Proposed here: Jibx Codegen: customization file - package per schema

Problem: It did not work.

3) modular schema

Proposed here: Jibx Maven plugin: cross-reference among schemas when they are converted in different build executions

Problem: Too complicated to setup one pom for each schema, generating a jar for each schema and importing the jar in other schemas.

Was anybody successful to solve these issues and was able to set custom Java packages in a xsd->Java conversion when namespace is defined in the xml schemas?

Thanks in advance.

Upvotes: 2

Views: 1962

Answers (1)

khmarbaise
khmarbaise

Reputation: 97359

Based on the documentation it can be done like the following:

 <plugin>
    <groupId>org.jibx</groupId>
    <artifactId>jibx-maven-plugin</artifactId>
    <version>1.2.4.5</version>
    <configuration>
        <schemaLocation>src/main/conf</schemaLocation>
        <includeSchemas>
            <includeSchema>myschema.xsd</includeSchema>
        </includeSchemas>
        <options>
            <package>my.package</package>
        </options>
    </configuration>
    <executions>
        <execution>
            <goals>
                <goal>schema-codegen</goal>
            </goals>
        </execution>
    </executions>
</plugin>

But you should be carefull about using the packagename instead of the defaults which are coming from the xsd-namespaces, cause it can happen that you will get clashes within the generated source if you have multiple namespaces.

You can define multiple executions to have different schematas having different package names.

 <plugin>
    <groupId>org.jibx</groupId>
    <artifactId>jibx-maven-plugin</artifactId>
    <version>1.2.4.5</version>
    <executions>
        <execution>
            <id>schemata-a</id>
            <goals>
                <goal>schema-codegen</goal>
            </goals>
            <configuration>
              <schemaLocation>src/main/conf-a</schemaLocation>
              <includeSchemas>
                <includeSchema>myschema.xsd</includeSchema>
              </includeSchemas>
              <options>
                <package>my.package.a</package>
              </options>
            </configuration>
        </execution>
        <execution>
            <id>schemata-b</id>
            <goals>
                <goal>schema-codegen</goal>
            </goals>
            <configuration>
              <schemaLocation>src/main/conf-b</schemaLocation>
              <includeSchemas>
                <includeSchema>xyz.xsd</includeSchema>
              </includeSchemas>
              <options>
                <package>my.package.b</package>
              </options>
            </configuration>
        </execution>

    </executions>
</plugin>

If you can change the namespaces in your xsd files makes life easier.

Upvotes: 3

Related Questions