Mule如何使jms出站端点使用ObjectMessage而不是StreamMessage

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

我有一个带有自定义拦截器的Mule流,它构造一个对象并将其转发到JMS outboud端点。JMS端点在尝试将对象转换为JMS StreamMessage时引发异常。我希望端点将对象转换为JMS ObjectMessage。那怎么办

这是我的流程

<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
创建您自己的JMS
ObjectMessage
,以创建您自己风格的
ObjectToJMSMessage
,该消息将调用
JmsMessageUtils.serializableToMessage
,用于
请求
类型的有效负载,为什么要使用拦截器?是否希望潜在地阻止流保持其执行?拦截器返回的类型是什么?它是否实现了可序列化?是的,有时我不需要请求附加信息。拦截器创建一个请求实现可序列化的对象。我已经序列化了对象并发送了字节,我认为字节创建了ByteMessage,但是服务器实现者告诉我他的代码将只接受ObjectMessage。服务器实现者很差劲:)
ObjectMessage
s依赖Java序列化,因此紧密耦合,这在消息传递环境中是不需要的。根据源代码,如果Mule消息负载是可序列化的(而不是列表或字符串),Mule将自动创建一个
ObjectMessage
,而无需手动配置任何转换器…完全!不要再看了:这个类是一个
列表
,所以Mule将它序列化为一个
流消息
。不幸的是,这种行为是在一个静态类中,因此很难与另一个类交换。从代码或子类
AbstractJmsTransformer
创建自己的JMS ObjectMessage,以创建自己风格的
ObjectToJMSMessage
,该消息将调用
JmsMessageUtils.serializableToMessage
,用于
请求类型的有效负载。