Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Packages are getting deleted while Generating Jaxb classes Using Maven and generated maven package name is incorrect

I tried to generate Jaxb Classes from XSD using jaxb2-maven-plugin.

I am able to get the jaxb classes in a package but my other packages are getting deleted. What is the reason for this? How to over come this? please can you give suggestions.

Below is what I tried

<bulid>
    <pluginManagement>
    <plugins>
        <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>jaxb2-maven-plugin</artifactId>
        <version>1.5</version>
        <executions>
            <execution>
                <phase>generate-sources</phase>
                <goals>
                    <goal>xjc</goal>
                </goals>
            </execution>
        </executions>
        <configuration>
            <schemaDirectory>src/main/xsd</schemaDirectory>
            <outputDirectory>src/main/java</outputDirectory>
        </configuration>
        </plugin>
    </plugins>
    </pluginManagement>
    </bulid>

and xsd look like this :

<?xml version="1.0" encoding="UTF-8"?><xsd:schema targetNamespace="com.test.jaxb.model" 
        xmlns:ns="com.test.jaxb.model" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:complexType name="TestResults">
        <xsd:sequence>
            <xsd:element maxOccurs="unbounded" minOccurs="0" name="testSuites" type="Q1:TestSuiteRun"/>
        </xsd:sequence>
        <xsd:attribute name="testProject" type="xsd:string"/>
    </xsd:complexType>


    <xsd:complexType name="TestCaseRun">
        <xsd:complexContent>
            <xsd:extension base="Q1:TestRun">
                <xsd:sequence>
        <xsd:element name="result" type="Q1:Severity"/>
      <xsd:element maxOccurs="unbounded" minOccurs="0" name="variations" type="Q1:VariationRun">
                    </xsd:element>
                </xsd:sequence>
                <xsd:attribute name="variationCount" type="xsd:int"/>
            </xsd:extension>
        </xsd:complexContent>
    </xsd:complexType>

    </xsd:schema>

I have given targetNamespace="com.test.jaxb.model" but after generation I am only able to see jaxb classes under package name : model.jaxb.test.com..

Why so the package name is geting reversed and why is my other packages getting deleted ?

like image 703
buttowski Avatar asked Dec 01 '22 22:12

buttowski


2 Answers

Your main problem is that you are using the src/main/java as <outputDirectory>. There are two major problems with that.

  1. The generated sources will be in a directory structure that under normal circumstances is under version control. What will you do with the generated sources? Should they be checked in? Your VCS will be signalling that new files have been found that are still not added.
  2. The generated sources will not be deleted when you call mvn clean.

You should remove the <outputDirectory>src/main/java</outputDirectory> completely and let maven and the plugin to their job.

If you remove those lines you will have the sources generated into target/generated-sources and they will be compiled during the compile phase which I assume is what you want.


Regarding the reversed package name I believe you should change targetNamespace to this:

<xsd:schema targetNamespace="http://www.test.com/jaxb/model"
    ...
like image 83
maba Avatar answered Dec 04 '22 11:12

maba


problem solved :

<bulid>
    <pluginManagement>
    <plugins>
        <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>jaxb2-maven-plugin</artifactId>
        <version>1.5</version>
        <executions>
            <execution>
                <phase>generate-sources</phase>
                <goals>
                    <goal>xjc</goal>
                </goals>
            </execution>
        </executions>
        <configuration>
            <schemaDirectory>src/main/xsd</schemaDirectory>
            <outputDirectory>src/main/java</outputDirectory>
            <packageName>com.test.jaxb.model</packageName>
            <clearOutputDir>false</clearOutputDir>
        </configuration>
        </plugin>
    </plugins>
    </pluginManagement>
    </bulid>

i removed targetNameSpace from xsd

mvn jaxb2:xjc worked !!

like image 30
buttowski Avatar answered Dec 04 '22 11:12

buttowski