Генерация и реализация кода JAXWS вместе с Spring для JDK1.5

Мы пытаемся сгенерировать заглушки исходного кода из серии 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?

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

Джонатан


person Jonnie    schedule 30.10.2009    source источник
comment
разве вы не можете просто попробовать собрать с JDK6 и запустить с JRE5?   -  person sfussenegger    schedule 30.10.2009


Ответы (3)


Кажется, они возятся с этой банкой, см. по этой ссылке.

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

  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>
    
person Community    schedule 19.11.2009
comment
@ user213917: Спасибо за ссылку. Я столкнулся с той же проблемой! - person dma_k; 28.09.2010

Мне удалось решить эту, после нескольких часов изучения зависимостей и просмотра того, что внутри каждой из них, я обнаружил, что требуется зависимость 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 не позволяет мне исключать по номеру версии (только по идентификатору группы и идентификатору артефакта). Если у кого-то есть предложения по улучшению этого решения, пожалуйста, дайте мне знать.

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

person Jonnie    schedule 03.11.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), но есть доступен для 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>
person Pascal Thivent    schedule 30.10.2009