maven-jaxb2-plugin的annox XmlRootElement注解未生效问题
核心成因
- 绑定规则的schema定位完全失配:
当前插件配置为schemaLanguage=WSDL,实际参与代码生成的源是内嵌了多段XSD的WSDL文件,informarIncidenciaRequest复杂类型是直接定义在WSDL的<types>节点内部的,并不存在独立命名为InformarIncidencia_v02_00.xsd的外部schema文件。但bindings.xml中设置的绑定规则为schemaLocation="InformarIncidencia_v02_00.xsd",这条规则从根源上就匹配不到对应的schema节点,后续注解注入逻辑完全不会执行。 - XJC扩展能力未完全启用:
虽然在bindings根节点声明了jaxb:extensionBindingPrefixes="annox xjc",但插件执行时既没有开启允许自定义绑定扩展的模式,也没有显式加载annox注解注入的扩展组件,就算定位到了目标节点,注解注入逻辑也不会触发。
解决步骤
- 修正bindings.xml的schema定位逻辑
针对WSDL内嵌的XSD,不能直接套用独立外部XSD的文件名作为schemaLocation,需要按照目标节点实际所属的targetNamespace匹配:
将原配置中<jaxb:bindings schemaLocation="InformarIncidencia_v02_00.xsd">修改为:
该规则会匹配WSDL内所有内嵌schema,定位到定义了<jaxb:bindings schemaLocation="*" node="/xsd:schema[@targetNamespace='http://salut.gencat.cat/hc3/informarincidencia']">informarIncidenciaRequest的目标命名空间schema,后续匹配节点内的xs:complexType[@name='informarIncidenciaRequest']时就不会出现定位失配。 - 补齐插件的扩展参数与依赖
在maven-jaxb2-plugin的配置块中补充扩展支持:- 在原有
<args>节点内新增两个参数:<arg>-extension</arg> <arg>-Xannotate</arg> - 在插件的
<dependencies>节点下加入注解扩展的对应依赖,保证插件能正常加载注入逻辑:<dependency> <groupId>org.jvnet.jaxb2_commons</groupId> <artifactId>jaxb2-basics-annotate</artifactId> <version>1.1.0</version> </dependency>
- 在原有
- 调整生成校验配置
将原本注释掉的<forceRegenerate>true</forceRegenerate>放开,避免插件检测到已有生成类就跳过执行,导致绑定规则的修改不生效。
调整完成后重新执行代码生成命令,就能在生成的InformarIncidenciaRequest类上看到符合预期的@XmlRootElement注解。
内容的提问来源于stack exchange,提问作者Jordi Cabré
相关产品推荐
相关产品推荐

