导入ant任务和JDK 6



我正在尝试使用jax-ws来生成web服务代理类,使用wimportant任务,类似于此问题,具有以下后续问题:

据我所知,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版本,使用wimport任务的正确方法是什么?

My build 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>

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

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

据我所知,与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>

相关内容

  • 没有找到相关文章