WsImport муравейник и JDK 6 - PullRequest
       20

WsImport муравейник и JDK 6

3 голосов
/ 28 июля 2011

Я пытаюсь использовать jax-ws для генерации прокси-классов веб-службы, используя задачу ant wsimport, аналогично этому вопросу со следующим дополнительным вопросом:

Насколько я понимаю, более поздние версии JDK 1.6 включают в себя jax-ws, а задача ant WsImport определена в файле tools.jar JDK.

Почему муравей не находит это автоматически?

Почему затмение также не находит это автоматически?

Я нашел несколько ссылок на использование jax-ws с JDK 6, но похоже, что они основаны на копировании отдельно загруженной библиотеки jax-ws и ее переносе в папку ext JDK (которую, я полагаю, больше не требуется, учитывая теперь он действительно связан с JDK).

Как правильно использовать задачу wsimport с версией JDK 1.6, которая уже содержит jax-ws?

Моя сборка 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 голосов
/ 03 августа 2011

Оказывается, класс WsImport, который находится в JDK, на самом деле не является задачей муравья, а представляет собой инструмент командной строки wsimport. Я неправильно прочитал имя пакета: com.sun.tools.internal.ws.

Фактическая задача ant доступна в webservices-tools.jar в пакете метро здесь . Вам нужно будет поместить его в каталог ant lib.

1 голос
/ 20 апреля 2016

Насколько я знаю, в комплекте с JDK6 находится бинарный инструмент , а не сама задача Ant.

У меня есть Java 1.6.0_31 в моей коробке разработчика, хотя и немного особенная (JRockit R28.2.3), и я нашел единственный способ правильно использовать задачу wsimport.

  1. Загрузите подходящую версию JAX-WS с официального сайта. С JDK6 это должна быть версия до 2.1.10 . Если вы попытаетесь использовать версию 2.2+, у вас будет конфликт пути к классам.
  2. Установите содержимое JAR с java -jar {jaxwsJarName}, как бы оно ни называлось. Эта команда создаст папку [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>
...