Spring WS with JAXB2Marshaller-javax.activation.DataHandler NoClassDefFoundError
我们正试图在我们的webservice项目中实现一个JAXB2Marshaller,但是我们在类javax.activation.DataHandler上得到了一个java.lang.NoClassDefFoundError,但是对activation工件的依赖性存在,并且我们已经验证了activation.jar实际上正在部署中,所以这是由其他原因造成的 以下是应用程序配置:Spring WS with JAXB2Marshaller-javax.activation.DataHandler NoClassDefFoundError,jaxb,spring-ws,Jaxb,Spring Ws,我们正试图在我们的webservice项目中实现一个JAXB2Marshaller,但是我们在类javax.activation.DataHandler上得到了一个java.lang.NoClassDefFoundError,但是对activation工件的依赖性存在,并且我们已经验证了activation.jar实际上正在部署中,所以这是由其他原因造成的 以下是应用程序配置: <sws:annotation-driven /> <sws:dynamic-wsdl i
<sws:annotation-driven />
<sws:dynamic-wsdl id="security" portTypeName="security" locationUri="/">
<sws:xsd location="classpath:security-service.xsd"/>
</sws:dynamic-wsdl>
<bean class="org.springframework.ws.server.endpoint.adapter.GenericMarshallingMethodEndpointAdapter">
<constructor-arg ref="marshaller" />
</bean>
<bean id="marshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
<property name="classesToBeBound" >
<list>
<value>com.app.model.SimpleRoleList</value>
</list>
</property>
<property name="schema" value="classpath:types.xsd"/>
</bean>
com.app.model.SimpleRoleList
和往常一样,我们非常感谢你的帮助
编辑--------------
只有当应用程序部署到Tomcat 6上时才会发生这种情况。我刚刚注意到,在Tomcat的认可文件夹中,我使用的版本比我在应用程序上使用的版本要旧jaxb api.jar和jaxb impl.jar。 有两种方法可以解决这个问题;第一种方法是从认可的文件夹中删除JAR,然后将jaxb添加为项目POM的运行时依赖项:
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>2.2.2</version>
</dependency>
com.sun.xml.bind
jaxb impl
2.2.2
第二种方法是将认可文件夹中的JAR更新为新版本(在我的例子中是版本2.2.2)
这就解决了问题
希望对某人有所帮助。
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-oxm</artifactId>
<version>3.2.6.RELEASE</version>
</dependency>
org.springframework
弹簧oxm
3.2.6.1发布
使用此选项,它将支持u如果删除该修复程序会发生什么?@skaffman:没有,相同的错误。我将删除编辑评论,这样就不会有人感到困惑,因为它显然不相关。你可能也想删除“修复”,那么,这只是分散注意力。