2016-12-07 2 views
0

나는 Spring 4.1을 기반으로하는 애플리케이션을 가지고있다. XML 구성을 사용하여 JMS Listener를 만들고 들어오는 XML 메시지를 Java Object로 변환하려고합니다. 내가 대상 큐에 메시지를 게시 할 때 리스너의 방법 processMessage()가 호출 나는 점점되지, 지금Spring JMS를 사용할 때 리스너 메소드가 호출되지 않는다.

public class CustomMessageListener{ 
    public void processMessage(Message message, CustomObject object){ 
     //Do Something. 
    } 

:

<jms:listener-container concurrency="10" 
    connection-factory="connectionFactory" 
    message-converter="marshallingMessageConverter"> 
    <jms:listener destination="destination.name" ref="messageListener" method="processMessage"/> 
</jms:listener-container> 

<bean id="messageListener" class="com.example.CustomMessageListener"> 
</bean> 

<bean id="marshallingMessageConverter" class="org.springframework.jms.support.converter.MarshallingMessageConverter"> 
     <property name="marshaller" ref="xmlMarshaller"/> 
     <property name="unmarshaller" ref="xmlMarshaller"/> 
</bean> 

<bean id="xmlMarshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller"> 
    <property name="classesToBeBound" value="com.example.CustomObject"/> 
</bean> 

더 클래스 com.example.CustomMessageListener은 다음과 같습니다 : 다음은 내 XML 구성입니다 난 그냥 CustomObjec을 수용 할 수있는 Listerner 방법의 주장을 변경하는 경우 지금

Failed to invoke target method 'processMessage' with arguments {[email protected]}; 
nested exception is java.lang.NoSuchMethodException: 
com.example.CustomMessageListener.processMessage(com.example.CustomObject). 

: 봄 로그에 다음 오류가 발생하고 t, 그것은 작동 내가 제대로 XML에서 구축 된 CustomObject 수 :

public void processMessage(CustomObject, object) 

그러나 나는 또한 원래 javax.jms.Message 인스턴스와 this 설명서에 따라 필요는 매개 변수를 지정하여 해당 인스턴스를받을 수 있어야한다을 명부.

누군가 나를 도와주세요.

+0

네, 가능 작동합니다 이것을 시도하지만 당신은 청취자 청취자 아닌 XML 정의 버전의 주석 버전에있는 문서를 보면. –

답변

0

<jms:listener-container concurrency="10" connection-factory="connectionFactory" > 
    <jms:listener destination="destination.name" ref="defaultMessageListener" /> 
</jms:listener-container> 

<bean id="messageListener" class="com.example.CustomMessageListener"> 
</bean> 

<bean id="marshallingMessageConverter" class="org.springframework.jms.support.converter.MarshallingMessageConverter"> 
     <property name="marshaller" ref="xmlMarshaller"/> 
     <property name="unmarshaller" ref="xmlMarshaller"/> 
</bean> 

<bean id="xmlMarshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller"> 
    <property name="classesToBeBound" value="com.example.CustomObject"/> 
</bean> 

<bean id="payloadArgumentResolver" class="org.springframework.messaging.handler.annotation.support.PayloadArgumentResolver"> 
    <property name="converter" ref="marshallingMessageConverter"/> 
</bean> 

<bean id="handlerMethod" class="org.springframework.messaging.handler.invocation.InvocableHandlerMethod"> 
    <constructor-arg 
     ref="messageListener" index="0"/> 
    <constructor-arg 
     value="processMessage" index="1"/> 
    <constructor-arg 
     value="javax.jms.Message" type="java.lang.Class" index="2"/> 
    <constructor-arg 
     value="com.example.CustomObject" type="java.lang.Class" index="3"/> 
    <property name="argumentResolvers" ref="payloadArgumentResolver" /> 
</bean> 

<bean id="defaultMessageListener" class="org.springframework.jms.listener.adapter.MessagingMessageListenerAdapter"> 
    <property name="handlerMethod" ref="handlerMethod" /> 
</bean> 
+0

Nope. 나는 똑같은 오류가있다. MessageHandlerMethodFactory를 사용해야합니까? 위에서 언급 한 문서가 필수 사항을 말하지는 않지만; 그러나 그것에 관한 언급이있다. 나는 그것을 사용하는 방법을 모르고있다. – Sudhanva

+0

주석에서 언급했듯이, 문서는 XML 구동 버전이 아닌'@ JmsListener'에 대한 것입니다. –

+0

@ M.Deinum 알겠습니다. [This] (http://docs.spring.io/spring/docs/4.1.x/spring-framework-reference/html/jms.html#jms-namespace)는 내가 따라 가려고하는 것과 동일한 효과를 느꼈습니다. 주석을 얻을 수 있기 때문입니다. XML 설정을 사용하여이를 달성 할 수있는 방법이 있습니까? – Sudhanva