【问题标题】:WsImport ant task and JDK 6WsImport 蚂蚁任务和 JDK 6
【发布时间】:2011-10-15 07:06:07
【问题描述】:

我正在尝试使用 jax-ws 生成 Web 服务代理类,使用 wsimport ant 任务,类似于this question,并带有以下后续问题:

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

为什么 ant 没有自动找到这个?

为什么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>

【问题讨论】:

    标签: java web-services ant jax-ws wsimport


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      1. 从官网下载合适版本的JAX-WS。对于 JDK6,它应该是高达2.1.10 的版本。如果您尝试使用 2.2+ 版本,您将遇到类路径冲突。
      2. 使用java -jar {jaxwsJarName} 安装JAR 内容,无论它是什么名称。此命令将创建一个[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>
      

      【讨论】:

        猜你喜欢
        • 2011-04-17
        • 1970-01-01
        • 2016-01-18
        • 2011-12-29
        • 2013-12-04
        • 2015-05-30
        • 2012-10-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多