Author: ningjiang
Date: Thu Sep 25 02:36:20 2008
New Revision: 698897
URL: http://svn.apache.org/viewvc?rev=698897&view=rev
Log:
CAMEL-807 use fault message to store the response when the response code != 200
Modified:
activemq/camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpProducer.java
activemq/camel/trunk/components/camel-http/src/test/java/org/apache/camel/component/http/HttpPostWithBodyTest.java
Modified:
activemq/camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpProducer.java
URL:
http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpProducer.java?rev=698897&r1=698896&r2=698897&view=diff
==============================================================================
---
activemq/camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpProducer.java
(original)
+++
activemq/camel/trunk/components/camel-http/src/main/java/org/apache/camel/component/http/HttpProducer.java
Thu Sep 25 02:36:20 2008
@@ -71,17 +71,22 @@
}
// lets store the result in the output message.
- Message out = exchange.getOut(true);
try {
+ Message answer = null;
int responseCode = httpClient.executeMethod(method);
- out.setHeaders(in.getHeaders());
- out.setHeader(HTTP_RESPONSE_CODE, responseCode);
+ if (responseCode == 200) {
+ answer = exchange.getOut(true);
+ } else {
+ answer = exchange.getFault(true);
+ }
+ answer.setHeaders(in.getHeaders());
+ answer.setHeader(HTTP_RESPONSE_CODE, responseCode);
LoadingByteArrayOutputStream bos = new
LoadingByteArrayOutputStream();
InputStream is = method.getResponseBodyAsStream();
IOUtils.copy(is, bos);
bos.flush();
is.close();
- out.setBody(bos.createInputStream());
+ answer.setBody(bos.createInputStream());
// propagate HTTP response headers
Header[] headers = method.getResponseHeaders();
@@ -89,7 +94,7 @@
String name = header.getName();
String value = header.getValue();
if (strategy != null &&
!strategy.applyFilterToExternalHeaders(name, value)) {
- out.setHeader(name, value);
+ answer.setHeader(name, value);
}
}
} finally {
Modified:
activemq/camel/trunk/components/camel-http/src/test/java/org/apache/camel/component/http/HttpPostWithBodyTest.java
URL:
http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-http/src/test/java/org/apache/camel/component/http/HttpPostWithBodyTest.java?rev=698897&r1=698896&r2=698897&view=diff
==============================================================================
---
activemq/camel/trunk/components/camel-http/src/test/java/org/apache/camel/component/http/HttpPostWithBodyTest.java
(original)
+++
activemq/camel/trunk/components/camel-http/src/test/java/org/apache/camel/component/http/HttpPostWithBodyTest.java
Thu Sep 25 02:36:20 2008
@@ -23,6 +23,7 @@
import org.apache.camel.ContextTestSupport;
import org.apache.camel.Exchange;
import org.apache.camel.Message;
+import org.apache.camel.Processor;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.mock.MockEndpoint;
@@ -32,35 +33,42 @@
public class HttpPostWithBodyTest extends ContextTestSupport {
protected String expectedText = "<html";
- public void testHttpGet() throws Exception {
- MockEndpoint mockEndpoint = resolveMandatoryEndpoint("mock:results",
MockEndpoint.class);
- mockEndpoint.expectedMinimumMessageCount(1);
- sendBody("direct:start", "q=test1234");
- mockEndpoint.assertIsSatisfied();
- List<Exchange> list = mockEndpoint.getReceivedExchanges();
- Exchange exchange = list.get(0);
- assertNotNull("exchange", exchange);
+ public void testHttpPostWithError() throws Exception {
+
+ Exchange exchange = template.send("direct:start", new Processor() {
+
+ public void process(Exchange exchange) throws Exception {
+ exchange.getIn().setBody("q=test1234");
+ }
- Message in = exchange.getIn();
- assertNotNull("in", in);
+ });
- Map<String, Object> headers = in.getHeaders();
+ assertNotNull("exchange", exchange);
+ assertTrue("The exchange should be failed", exchange.isFailed());
+
+ // get the fault message
+ Message fault = exchange.getFault();
+ assertNotNull("fault", fault);
+ Map<String, Object> headers = fault.getHeaders();
log.debug("Headers: " + headers);
assertTrue("Should be more than one header but was: " + headers,
headers.size() > 0);
- String body = in.getBody(String.class);
+ int responseCode = fault.getHeader(HttpProducer.HTTP_RESPONSE_CODE,
Integer.class);
+ assertTrue("The response code should not be 200", responseCode != 200);
+
+ String body = fault.getBody(String.class);
log.debug("Body: " + body);
assertNotNull("Should have a body!", body);
assertTrue("body should contain: " + expectedText,
body.contains(expectedText));
+
}
@Override
protected RouteBuilder createRouteBuilder() throws Exception {
return new RouteBuilder() {
public void configure() {
- from("direct:start").setHeader(HTTP_METHOD,
POST).to("http://www.google.com")
- .to("mock:results");
+ from("direct:start").setHeader(HTTP_METHOD,
POST).to("http://www.google.com");
}
};
}