我有一组从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
正确的方法吗?还有另一种正确的方法吗?
答案 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>