如何为jaxb2-maven-plugin生成的Java Bean添加后缀并解决绑定错误
问题解决:JAXB
schemaBindings 关联报错修复 错误原因
<jaxb:schemaBindings> 不能直接放在根 <jaxb:bindings> 节点下,它必须明确关联到具体的XML Schema(XSD)文件,否则JAXB无法确定该命名转换规则要应用到哪些Schema上,从而抛出"The 'jaxb:schemaBindings' customization is not associated with any schema element"错误。
解决方案
根据你的需求(给所有生成Bean添加后缀),修改bindings.xjb文件,将schemaBindings嵌套在指定Schema的绑定节点中,具体有两种实现方式:
方式1:全局应用到所有XSD文件
如果需要给src/main/resources/xsd目录下的所有XSD生成的类统一添加后缀,调整绑定文件如下:
<?xml version="1.0" encoding="UTF-8"?> <jaxb:bindings xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:jaxb="https://jakarta.ee/xml/ns/jaxb" xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" version="3.0"> <jaxb:globalBindings> <xjc:superClass name="my.project.xml.MyXmlObject"/> <jaxb:javaType name="long" xmlType="xs:nonNegativeInteger" parseMethod="my.project.xml.TypeConverter.parseLong" printMethod="my.project.xml.TypeConverter.printLong"/> </jaxb:globalBindings> <!-- 绑定到xsd目录下的所有XSD文件,应用命名转换规则 --> <jaxb:bindings schemaLocation="xsd/*.xsd"> <jaxb:schemaBindings> <jaxb:package name="my.project"/> <jaxb:nameXmlTransform> <jaxb:elementName prefix="My" suffix="Dto"/> <jaxb:typeName prefix="My" suffix="Dto"/> </jaxb:nameXmlTransform> </jaxb:schemaBindings> </jaxb:bindings> </jaxb:bindings>
schemaLocation="xsd/*.xsd":路径相对于bindings.xjb的位置(当前在src/main/resources),匹配目标目录下所有XSD文件。
方式2:针对单个XSD文件配置
如果只需要给特定XSD生成的类添加后缀,替换为具体的Schema文件名即可:
<!-- 示例:仅给user_schema.xsd应用命名规则 --> <jaxb:bindings schemaLocation="xsd/user_schema.xsd"> <jaxb:schemaBindings> <jaxb:package name="my.project"/> <jaxb:nameXmlTransform> <jaxb:elementName prefix="My" suffix="Dto"/> <jaxb:typeName prefix="My" suffix="Dto"/> </jaxb:nameXmlTransform> </jaxb:schemaBindings> </jaxb:bindings>
验证
修改完成后,执行Maven命令重新生成Java类:
mvn jaxb2:xjc
检查生成的类文件,确认类名已带上指定的My前缀和Dto后缀。
内容的提问来源于stack exchange,提问作者BarbetNL
相关产品推荐
相关产品推荐

