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

使用wsimport处理波兰财政部多消息体WSDL生成客户端代码遇问题

解决wsimport解析多Part WSDL消息的异常问题

我之前在对接类似的政府部门SOAP API时也碰到过wsimport解析多Part消息失败的问题,针对你这个波兰财政部VAT核验API的情况,给你几个可行的解决方案:

1. 自定义JAX-WS绑定文件修正解析规则

wsimport默认的包装器风格可能不兼容这种多Part的消息定义,你可以创建一个JAX-WS绑定文件来指定处理逻辑:

首先创建bindings.xml文件(放在项目src/main/resources目录下):

<jaxws:bindings xmlns:jaxws="http://java.sun.com/xml/ns/jaxws"
               xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
               xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
               wsdlLocation="https://sprawdz-status-vat.mf.gov.pl/?wsdl"
               version="2.0">
    <!-- 针对目标消息禁用包装器风格 -->
    <jaxws:bindings node="wsdl:definitions/wsdl:message[@name='SprawdzNIPNaDzienZapytanie']">
        <jaxws:enableWrapperStyle>false</jaxws:enableWrapperStyle>
        <!-- 为Data类型指定Java日期转换规则 -->
        <jaxb:globalBindings>
            <jaxb:javaType name="java.util.Date" 
                           xmlType="tns:Data" 
                           parseMethod="javax.xml.bind.DatatypeConverter.parseDate" 
                           printMethod="javax.xml.bind.DatatypeConverter.printDate"/>
        </jaxb:globalBindings>
    </jaxws:bindings>
</jaxws:bindings>

然后在Maven的wsimport插件中配置这个绑定文件:

<plugin>
    <groupId>com.sun.xml.ws</groupId>
    <artifactId>jaxws-maven-plugin</artifactId>
    <version>2.3.5</version>
    <executions>
        <execution>
            <goals>
                <goal>wsimport</goal>
            </goals>
            <configuration>
                <wsdlUrls>
                    <wsdlUrl>https://sprawdz-status-vat.mf.gov.pl/?wsdl</wsdlUrl>
                </wsdlUrls>
                <bindingFiles>
                    <bindingFile>src/main/resources/bindings.xml</bindingFile>
                </bindingFiles>
                <packageName>com.yourpackage.vatcheck</packageName>
            </configuration>
        </execution>
    </executions>
</plugin>

2. 改用Apache CXF的wsdl2java插件

Apache CXF的代码生成工具对复杂WSDL的兼容性更好,你可以替换Maven插件为cxf-codegen-plugin:

<plugin>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-codegen-plugin</artifactId>
    <version>3.6.2</version>
    <executions>
        <execution>
            <id>generate-sources</id>
            <phase>generate-sources</phase>
            <goals>
                <goal>wsdl2java</goal>
            </goals>
            <configuration>
                <wsdlOptions>
                    <wsdlOption>
                        <wsdl>https://sprawdz-status-vat.mf.gov.pl/?wsdl</wsdl>
                        <extraargs>
                            <extraarg>-p</extraarg>
                            <extraarg>com.yourpackage.vatcheck</extraarg>
                        </extraargs>
                    </wsdlOption>
                </wsdlOptions>
            </configuration>
        </execution>
    </executions>
</plugin>

3. 本地修正WSDL后再解析

如果以上方法都不行,可以先把WSDL下载到本地,检查tns:NIP和tns:Data的类型定义是否存在命名空间引用不规范、类型冲突等问题,手动修正后再用wsimport处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:45:02