WsImport ant任务和JDK 6

3
我正在尝试使用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>
2个回答

6

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

实际的ant任务在metro包中的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>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接