JAXB 2 spring-ws 2.0.3.RELEASE Учебное пособие по службам SOAP Ссылка / Запрос на консультацию

Я пытаюсь использовать 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>

person thatidiotguy    schedule 19.01.2012    source источник


Ответы (1)


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

ConverterRegistry.addConverter(Class, Class, Converter)

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

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

person skaffman    schedule 19.01.2012
comment
Я уже использую Spring 3.1, но я проверю, не совместим ли 3.1 с spring-ws в той версии, которую я использую. Спасибо за предложение! - person thatidiotguy; 20.01.2012
comment
@thatidiotguy: Убедитесь, что в вашем пути к классам нет одновременно и 3.0, и 3.1. - person skaffman; 20.01.2012
comment
Привет, скаффман, да, оказывается, это действительно проблема, у меня в войне есть пакеты Spring 3.0.5 и 3.1. Но мой pom четко говорит 3.1.0, это должно означать, что какая-то другая зависимость запрашивает более старую версию правильно? Если да, то есть ли быстрый способ узнать, что это такое? Я имею в виду, что на самом деле у меня нет ничего, что могло бы зависеть от пакетов Spring. На всякий случай я вернул часть зависимостей моего pom в вопрос. Спасибо. - person thatidiotguy; 20.01.2012
comment
@thatidiotguy: Это вопрос знатока. Не совсем моя область знаний. Попробуйте задать новый вопрос. - person skaffman; 20.01.2012
comment
Совершенно верно, спасибо за помощь, и, надеюсь, после решения проблемы пути к классам эта основная проблема будет решена. Если бы я мог, +1 вам, ребята. - person thatidiotguy; 20.01.2012
comment
@thatidiotguy: Вы можете +1. Используйте кнопки голосования и/или галочку рядом с ответом. - person skaffman; 20.01.2012
comment
давайте продолжим это обсуждение в чате - person thatidiotguy; 20.01.2012