2011-07-07 43 views
2

我正在實現一個正在偵聽JMS隊列以處理包含XML的消息的Spring MessageListenerSpring MessageListener多條消息

我的豆ProposalSOAListener將處理大約5個或更多來自隊列的XML消息。我的代碼如下。

有沒有辦法在這個類上指定不同的方法來處理不同的XML消息?

public class ProposalSOAListener implements MessageListener { 

    public void onMessage(Message message) { 

     if (message instanceof TextMessage) { 
      try { 
       System.out.println(((TextMessage) message).getText()); 
      } catch (JMSException ex) { 
       throw new RuntimeException(ex); 
      } 
     } 
     else { 
      throw new IllegalArgumentException("Message must be of type TextMessage"); 
     } 
    } 

} // end of ProposalSOAListener class 
+0

5條消息的區別是什麼? –

+0

它們都包含有關提案請求的不同有效負載XML消息。示例CreateProposalRequest.xml GetProposalRequest,AddStructuredDataRequest等 –

回答

3

有一堆建築問題懇求您的問題。你想讓這個mesasge監聽器做這個工作,還是把它交給另一個組件?有沒有交易方面的考慮?您是否有內存限制 - 即是否需要基於流式處理的XML處理?做

好消息是,你有很多的東西可以在春季提供給你的難題。

一個簡單的下一步就是使用Spring對象XML編組(OXM),選擇其中一種技術並將編組連接到監聽器bean中。

http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/oxm.html

另一種方法是使用Spring了ApplicationEvent接口,讀取進來過隊列中的消息,並在內部公佈他們的特定類型的聽衆。這可以與上述對象編組結合使用。最後但並非最不重要的一點,如果這是SOAP Web服務 - 你可以看看Spring WS,它使用類似的消息容器來將消息從線路中拉出來,編組它們,然後調用一個spring的ws端點(即。滿足該接口合同的服務接口)。

http://static.springsource.org/spring-ws/sites/2.0/reference/html/server.html#d4e907

+0

哇;這是一口。感謝所有這些信息,我會研究你的建議,以確定哪些是我的案例中最好的。 –

1

Spring Integration project強烈推薦這類的問題。實質上,您必須實現一個jms入站網關來獲取您的消息。然後,您可以將其轉換爲一個對象,然後將消息路由到適當的service-activator組件,該組件可映射到您的實例和方法。