我们正在尝试为我们的webservice项目实现一个JAXB2Marshaller,但我们在类 javax.activation.DataHandler 上得到一个 java.lang.NoClassDefFoundError ,但是依赖存在激活工件,我们已经验证了activation.jar实际上已被部署,所以这是由其他原因造成的。
以下是应用配置:
<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>
一如既往,非常感谢帮助。
EDIT --------------
只有在将应用程序部署到Tomcat 6时才会发生这种情况。
答案 0 :(得分:1)
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-oxm</artifactId>
<version>3.2.6.RELEASE</version>
</dependency>
使用它会支持你
答案 1 :(得分:0)
我刚注意到Tomcat的背书文件夹上的旧版本 jaxb-api.jar 和 jaxb-impl.jar 比我在应用程序上使用的版本要多。 解决这个问题有两种方法;第一个是从endorsed文件夹中删除jar,然后将jaxb添加为项目POM的运行时依赖项:
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>2.2.2</version>
</dependency>
第二个是将更新版本的背书文件夹上的jar更新(在我的情况下是2.2.2版本)。
修正了它。
希望它对某人有帮助。