为JAXB生成的BinaryObjectType类value字段添加注解失败
解决maven-jaxb2-plugin生成类时为指定字段添加@XmlJavaTypeAdapter注解的问题
核心解决方案
关键是精准定位BinaryObjectType类中value字段对应的XSD节点,通过jaxb2-basics-annotate的XPath配置将注解添加到目标字段,而非类本身。
步骤1:确认依赖配置
确保在pom.xml中引入jaxb2-basics和jaxb2-basics-annotate依赖:
<dependencies> <dependency> <groupId>org.jvnet.jaxb2_commons</groupId> <artifactId>jaxb2-basics</artifactId> <version>0.12.0</version> </dependency> <dependency> <groupId>org.jvnet.jaxb2_commons</groupId> <artifactId>jaxb2-basics-annotate</artifactId> <version>0.12.0</version> </dependency> </dependencies>
步骤2:配置maven-jaxb2-plugin
在插件的configuration中添加args参数,指定注解的XPath和具体注解内容:
<build> <plugins> <plugin> <groupId>org.jvnet.jaxb2.maven2</groupId> <artifactId>maven-jaxb2-plugin</artifactId> <version>0.15.2</version> <executions> <execution> <goals> <goal>generate</goal> </goals> <configuration> <schemaDirectory>${project.basedir}/src/main/resources/wsdl</schemaDirectory> <schemaIncludes> <include>*.wsdl</include> </schemaIncludes> <args> <!-- 启用注解插件 --> <arg>-Xannotate</arg> <!-- 定位BinaryObjectType的value字段对应的XSD节点 --> <arg>-Aannotate:xpath="//xs:complexType[@name='BinaryObjectType']/xs:sequence/xs:element[@name='value']"</arg> <!-- 指定要添加的注解 --> <arg>-A@javax.xml.bind.annotation.XmlJavaTypeAdapter(value=com.yourpackage.BinaryObjectTypeValueAdapter.class)</arg> </args> <plugins> <plugin> <groupId>org.jvnet.jaxb2_commons</groupId> <artifactId>jaxb2-basics</artifactId> <version>0.12.0</version> </plugin> <plugin> <groupId>org.jvnet.jaxb2_commons</groupId> <artifactId>jaxb2-basics-annotate</artifactId> <version>0.12.0</version> </plugin> </plugins> </configuration> </execution> </executions> </plugin> </plugins> </build>
关键XPath调整说明
- 如果
value是元素(WSDL对应XSD中的常见情况),使用上述XPath即可 - 如果
value是属性,则将XPath调整为://xs:complexType[@name='BinaryObjectType']/xs:attribute[@name='value']
若不确定XSD结构,可先运行一次生成命令,查看target/generated-sources/xjc目录下自动生成的XSD文件,找到BinaryObjectType的定义,确认value节点的具体位置后再调整XPath。
验证
执行mvn clean generate-sources后,查看生成的BinaryObjectType.java,确认value字段是否已正确添加@XmlJavaTypeAdapter(BinaryObjectTypeValueAdapter.class)注解。
内容的提问来源于stack exchange,提问作者szczyzanski
相关产品推荐
相关产品推荐

