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

JAXB解组时JavaDoc生成出现'>'字符未转义错误的问题求助

解决CXF生成JavaDoc时XML特殊字符未正确转义的问题

结合你给出的技术栈(CXF 3.4.4、Spring 4.1.6、SLF4J 1.7.9,JAXB 2.3.0),以及遇到的JavaDoc报错——生成的ActionType.java中Javadoc里的>未被转义,而<被转成了&lt;(你看到的&amp;lt;其实是双重转义后的结果,本质是HTML转义的<),这个问题根源出在CXF代码生成阶段的JAXB XJC插件转义逻辑,而非运行时的Unmarshaller配置(你设置的jaxb.encoding对代码生成的JavaDoc完全不起作用)。

给你几个可行的解决方向:

1. 给CXF CodeGen插件添加XJC转义参数

CXF的wsdl2java工具底层依赖JAXB的XJC来生成Java代码,我们可以通过添加XJC的扩展参数强制转义所有XML特殊字符(包括>)。在你的Maven cxf-codegen-plugin配置里添加以下extraargs:

<plugin>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-codegen-plugin</artifactId>
    <version>${cxf-version}</version>
    <executions>
        <execution>
            <id>generate-sources</id>
            <phase>generate-sources</phase>
            <configuration>
                <sourceRoot>${project.build.directory}/generated-sources/cxf</sourceRoot>
                <wsdlOptions>
                    <wsdlOption>
                        <wsdl>你的WSDL文件路径.wsdl</wsdl>
                        <!-- 添加XJC转义参数 -->
                        <extraargs>
                            <extraarg>-xjc-arg</extraarg>
                            <extraarg>-XescapeXML</extraarg>
                        </extraargs>
                    </wsdlOption>
                </wsdlOptions>
            </configuration>
            <goals>
                <goal>wsdl2java</goal>
            </goals>
        </execution>
    </executions>
</plugin>

-XescapeXML参数会让XJC在生成Javadoc时,把所有XML特殊字符(<、>、&等)都转成对应的HTML实体,这样JavaDoc解析时就不会出现bad use of '>'的错误。

2. 排查JAXB依赖的兼容性与冲突

你当前把JAXB依赖设为provided,要确认容器提供的JAXB版本是否和CXF 3.4.4兼容。CXF 3.4.x官方推荐使用JAXB 2.3.x,但如果容器里的JAXB版本过低或过高,可能会导致转义逻辑异常。可以尝试临时将JAXB依赖的scope改为compile,排除容器提供的版本,看看问题是否解决:

<dependency>
    <groupId>javax.xml.bind</groupId>
    <artifactId>jaxb-api</artifactId>
    <version>2.3.0</version>
    <!-- 临时改为compile,排查冲突 -->
    <scope>compile</scope>
</dependency>
<dependency>
    <groupId>com.sun.xml.bind</groupId>
    <artifactId>jaxb-core</artifactId>
    <version>2.3.0</version>
    <scope>compile</scope>
</dependency>
<dependency>
    <groupId>com.sun.xml.bind</groupId>
    <artifactId>jaxb-impl</artifactId>
    <version>2.3.0</version>
    <scope>compile</scope>
</dependency>

3. 临时应急方案:生成后批量替换

如果上述方案暂时无法生效,你可以在Maven的generate-sources阶段之后,添加一个执行脚本的步骤,批量替换生成代码中Javadoc里的>为&gt;。比如用Maven的exec-maven-plugin执行sed命令(Linux环境):

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>exec-maven-plugin</artifactId>
    <version>3.1.0</version>
    <executions>
        <execution>
            <phase>process-sources</phase>
            <goals>
                <goal>exec</goal>
            </goals>
            <configuration>
                <executable>sed</executable>
                <arguments>
                    <argument>-i</argument>
                    <argument>'s/\(<\/*complexType.*>\)/\&amp;gt;/g'</argument>
                    <argument>${project.build.directory}/generated-sources/cxf/at/ActionType.java</argument>
                </arguments>
            </configuration>
        </execution>
    </executions>
</plugin>

这个方案是治标不治本,但可以快速解决当前的JavaDoc构建报错问题。

内容的提问来源于stack exchange,提问作者Michu93

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 22:42:41