Mule如何使jms出站端点使用ObjectMessage而不是StreamMessage
我有一个带有自定义拦截器的Mule流,它构造一个对象并将其转发到JMS outboud端点。JMS端点在尝试将对象转换为JMS StreamMessage时引发异常。我希望端点将对象转换为JMS ObjectMessage。那怎么办 这是我的流程Mule如何使jms出站端点使用ObjectMessage而不是StreamMessage,mule,mule-studio,Mule,Mule Studio,我有一个带有自定义拦截器的Mule流,它构造一个对象并将其转发到JMS outboud端点。JMS端点在尝试将对象转换为JMS StreamMessage时引发异常。我希望端点将对象转换为JMS ObjectMessage。那怎么办 这是我的流程 <spring:beans> <spring:bean id="connectionFactoryFactory" name="connectionFactoryFactory" class="Connecti
<spring:beans>
<spring:bean id="connectionFactoryFactory" name="connectionFactoryFactory"
class="ConnectionFactoryFactory">
<spring:property name="properties">
<spring:props>
<spring:prop key="imqAddressList">mqtcp://localhost:30001/jms</spring:prop>
<spring:prop key="imqReconnectAttempts">-1</spring:prop>
</spring:props>
</spring:property>
</spring:bean>
<spring:bean id="connectionFactory" name="connectionFactory"
factory-bean="connectionFactoryFactory" factory-method="createConnectionFactory" />
</spring:beans>
<jms:connector name="JMSConnector" connectionFactory-ref="connectionFactory"
specification="1.1" doc:name="JMS" />
<flow name="Request" doc:name="Request">
<quartz:inbound-endpoint responseTimeout="10000"
doc:name="InfoRequest" jobName="InfoRequest" repeatInterval="5000">
<quartz:event-generator-job />
</quartz:inbound-endpoint>
<custom-interceptor class="StateRequest"/>
<jms:outbound-endpoint connector-ref="JMSConnector"
doc:name="JMS" topic="requests"/>
</flow>
mqtcp://localhost:30001/jms
-1
我还尝试向JMS消息转换器添加一个对象
<jms:object-to-jmsmessage-transformer returnClass="javax.jms.ObjectMessage" name="Object_to_JmsMessage" doc:name="Object to JmsMessage"/>
<jms:outbound-endpoint connector-ref="JMSConnector"
doc:name="JMS" topic="requests" transformer-refs="Object_to_JmsMessage"/>
由于
请求扩展LinkedList实现可序列化
,Mule将自动将此类型转换为流消息
不幸的是,这种行为是在一个静态类中,因此很难与另一个类交换。从code或subclass
AbstractJmsTransformer
创建您自己的JMSObjectMessage
,以创建您自己风格的ObjectToJMSMessage
,该消息将调用JmsMessageUtils.serializableToMessage
,用于请求
类型的有效负载,为什么要使用拦截器?是否希望潜在地阻止流保持其执行?拦截器返回的类型是什么?它是否实现了可序列化?是的,有时我不需要请求附加信息。拦截器创建一个请求实现可序列化的对象。我已经序列化了对象并发送了字节,我认为字节创建了ByteMessage,但是服务器实现者告诉我他的代码将只接受ObjectMessage。服务器实现者很差劲:)ObjectMessage
s依赖Java序列化,因此紧密耦合,这在消息传递环境中是不需要的。根据源代码,如果Mule消息负载是可序列化的(而不是列表或字符串),Mule将自动创建一个ObjectMessage
,而无需手动配置任何转换器…完全!不要再看了:这个类是一个列表
,所以Mule将它序列化为一个流消息
。不幸的是,这种行为是在一个静态类中,因此很难与另一个类交换。从代码或子类AbstractJmsTransformer
创建自己的JMS ObjectMessage,以创建自己风格的ObjectToJMSMessage
,该消息将调用JmsMessageUtils.serializableToMessage
,用于请求类型的有效负载。