Я пытаюсь использовать JAXB 2 и spring-ws 2.0.3 для создания службы SOAP на Glassfish 3.
У меня возникли некоторые проблемы с конфигурациями файлов xml, потому что есть масса информации (учебники, примеры) о запуске старых версий этих пакетов, но не так много в более новых версиях.
Я успешно запустил клиент-серверные программы, работающие через службу удаленного взаимодействия httpInvokerProxy, но объем конфигурации, требуемый в этих файлах, значительно больше.
По сути, я использовал инструмент xjc maven для создания классов Java из моей схемы xml и аннотаций spring-ws @PayloadRoot
, @EndPoint
и @ResponsePayload
, чтобы отметить методы в моем классе Java конечной точки. Я просто пытаюсь убедиться, что мой файл wsdl доступен по правильному URL-адресу, что запросы на мыло принимаются и ответы доставляются.
Если бы кто-то мог порекомендовать хорошее место, чтобы получить эту информацию или иметь сердце, чтобы просмотреть мои 3 файла xml, я был бы очень благодарен. В противном случае вот ошибка, которую я получаю при переходе в корневой каталог сервлета после загрузки файла войны.
org.springframework.beans.BeanInstantiationException: не удалось создать экземпляр класса компонента [org.springframework.web.context.support.XmlWebApplicationContext]: конструктор выдал исключение; вложенным исключением является java.lang.NoSuchMethodError: org.springframework.core.convert.converter.ConverterRegistry.addConverter(Ljava/lang/Class;Ljava/lang/Class;Lorg/springframework/core/convert/converter/Converter
Мои xml-файлы выглядят следующим образом:
web.xml
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
<display-name>Licensing SOAP Service</display-name>
<servlet>
<servlet-name>licensingSOAPService</servlet-name>
<servlet-class>org.springframework.ws.transport.http.MessageDispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>licensingSOAPService</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>
licensingSOAPService-servlet.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<import resource-"/applicationContext.xml"/>
<bean id = "licensingSOAPService" class="mypackage.soap.LicensingSOAPService">
</bean>
<bean class="org.springframework.ws.server.endpoint.mapping.PayloadRootAnnotationMethodEndpointMapping">
<description>An endpoint mapping strategy that looks for @Endpoint and @PayloadRoot annotations.</description>
</bean>
<bean class="org.springframework.ws.server.endpoint.adapter.MarshallingMethodEndpointAdapter">
<description>Enables the MessageDispatchServlet to invoke methods requiring OXM marshalling.</description>
<constructor-arg ref="marshaller"/>
</bean>
<bean id="marshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller"
p:contextPath="mypackage.schemas" />
<bean id = "licensingWSDL" class ="org.springframework.ws.wsdl.wsdl11.DefaultWsdl11Definition">
<property name = "schema" ref = "schema">
<property name = "portTypeName" value = "licenseResource"/>
<property name = "locationUri" value ="/licensing/schema/" />
<property name = "targetNamespace" value = "mypackage/schemas" />
</bean>
<bean id ="schema" class ="org.springframework.xml.xsd.SimpleXsdSchema">
<property name ="xsd" value = "/licenseSchema.xsd"/>
</bean>
</beans>
applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:sws="http://www.springframework.org/schema/web-services"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/web-services
http://www.springframework.org/schema/web-services/web-services-2.0.xsd">
<sws:annotation-driven />
<context:component-scan base-package="mypackagel.licensing"/>
</beans>
Кто-нибудь видит в них что-то явно неправильное?
РЕДАКТИРОВАТЬ:
Хотел включить зависимую часть моего pom.xml, поскольку было указано (правильно), что в моем файле войны есть как весенние 3.1, так и весенние 3.5 jar.
<repositories>
<repository>
<id>com.springsource.repository.bundles.release</id>
<name>SpringSource Enterprise Bundle Repository - SpringSource Bundle Releases</name>
<url>http://repository.springsource.com/maven/bundles/release</url>
</repository>
<repository>
<id>maven2-repository.dev.java.net</id>
<name>Java.net Repository for Maven</name>
<url>http://download.java.net/maven/2/</url>
<layout>default</layout>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.sun.xml.messaging.saaj</groupId>
<artifactId>saaj-impl</artifactId>
<version>1.3</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.ws</groupId>
<artifactId>spring-ws-core</artifactId>
<version>2.0.3.RELEASE</version>
</dependency>
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.0</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>2.0.3</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>3.1.0.RELEASE</version>
</dependency>
</dependencies>
<build>
<finalName>LicensingSOAPService</finalName>
<plugins>
<plugin>
<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>