3

我正在尝试使用 jax-ws 生成 Web 服务代理类,使用 wsimport ant 任务,类似于这个问题,以及以下后续问题:

据我了解,JDK 1.6 的更新版本包括 jax-ws,并且 WsImport ant 任务在 JDK 的 tools.jar 文件中定义。

为什么蚂蚁不自动找到这个?

为什么eclipse也不会自动找到这个?

我发现了一些关于在 JDK 6 中使用 jax-ws 的参考,但这些似乎是基于复制单独下载的 jax-ws 库并将其放入 JDK ext 文件夹(我认为不再需要它,因为它实际上是现在与 JDK 捆绑在一起)。

在已经包含 jax-ws 的 JDK 1.6 版本中使用 wsimport 任务的正确方法是什么?

我的构建 XML:

<?xml version="1.0" encoding="UTF-8"?>
<project name="wsproxy">
    <taskdef name="wsimport" classname="com.sun.tools.ws.ant.WsImport" />
    <target name="wsgentest">
        <wsimport
            wsdl="http://localhost/Service?wsdl"
            destdir="bin-gen"
            sourcedestdir="src-gen"
            keep="true"
            verbose="true"
            package="com.ws">
        </wsimport>
    </target>
</project>
4

2 回答 2

6

原来 JDK 中的 WsImport 类实际上并不是一个 ant 任务,而是真正的 wsimport 命令行工具。我也误读了包名:com.sun.tools.internal.ws。

实际的 ant 任务在 metro 包中的 webservices-tools.jar 中可用。您需要将它放在 ant lib 目录中。

于 2011-08-03T16:04:50.920 回答
2

据我所知,与 JDK6 捆绑的是二进制工具本身,而不是实际的 Ant 任务。

我的开发箱中有 Java 1.6.0_31,虽然有点特殊(JRockit R28.2.3),这是我发现wsimport正确使用任务的唯一方法。

  1. 从官方网站下载合适版本的 JAX-WS。对于 JDK6,它应该是最高2.1.10的版本。如果您尝试使用 2.2+ 版本,您将遇到类路径冲突。
  2. 使用 安装 JAR 内容java -jar {jaxwsJarName},无论它是什么名称。此命令将创建一个[jaxws-ri]文件夹。
  3. 将文件夹的内容复制到[jaxws-ri/lib]选择的位置。尽管大小,我喜欢在我自己的项目中使用外部库,以确保任何人都可以在没有外部工件的情况下编译和打包代码。
  4. 在构建文件中创建taskdef项目和任务。wsimport

这是我的taskdef项目:

<taskdef
    name="wsimport"
    classname="com.sun.tools.ws.ant.WsImport">

    <classpath>
        <fileset dir="${lib.dir}/jaxws-ri-2.1.10">
            <include name="**/*.jar" />
        </fileset>
    </classpath>
</taskdef>

这是我的wsimport任务:

<target name="generate-code">
    <wsimport
        wsdl="${wsdl.dir}/${wsdl.name}-${wsdl.version}.wsdl"
        sourcedestdir="${src.dir}"
        destdir="${build.debug.dir}"
        package="${generated.code.package}">

        <depends file="${wsdl.dir}/${wsdl.name}-${wsdl.version}.wsdl" />
        <produces dir="${build.debug.dir}" />
    </wsimport>
</target>
于 2016-04-20T07:21:48.013 回答