javamavenxjcmaven-jaxb2-pluginjaxb2-maven-plugin

How do I tell Maven to not disregard namespace attribute in imported XSD?


I am using the mojohaus jaxb2-maven-plugin to generate Java sources out of xsd schema files. My pom.xml looks like this:

...    
<plugin>

            <groupId>org.codehaus.mojo</groupId>
            <artifactId>jaxb2-maven-plugin</artifactId>
            <version>2.5.0</version>
            <executions>
                <execution>
                    <id>xjc-1</id>
                    <goals>
                        <goal>xjc</goal>
                    </goals>
                    <configuration>
                        <packageName>my.first.package.types</packageName>
                        <sources>
                            <source>src/main/java/META-INF/wsdl/firstSchema.xsd</source>                                
                        </sources>                          
                    </configuration>
                </execution>
                <execution>
                    <id>xjc-2</id>
                    <goals>
                        <goal>xjc</goal>
                    </goals>
                    <configuration>
                        <packageName>my.second.package.types</packageName>
                        <sources>                                                       
                            <source>src/main/java/META-INF/wsdl/secondSchema.xsd</source>
                        </sources>
                        <clearOutputDir>false</clearOutputDir>              
                    </configuration>
                </execution>
            </executions>
            <configuration>
                <outputDirectory>src/main/javagen</outputDirectory>
            </configuration>
        </plugin>

This plugin configuration should correspond to the one found here. When I run the build, the generated source files from the first schema are also put into the second package. Can anyone explain to me why this is the case? Is that a bug or am I missing something?

Thanks a lot for any input!

Edit:

I tried the maven-jaxb2-plugin as well. Same result! So this seems to be a generell maven issue. My plugin configuration for the maven-jaxb2-plugin is as follows:

...
            <plugin>
            <groupId>org.jvnet.jaxb2.maven2</groupId>
            <artifactId>maven-jaxb2-plugin</artifactId>
            <version>0.14.0</version>
            <executions>
                <execution>
                    <id>first</id>
                    <goals>
                        <goal>generate</goal>
                    </goals>
                    <configuration>
                        <schemaIncludes>
                            <include>firstSchema.xsd</include>
                        </schemaIncludes>
                        <generatePackage>my.first.package.types</generatePackage>
                    </configuration>
                </execution>
                <execution>
                    <id>second</id>
                    <goals>
                        <goal>generate</goal>
                    </goals>
                    <configuration>                         
                        <schemaIncludes>
                            <include>secondSchema.xsd</include>
                        </schemaIncludes>
                        <generatePackage>my.second.package.types</generatePackage>
                    </configuration>
                </execution>
            </executions>
            <configuration>
                <schemaDirectory>src/main/java/META-INF/wsdl</schemaDirectory>
                <generateDirectory>src/main/javagen</generateDirectory>
            </configuration>
        </plugin>

Does anyone have any ideas? This is starting to annoy me somewhat...

Edit:

I found out that this has to do with the fact that some xsd files have imported files like so:

<xs:import namespace="http://referenced/namespace"
           schemaLocation="referencedSchema.xsd" />

Seems to me like Maven is ignoring the namespace tag. How can I tell Maven to stop doing that?


Solution

  • I can answer my own question from a very, very long time ago. The problem was that we also used the maven jaxws plugin to generate web services from wsdl files. Both plugins actually take the underlying xsf files and generate the data structure classes to the respective packages. So the solution is to remove the jaxb plugin from the pom. All xsds get only generated once.