我需要使用两个不同的marshallers,通常是JaxbMarshaller和CastorMarshaller。 我有一个包含大量集成模块的spring项目。
<bean id="marshaller" class="org.springframework.oxm.castor.CastorMarshaller">
<property name="mappingLocation">
<value>classpath:config/service/mapping.xml</value>
</property>
</bean>
<bean
class="org.springframework.ws.server.endpoint.adapter.GenericMarshallingMethodEndpointAdapter">
<property name="marshaller" ref="marshaller" />
<property name="unmarshaller" ref="marshaller" />
</bean>
我还将此添加到我的端点,为其提供JaxbMarshaller,但它没有得到它
public class MyEndPoint extends AbstractMarshallingPayloadEndpoint
我需要同时使用JaxbMarshaller和CastorMarshaller
答案 0 :(得分:2)
最终有两个问题需要解决:
项目#1 - 注入JAXB和Castor marshaller / unmarshaller
org.springframework.ws.server.endpoint.adapter.GenericMarshallingMethodEndpointAdapter 只有一个marshaller属性和一个unmarshaller属性。可能有两种方法可以解决这个问题:
选项#1 - 子类GenericMarshallingMethodEndpointAdapter
您可以继承rg.springframework.ws.server.endpoint.adapter.GenericMarshallingMethodEndpointAdapter,并引入第二个marshaller和unmarshaller属性。然后你将配置如下:
<bean id="jaxbMarshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
<property name="contextPath" value="com.example"/>
</bean>
<bean id="castorMarshaller" class="org.springframework.oxm.castor.CastorMarshaller">
<property name="mappingLocation">
<value>classpath:config/service/mapping.xml</value>
</property>
</bean>
<bean
class="your.domain.YourGenericMarshallingMethodEndpointAdapter">
<property name="marshaller" ref="jaxbMarshaller" />
<property name="unmarshaller" ref="jaxbMarshaller" />
<property name="castorMarshaller" ref="castorMarshaller" />
<property name="castorMarshaller" ref="castorMarshaller" />
</bean>
选项#2 - 实施您自己的Marshaller
您可以实现自己的marshaller,它同时支持JAXB和Castor。然后配置它:
<bean id="marshaller" class="your.domain.CustomMarshaller">
<property name="contextPath" value="com.example"/>
<property name="mappingLocation">
<value>classpath:config/service/mapping.xml</value>
</property>
</bean>
<bean
class="org.springframework.ws.server.endpoint.adapter.GenericMarshallingMethodEndpointAdapter">
<property name="marshaller" ref="marshaller" />
<property name="unmarshaller" ref="marshaller" />
</bean>
第2项 - 确定何时使用JAXB或Castor
这可能是更难解决的问题。一旦使端点知道JAXB和Castor,您仍然需要选择一个来执行编组操作。使用上述自定义编组方法可以更容易地解决这个问题。
了解更多信息
以下是使用Spring配置JAXB的说明:
以下包含有关配置Castor(和JAXB)的说明:
答案 1 :(得分:0)
我以死胡同结束我省略了JAXB,我只使用了Castor。