我正在尝试使用JAXB 2和spring-ws 2.0.3在glassfish 3上创建SOAP服务。
我在使用xml文件配置时遇到了一些问题,因为有大量关于使这些软件包的旧版本运行的信息(教程,示例),但在较新版本上运行不多。
我已成功通过httpInvokerProxy远程处理服务获得客户端/服务器程序,但这些文件所需的配置量要多得多。
基本上我使用xjc maven工具从我的xml架构和spring-ws注释@PayloadRoot
,@EndPoint
和@ResponsePayload
创建java类,以标记我的端点中的方法java类。我只是想确保我的wsdl文件在正确的URL上可用,并且正在接受soap请求并传递响应。
如果有人可以推荐一个好地方来获取这些信息,或者有心去浏览我的3个xml文件,我会非常感激。否则,这是在上传war文件后转到根servlet目录时遇到的错误。
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
我的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的依赖部分,因为它指出(正确地说)我在war文件中有spring 3.1和spring 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>
答案 0 :(得分:2)
异常消息引用方法
ConverterRegistry.addConverter(Class, Class, Converter)
此方法仅在Spring 3.1中引入(请参阅javadoc),因此您的设置中的某些内容假定存在Spring 3.1,但您似乎正在运行3.0。
您需要将Spring升级到3.1