3

この質問と同様に、wsimport ant タスクを使用して、jax-ws を使用して Web サービス プロキシ クラスを生成しようとしています。次の追加の質問があります。

私が理解しているように、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 タスクではありません。

少し特殊なもの (JRockit R28.2.3) ですが、開発ボックスに Java 1.6.0_31 があり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>
于 2016-04-20T07:21:48.013 に答える