В конечном счете, есть две проблемы, которые необходимо решить:
- Внедрить JAXB и Castor marshaller / unmarshaller
- Определить, когда следует использовать JAXB или Castor
Элемент № 1 - Внедрить JAXB и маршаллер / демаршаллер Castor
org.springframework.ws.server.endpoint.adapter.GenericMarshallingMethodEndpointAdapter имеет одно свойство маршаллера и одно свойство маршаллера.Существует два способа решения этой проблемы:
Вариант № 1 - GenericMarshallingMethodEndpointAdapter подкласса
Вы можете создать подкласс rg.springframework.ws.server.endpoint.adapter.GenericMarshallingMethodEndpointAdapter и введите второго маршаллера - свойство демаршаллера.Затем вы настроите это примерно так:
<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 - Реализация собственного маршаллера
Вы можете реализовать свой собственный маршаллер, которыйJAXB и Кастор осведомлены.Затем настройте его следующим образом:
<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>
Item # 2 - Определите, когда, когда использовать JAXB или Castor
Это может быть труднее решить.Как только вы ознакомите свою конечную точку с JAXB и Castor, вам все равно нужно будет выбрать одну из них для выполнения маршальной операции.Этот аспект может быть легче решить с помощью пользовательского подхода маршаллера, описанного выше.
Для получения дополнительной информации
Ниже приведены инструкции по настройке JAXB с помощью Spring:
Ниже приведены инструкции по настройке Castor (и JAXB):