Spring WS with JAXB2Marshaller - javax.activation.DataHandler NoClassDefFoundError

时间:2011-05-10 19:31:11

标签: jaxb spring-ws

我们正在尝试为我们的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时才会发生这种情况。

2 个答案:

答案 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版本)。

修正了它。

希望它对某人有帮助。