Генерация и реализация кода JAXWS вместе с Spring для JDK1.5 - PullRequest
3 голосов
/ 30 октября 2009

Мы пытаемся сгенерировать заглушки исходного кода из серии WSDL (каждая со своими собственными XSD). Мы можем сделать это нормально и отлично работает под JDK1.6, однако нам нужно, чтобы он работал под JDK1.5.

Мы используем jaxws-maven-plugin для генерации исходного кода, однако это зависит от того, доступен ли двоичный файл wsimport (это не доступно в JDK1.5). Для этого мы нашли обходной путь , теперь мы можем сгенерировать исходный код.

Последняя проблема возникает, когда мы пытаемся использовать скомпилированный код заглушки в Spring (2.5.6), мы используем JaxWsPortProxyFactoryBean для взаимодействия с сгенерированным клиентским кодом. Мы получаем java.lang.NoClassDefFoundError: javax / xml / ws / soap / Addressing. Я выяснил, почему это так, и обнаружил, что в зависимости javax.xml.ws/javax-api/2.1 этот класс не содержится. Я обновил номер версии до 2.1-1, и теперь, когда мы собираем проект (для генерации исходного кода), мы получаем следующую ошибку:

cannot find symbol
symbol : method partName()
location : @interface javax.jws.WebParam

Может ли кто-нибудь предоставить решение для этого, чтобы мы могли сгенерировать наш код-заглушку клиента JAXWS и заставить его работать с JaxWsPortProxyFactoryBean?

Заранее спасибо

Jonathan

Ответы [ 3 ]

3 голосов
/ 19 ноября 2009

Кажется, что они портят эту банку, см. эту ссылку .

Обходной путь следующий:

  1. удалить каталог M2_REPO / javax / xml / ws / jaxws-api / 2.1 / *
  2. использовать эту зависимость

    <dependency>
     <groupId>javax.xml.ws</groupId>
     <artifactId>jaxws-api</artifactId>
     <version>2.1</version>
    </dependency>
    
  3. поместите эти репозитории вверху списка:

    <repository>
     <id>javanet</id>
     <url>http://download.java.net/maven/2/</url>
    </repository>
    <repository>
     <id>javanet legacy</id>
     <url>http://download.java.net/maven/1/</url>
     <layout>legacy</layout>
    </repository>
    
2 голосов
/ 03 ноября 2009

Мне удалось решить эту проблему, после нескольких часов изучения зависимостей и изучения того, что у каждого из них было внутри, я обнаружил, что зависимость javax.xml.ws:jaxws-api:2.1-1 необходима, но нам пришлось возьмите копию этой зависимости и возьмите:

<dependency>
    <groupId>javax.jws</groupId>
    <artifactId>jsr181</artifactId>
    <version>1.0</version>
</dependency>

Затем мне пришлось включить следующую зависимость в pom.xml моего приложения:

<dependency>
    <groupId>javax.jws</groupId>
    <artifactId>jsr181-api</artifactId>
    <version>1.0-MR1</version>
</dependency>

Это далеко от идеала, мы должны поддерживать отдельную частную зависимость в нашем хранилище maven и не забывать включать эту зависимость. Раздражает то, что Maven не позволяет мне исключать по номеру версии (только по groupId и artifactId). Если у кого-то есть предложение улучшить это решение, пожалуйста, сообщите мне.

Спасибо за вашу помощь.

0 голосов
/ 30 октября 2009

Мы используем jaxws-maven-plugin для генерации исходного кода, однако это зависит от того, доступен ли двоичный файл wsimport (это не доступно в JDK1.5). Для этого мы нашли обходной путь , теперь мы можем сгенерировать исходный код.

На самом деле, wsimport, который является частью JAX-WS, не включен в Java 5 (в отличие от Java 6, который включает в себя JAX-WS 2.x, Java 6u14 включает в себя JAX-WS 2.1.6), но это is доступно для Java 5, если вы его предоставите. Странно то, что jaxws-maven-plugin объявляет эти зависимости (см., Например, jaxws-maven-plugin-1.12.pom ), где-то должна быть проблема с загрузкой классов, отсюда и «обходной путь».

Последняя проблема возникает, когда мы пытаемся использовать скомпилированный код заглушки в Spring (2.5.6), мы используем JaxWsPortProxyFactoryBean для взаимодействия с сгенерированным клиентским кодом. Мы получаем java.lang.NoClassDefFoundError: javax / xml / ws / soap / Addressing. [...]

Какую версию плагина вы используете именно? Я бы предложил использовать версию 1.12 и ту же версию jax-ws, что и в плагине в вашем pom.xml:

<dependency>
  <groupId>com.sun.xml.ws</groupId>
  <artifactId>jaxws-tools</artifactId>
  <version>2.1.7</version>
</dependency>
...