2016-09-27 121 views
0

我有一個駱駝路由配置爲從JMS隊列讀取並將其發佈到服務。 我的路線是:使用Camel發出POST請求

from("jms:queue") 
.marshal() 
.json(JsonLibrary.GSON) 
.setHeader(Exchange.CONTENT_TYPE,constant("application/json")) 
.setHeader(Exchange.HTTP_METHOD, constant("POST")) 
.process(new Processor1()) 
.to("https4:xxxxxx?throwExceptionOnFailure=false") 
.process(new MyProcessor()) 

我的配置:

HttpComponent httpc = getContext().getComponent("http4",HttpComponent.class); 
httpc.setHttpConfiguaration(customHttpConfig()) 

和customHttpConfig設置我的身份驗證信息。

我從服務器收到400錯誤。但是我能夠從Postman API中打開服務器並獲得成功響應。

在我的Processor1類(發出請求之前)中,我能夠打印郵件正文,其中包含我的對象的json表示。

但在POST請求後的處理器,我這樣做並獲得如下對策:

Message in = exchange.getIn(); 
in.getBody(String.class); // print the error code 400 
HttpServletRequest request = in.getBody(HttpServletRequest.class)// This is null. 

什麼,我做錯了什麼?我是否需要將郵件內容設置爲我的發佈請求的正文?

+0

A 400意味着錯誤的請求。所以這意味着您的請求消息或您的URI是錯誤的。服務器日誌是否顯示您的請求已發送並且看起來正確?關於服務器收到的標題呢? –

+0

我無法訪問服務器日誌。正如我所提到的,我從exchange.in獲得的請求對象爲null。 –

+0

這是來自服務器的響應,如果你的意思是400錯誤的請求?最簡單的可能是設置自己的本地服務器並首先進行測試。通過這種方式,您可以在進行集成測試之前準確查看接收到的標題以及機構的外觀。這裏是一個簡單的服務器玩http://tinyserver.sourceforge.net/ –

回答

0

這不會是String.class

in.getBody(String.class); 

首先檢查服務器響應的類型,然後嘗試打印或登錄交換體。

應當HttpServletResponse

HttpServletRequest request = in.getBody(HttpServletRequest.class) 
+0

它可以是字符串類型。請檢查這一點。 http://camel.apache.org/using-getin-or-getout-methods-on-exchange.html。我可以通過將其轉換爲字符串來打印響應。 –

+0

也爲第二部分,這個stackoverflow問題指出如何使用httprequest對象.. http://stackoverflow.com/questions/19976812/how-to-dump-http-body-and-headers-sent-with-http-部件與 - Apache的駱駝 –