想要在jaxb2-maven-plugin生成的类中使用@XmlRootElement

时间:2017-03-03 15:19:02

标签: java maven jaxb wsdl

我有一组从WSDL生成的Java类可以正常工作;我正在为我正在使用的另一个webservice添加另一个WSDL,但是我从第二个WSDL中生成的类中没有得到@XmlRootElement注释,并且不明白为什么不这样做。

这是pom的插件部分:

        <plugin>
          <groupId>org.codehaus.mojo</groupId>
          <artifactId>jaxb2-maven-plugin</artifactId>
          <version>2.2</version>
          <executions>
              <execution>
                  <id>xjc</id>
                  <goals>
                      <goal>xjc</goal>
                  </goals>
              </execution>
          </executions>
          <configuration>
              <sourceType>wsdl</sourceType>
              <sources>
                  <source>${resources.path}my-module/src/main/resources/wsdl/w1.wsdl</source>
                  <source>${resources.path}my-module/src/main/resources/wsdl/w2.wsdl</source>
              </sources>
              <extension>true</extension>
              <xjbSources>
                  <xjbSource>src/main/resources/xjb/bindings.xjb</xjbSource>
              </xjbSources>
          </configuration>
        </plugin>

这是bindings.xjb:

<?xml version="1.0"?>
<jxb:bindings version="1.0" xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
              xmlns:xjc= "http://java.sun.com/xml/ns/jaxb/xjc"
              jxb:extensionBindingPrefixes="xjc" xmlns:xs="http://www.w3.org/2001/XMLSchema">

node =“/ xs:schema” - &gt;                                                                               

我在this上写了关于使用annotate标签的帖子,所以我插入了

        <annox:annotate>
            <annox:annotate annox:class="javax.xml.bind.annotation.XmlRootElement" />
        </annox:annotate>

在bindings.xjb文件中指示的位置,但当然我没有annox前缀的定义,所以这不起作用。帖子没有说明定义的位置。

我在this SO帖子中也经历过多个答案;不幸的是,各种方法都省略了一些步骤。例如,我愿意直接调用marshall和unmarshall方法,但我需要知道在哪里可以获得他们所说的“JAXBContext”,以及unmarshall调用的内容,或者在哪里查找。

这是annox正确的方法吗?还有另一种正确的方法吗?

1 个答案:

答案 0 :(得分:1)

我刚刚完成转换为旧的jaxb2-maven-plugin,它是Maven中另外一个项目依赖于maven-jaxb2-plugin,它是18的依赖。似乎有更多的文档为它。查看JAXB2 Maven Plugin Wiki

这是一个pom.xml示例:

<build>
<plugins>
  <plugin>
    <groupId>org.jvnet.jaxb2.maven2</groupId>
    <artifactId>maven-jaxb2-plugin</artifactId>
    <version>0.13.2</version>
    <executions>
      <execution>
        <id>generate</id>
        <phase>generate-sources</phase>
        <goals>
          <goal>generate</goal>
        </goals>
      </execution>
    </executions>
    <configuration>
      <schemaDirectory>src/main/resources/</schemaDirectory>
      <generateDirectory>${project.build.directory}/generated-sources/jaxb</generateDirectory>
      <schemaIncludes>
        <include>MyXSD.xsd</include>
      </schemaIncludes>
      <schemaExcludes>
        <include>ObeXSD.xsd</include>
      </schemaExcludes>
      <args>
        <arg>-Xannotate</arg>
      </args>
      <plugins>
        <plugin>
            <groupId>org.jvnet.jaxb2_commons</groupId>
            <artifactId>jaxb2-basics-annotate</artifactId>
            <version>1.0.2</version>
        </plugin>
      </plugins>
    </configuration>
  </plugin>
  <plugin>
      <inherited>true</inherited>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-compiler-plugin</artifactId>
      <configuration>
          <source>1.7</source>
          <target>1.7</target>
      </configuration>
  </plugin>

以下是xsd:

的示例
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
    jaxb:version="2.1" 
    xmlns:annox="http://annox.dev.java.net" 
    jaxb:extensionBindingPrefixes="annox">
    <xsd:complexType name="AbstractProblemClass" abstract="true">
    <xsd:sequence />
    </xsd:complexType>

    <xsd:complexType name="ConcreteClass">
    <xsd:annotation>
        <xsd:appinfo>
            <annox:annotate target="class">@javax.xml.bind.annotation.XmlRootElement</annox:annotate>
        </xsd:appinfo>
    </xsd:annotation>
    <xsd:complexContent>
        <xsd:extension base="AbstractProblemClass">
            <xsd:sequence>
                <xsd:element name="Stuff" type="xsd:String" />
            </xsd:sequence>
        </xsd:extension>
    </xsd:complexContent>
    </xsd:complexType>
</xsd:schema>