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";);
             }
         };
     }


Reply via email to