2013-03-12 2 views
1

오브젝트를 생성하고이를 JMS 아웃 바운드 엔드 포인트로 전달하는 사용자 정의 인터셉터와 함께 뮬 플로우가 있습니다. JMS 엔드 포인트가 오브젝트를 JMS StreamMessage로 변환하려고 시도하는 예외를 발생시킵니다. 필자가 원하는 것은 엔드 포인트가 Object를 JMS ObjectMessage로 변환하는 것입니다. 그게 어떻게 끝날까요?Mule StreamMessage 대신 ObjectMessage를 사용하기 위해 jms 아웃 바운드 엔드 포인트를 작성하는 방법

여기가 내 흐름입니다.

<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> 

또한 JMS Message Transformer에 객체 추가를 시도했습니다.

<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"/> 
+0

요격기를 사용하는 이유는 무엇입니까? 흐름의 실행을 중단시킬 가능성이 있습니까? –

+0

또한 인터셉터에서 반환하는 유형은 무엇입니까? 'Serializable'을 구현합니까? –

+0

예, 추가 정보를 요청할 필요가없는 경우가 있습니다. 인터셉터는 Request의 객체를 생성하여 Serializable을 구현합니다. 개체를 serialize하고 BytesMessage를 만든 것으로 추정되는 바이트를 보냈지 만 서버 구현자는 그의 코드가 ObjectMessage 만 받아 들일 것이라고 말합니다. – CAB

답변

0

Request extends LinkedList<RequestId> implements Serializable 때문에, 뮬 자동으로 StreamMessage이 형식을 변환합니다.

불행히도이 동작은 정적 클래스이므로 다른 것과 교환하기가 어렵습니다. 코드에서 자신의 JMS ObjectMessage을 작성하거나 AbstractJmsTransformer 서브 클래스를 작성하여 Request 페이로드의 경우 JmsMessageUtils.serializableToMessage을 호출하는 ObjectToJMSMessage의 고유 한 향미료를 작성하십시오.