2016-09-14 77 views
2

我正在處理同時處理來自大量應用程序的SOAP和REST消息的應用程序。我們使用Camel通過SOAP將消息路由到其他位置。我現在有要求根據原始位置對消息採取措施。是否可以確定郵件發送地點的URI?我仍然在學習網絡服務,並且我的Google搜索都沒有給我任何東西。Web服務:如何檢測發送消息的端點

在調試代碼時,我發現Camel Exchange對象中有一個fromEndpoint對象。在我的測試中,我使用了SoapUI。 fromEndpoint對象包含「direct:// MessageName」。當它來自另一臺服務器時,它是否包含正確的信息?如果這是真的,是否可以配置SoapUI來輸入正確的信息?

*附加信息*

的WSDL和決定了消息的格式在別處控制的XSD。他們的變化過程漫長而複雜。 (我們已經有一個請求來對WSDL進行一個簡單的改變,他們說在被批准之前1到2年)。這些消息由許多不同的應用程序生成。是的,這是一場噩夢。所以我們必須想辦法在我們目前擁有的內容中實現它。我真的擔心解決方案可能無法實現。我很難相信,當一條消息傳入時,基礎設施(SOAP和/或REST)無法將其從消息本身放入其中,無法告訴我它來自哪裏。

回答

1

我終於在這裏遇到了我的問題的答案。您可以將一個WebServiceContext注入到Controller對象中。有了這個,你可以獲得HttpServletRequest,從而獲得該事務的遠程主機和遠程地址。

我加

@Resource 
WebServiceContext wsContext; 

要我Controller類。然後添加getServletRequestObject方法

protected HttpServletRequest getServletRequestObject() { 
    MessageContext msgContext = wsContext.getMessageContext(); 
    HttpServletRequest request = (HttpServletRequest) msgContext.get(MessageContext.SERVLET_REQUEST); 
    this.log.info("Request from {} at {}", request.getRemoteHost(), request.getRemoteAddr()); 
    return request; 
} 

當我需要請求信息時,我調用該方法。

它很好用!

0

我建議你添加額外的交換頭或屬性,在發送消息之前將端點名稱放在屬性中。以便它可以在下一個端點中檢索。

+0

這通常是我會做的。然而,接近我的消息格式是由控制組織決定的,並且變更幾乎不可能獲得批准。你知道那是怎麼回事。有時我們在IT方面受到我們最終客戶要求的限制。 – OldGuy

0

我找不到任何可以讓我獲取始發服務器的URL。所以在這一點上,而不是讓問題沒有答案,我用明顯的答案更新它。不,這是不可能的。

相關問題