Java wsimportant任务和jdk6

Java wsimportant任务和jdk6,java,web-services,ant,jax-ws,wsimport,Java,Web Services,Ant,Jax Ws,Wsimport,我尝试使用jax ws生成web服务代理类,使用wsimport ant任务,类似于,有以下问题: 据我所知,JDK1.6的最新版本包括jax ws,WsImport ant任务在JDK的tools.jar文件中定义 为什么ant不能自动找到它? 为什么eclipse不能自动找到它? 我发现了一些关于在JDK 6中使用jax ws的参考资料,但这些参考资料似乎是基于复制一个单独下载的jax ws库并将其放入JDK ext文件夹(鉴于它现在实际上与JDK捆绑在一起,我认为不再需要该文件夹) 在已经

我尝试使用jax ws生成web服务代理类,使用wsimport ant任务,类似于,有以下问题:

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

事实证明,JDK中的WsImport类实际上不是ant任务,而是实际的WsImport命令行工具。我也误读了包名:com.sun.tools.internal.ws


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

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

我的dev box中有Java1.6.031,尽管有点特殊(JRockit R28.2.3),这是我发现的正确使用
wsimport
任务的唯一方法

  • 从官方网站下载合适版本的JAX-WS。对于JDK6,它应该是一个高达的版本。如果尝试使用版本2.2+,则会出现类路径冲突
  • 使用
    java-JAR{jaxwsJarName}
    安装JAR内容,不管它是什么名称。此命令将创建一个
    [jaxws-ri]
    文件夹
  • [jaxws-ri/lib]
    文件夹的内容复制到所选位置。不管大小如何,我喜欢在我自己的项目中使用外部库,以确保任何人都能够在没有外部构件的情况下编译和打包代码
  • 在生成文件中创建
    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>
    
    <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>