使用javax.xml.bind.JAXBElement将PayloadTypeRouter与Spring集成

时间:2013-07-15 16:59:24

标签: routing spring-integration jaxb2 payload

什么是基于javax.xml.bind.JAXBElement的有效负载类型路由的最佳路由解决方案?这是我目前的配置。

<oxm:jaxb2-marshaller id="wsMarshaller" contextPath="com.test.conn.ws.domain"/>

<int:channel id="jaxbInputChannel" />

<int-ws:inbound-gateway id="wsInboundMarsellingGateway"
    request-channel="jaxbInputChannel" marshaller="wsMarshaller" unmarshaller="wsMarshaller" />

<int:service-activator input-channel="jaxbInputChannel">
<bean class="com.test.conn.application.AImpl" />

<int:service-activator input-channel="jaxbInputChannel">
<bean class="com.test.conn.application.BImpl" />

AImpl和BImpl中收到的有效负载类型是javax.xml.bind.JAXBElement和javax.xml.bind.JAXBElement。但是当我使用soapUI来调用B请求时,它会调用AImpl。有更多的服务激活器(对于不同的有效载荷类型),更多的混淆是要调用哪个服务激活器。

所以决定通过添加 PayloadTypeRouter 来解决这个问题,但是问题是如何为类型 javax.xml.bind.JAXBElement,javax.xml.bind.JAXBElement定义它等。

我希望有一个简单的解决方案,使用SpEL(或其他直接的方式)而不是在前面添加一个变换器来获取请求getValue ..任何建议都会有很大的帮助。

感谢。


如前文所述,我继续使用PayloadTypeRouter,变换器实现。我打了另一个路障。

<int:transformer input-channel="jaxbInputChannel" output-channel="jaxbRoutingChannel"  >
    <bean class="com.test.conn.transformer.ConnTransformer" />
</int:transformer>

<int:payload-type-router input-channel="jaxbRoutingChannel"  >
    <int:mapping type="com.test.conn.ws.domain.A" channel="aInputChannel" />
    <int:mapping type="com.test.conn.ws.domain.B" channel="bInputChannel" />
</int:payload-type-router>

以下是我收到的错误消息。

  

引起:org.springframework.expression.spel.SpelEvaluationException:EL1004E:(pos 8):方法调用:在com.sun.proxy上找不到方法测试(com.test.conn.ws.domain.A) 。$ Proxy40类型

我很困惑。为什么spring会在com.test.conn.ws.domain.A实例中查看service activator方法?

0 个答案:

没有答案