JAXB 2 spring-ws 2.0.3.RELEASE Учебное пособие по SOAP-сервисам Ссылка / Запрос рекомендаций - PullRequest
3 голосов
/ 20 января 2012

Я пытаюсь использовать 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-файла я был бы очень признателен.Иначе, вот ошибка, которую я получаю при переходе в корневой каталог сервлета после загрузки файла war.

org.springframework.beans.BeanInstantiationException: Не удалось создать экземпляр класса bean [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

1016 *

Мои 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 банки в моем файле войны.

<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>

1 Ответ

2 голосов
/ 20 января 2012

Сообщение об исключении относится к методу

ConverterRegistry.addConverter(Class, Class, Converter)

Этот метод был введен только в Spring 3.1 (см. javadoc ), поэтому что-то в вашей настройке предполагает наличие Spring 3.1, но у вас, похоже, работает 3.0.

Вам нужно обновить Spring до 3.1

...