You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 18:13:34