如何让hisrc-higherjaxb插件为ObjectFactory所有方法添加XmlElementDecl注解
问题描述
使用hisrc-higherjaxb-maven-plugin 2.1.1版本,基于onvif.xsd生成Java源码,相关pom.xml配置如下:
<plugin> <groupId>org.patrodyne.jvnet</groupId> <artifactId>hisrc-higherjaxb-maven-plugin</artifactId> <version>2.1.1</version> <executions> <execution> <id>onvif-onvif-xsd</id> <goals> <goal>generate</goal> </goals> <configuration> <args> <arg>-no-header</arg> <arg>-XautoNameResolution</arg> </args> <generatePackage></generatePackage> <generateDirectory>${project.basedir}/src/main/java</generateDirectory> <episode>true</episode> <episodeFile>${project.basedir}/src/main/resources/episodes/onvif.episode </episodeFile> <forceRegenerate>true</forceRegenerate> <extension>true</extension> <enableExternalEntityProcessing>true</enableExternalEntityProcessing> <bindings></bindings> <strict>false</strict> <verbose>true</verbose> <disableXmlSecurity>true</disableXmlSecurity> <schemas> <schema> <url>file://${project.basedir}/src/main/resources/wsdl/ver10/schema/onvif.xsd</url> </schema> </schemas> </configuration> </execution> </executions> </plugin>
源码生成正常,所有Schema声明的类型均已生成,但生成的ObjectFactory仅为部分工厂方法添加了XmlElementDecl注解。当这些未注解的元素出现在xs:any(processContents="lax")节点位置时,Marshaller无法对其进行反序列化,只能将其保留为DOM元素,原因是它们未在命名空间中声明。需要配置插件使其为所有工厂方法添加XmlElementDecl注解。
解决方案
在插件配置的<args>节点中添加-XXmlElementDeclForAll参数,即可强制插件为所有生成的工厂方法添加XmlElementDecl注解。
修改后的<args>配置如下:
<args> <arg>-no-header</arg> <arg>-XautoNameResolution</arg> <arg>-XXmlElementDeclForAll</arg> </args>
该参数是hisrc-higherjaxb-maven-plugin的扩展功能,能够确保所有由Schema定义的元素对应的工厂方法都带有XmlElementDecl注解,让Marshaller可以识别命名空间中的这些元素,从而正常处理xs:any节点下的反序列化操作。
内容的提问来源于stack exchange,提问作者Crash0v3rrid3
相关产品推荐
相关产品推荐

