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

如何在wsimport运行时替换WSDL中xsd:import路径的反斜杠为正斜杠?

解决JDK 1.8 wsimport解析WSDL时反斜杠路径错误的方案

问题根源

WSDL中xsd:import标签的schemaLocation使用了Windows风格的反斜杠(\),而wsimport遵循URL路径规范,仅识别正斜杠(/),触发Illegal character in path错误。

无需手动修改文件的解决方案

1. 用-catalog参数配合XML目录文件

创建XML目录文件(例如catalog.xml),通过路径重写自动替换反斜杠:

<?xml version="1.0" encoding="UTF-8"?>
<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog">
    <!-- 单个文件映射 -->
    <rewriteURI uriStartString="....\schema\abcdschema.xsd" rewritePrefix="..../schema/abcdschema.xsd"/>
    <!-- 批量匹配schema目录下的所有文件 -->
    <rewriteURI uriStartString="....\schema\" rewritePrefix="..../schema/"/>
</catalog>

在NetBeans中配置:右键项目 → 属性 → Web服务 → 客户端,在「附加wsimport选项」中填入-catalog catalog.xml(确保catalog.xml放在项目根目录,或指定完整路径)。

2. 自定义URLStreamHandler(进阶批量处理)

编写自定义Handler自动转换路径中的反斜杠:

import java.io.IOException;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLStreamHandler;

public class BackslashFixHandler extends URLStreamHandler {
    @Override
    protected URLConnection openConnection(URL url) throws IOException {
        String fixedPath = url.getPath().replace("\\", "/");
        URL correctedUrl = new URL(url.getProtocol(), url.getHost(), url.getPort(), fixedPath);
        return correctedUrl.openConnection();
    }
}

编译后,在NetBeans中给wsimport添加VM参数:-Djava.protocol.handler.pkgs=你的类所在包名,比如类在com.example.handlers下,参数就是-Djava.protocol.handler.pkgs=com.example.handlers。配置路径:项目属性 → 运行 → VM选项,或在Web服务客户端的附加wsimport选项中加入该参数。

3. Maven项目用jaxws-maven-plugin配置

如果项目基于Maven,直接在pom.xml中配置插件并指定catalog文件:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>jaxws-maven-plugin</artifactId>
    <version>2.6</version>
    <executions>
        <execution>
            <goals>
                <goal>wsimport</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <wsdlUrls>
            <wsdlUrl>你的WSDL地址/路径</wsdlUrl>
        </wsdlUrls>
        <catalog>catalog.xml</catalog>
    </configuration>
</plugin>

NetBeans会自动识别Maven配置,执行wsimport时自动应用路径转换。

注意点

  • 目录文件的uriStartString要精准匹配WSDL中schemaLocation的前缀,确保覆盖所有带反斜杠的引用路径。
  • 自定义Handler需确保类已加入项目类路径,NetBeans中可将编译后的class文件放在src/main/resources或指定类路径目录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 01:15:32