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

使用wsimport结合绑定文件自动生成Handler-Chain遇到的问题

wsimport结合绑定文件自动生成Handler-Chain遇到的问题

看起来你遇到的问题是wsimport已经给目标类加上了@HandlerChain注解,但既没在注解里正确指定XML文件的引用路径,也没自动生成对应的handler chain XML文件对吧?我来帮你捋捋可能的问题点:

1. 命名空间版本不匹配

你的绑定文件里用了jaxws:bindings version="3.0"(对应Jakarta EE 9+版本),但javaee命名空间还是旧的Sun Java EE地址:http://java.sun.com/xml/ns/javaee,这会导致配置无法被正确识别。Jakarta EE 9+对应的命名空间应该是https://jakarta.ee/xml/ns/javaee,你需要把绑定文件里的xmlns:javaee替换成这个新地址。

2. wsimport不会自动生成handler chain XML文件

划重点:wsimport不会帮你自动创建handler chain的XML文件,它只会根据绑定文件的配置,在生成的服务类/端点类上添加@HandlerChain注解,而注解的file属性值需要你在绑定文件里明确指定。你当前的绑定文件只定义了handler链的内容,但没告诉wsimport注解里要指向哪个XML文件,自然也没法让它自动生成这个文件。

3. 正确的绑定文件配置示例

修改后的绑定文件应该是这样的(替换命名空间,同时明确指定handler chain文件的路径):

<?xml version="1.0" encoding="UTF-8"?>
<jaxws:bindings version="3.0"
    xmlns="https://jakarta.ee/xml/ns/jaxws"
    xmlns:jaxb="https://jakarta.ee/xml/ns/jaxb"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
    xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
    xmlns:javaee="https://jakarta.ee/xml/ns/javaee"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:jaxws="https://jakarta.ee/xml/ns/jaxws"
    jaxb:extensionBindingPrefixes="xjc"
    wsdlLocation="WSDL_QUERY_OUT.XML">

    <!-- Erstellen der Handler-Chain-Annotationen -->
    <jaxws:bindings node="wsdl:definitions">
        <jaxws:handler-chains>
            <jaxws:handler-chain>
                <jaxws:handler>
                    <jaxws:handler-name>SoapEndpointHandler</jaxws:handler-name>
                    <jaxws:handler-class>com.test.resources.SoapEndpointHandler</jaxws:handler-class>
                </jaxws:handler>
            </jaxws:handler-chain>
        </jaxws:handler-chains>
        <!-- 指定@HandlerChain注解的file属性,指向你要放置的XML文件路径 -->
        <jaxws:package name="你的生成类包路径">
            <jaxws:class name="你的端点类名">
                <jaxws:annotation>
                    <![CDATA[@jakarta.xml.ws.HandlerChain(file="handler-chain.xml")]]>
                </jaxws:annotation>
            </jaxws:class>
        </jaxws:package>
    </jaxws:bindings>
</jaxws:bindings>

4. 手动创建handler chain XML文件

你需要自己在项目的对应路径下创建handler-chain.xml文件,内容就是你绑定文件里定义的handler链内容:

<?xml version="1.0" encoding="UTF-8"?>
<handler-chains xmlns="https://jakarta.ee/xml/ns/javaee">
    <handler-chain>
        <handler>
            <handler-name>SoapEndpointHandler</handler-name>
            <handler-class>com.test.resources.SoapEndpointHandler</handler-class>
        </handler>
    </handler-chain>
</handler-chains>

5. 检查wsimport命令参数

确保你执行wsimport时正确指定了绑定文件参数,比如:

wsimport -b 你的绑定文件名.xml WSDL_QUERY_OUT.XML -d 生成类的输出目录

总结一下:wsimport只负责生成带注解的类,handler chain的XML文件需要你手动创建,同时要保证绑定文件的命名空间和注解配置正确匹配Jakarta EE 3.0的版本要求。

备注:内容来源于stack exchange,提问作者Net_Hans

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 11:28:14