Author: davsclaus
Date: Wed Dec  3 05:15:57 2008
New Revision: 722878

URL: http://svn.apache.org/viewvc?rev=722878&view=rev
Log:
CAMEL-1140: MinaProducer now throws CamelExchangeException if no message 
received from remote server when sync=true

Added:
    
activemq/camel/trunk/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaNoResponseFromServerTest.java
   (contents, props changed)
      - copied, changed from r722791, 
activemq/camel/trunk/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaCustomCodecTest.java
Modified:
    
activemq/camel/trunk/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaProducer.java
    
activemq/camel/trunk/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaCustomCodecTest.java
    
activemq/camel/trunk/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaProducerShutdownMockTest.java
    
activemq/camel/trunk/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaProducerShutdownTest.java
    
activemq/camel/trunk/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaTcpTest.java
    
activemq/camel/trunk/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaTcpTextlineDelimiterTest.java
    
activemq/camel/trunk/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaTcpTextlineProtocolTest.java

Modified: 
activemq/camel/trunk/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaProducer.java
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaProducer.java?rev=722878&r1=722877&r2=722878&view=diff
==============================================================================
--- 
activemq/camel/trunk/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaProducer.java
 (original)
+++ 
activemq/camel/trunk/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaProducer.java
 Wed Dec  3 05:15:57 2008
@@ -24,6 +24,7 @@
 import org.apache.camel.Exchange;
 import org.apache.camel.ExchangeTimedOutException;
 import org.apache.camel.Producer;
+import org.apache.camel.CamelExchangeException;
 import org.apache.camel.impl.DefaultProducer;
 import org.apache.camel.util.ExchangeHelper;
 import org.apache.commons.logging.Log;
@@ -50,7 +51,6 @@
     private IoConnector connector;
     private boolean sync;
 
-    @SuppressWarnings({"unchecked"})
     public MinaProducer(MinaEndpoint endpoint) {
         super(endpoint);
         this.endpoint = endpoint;
@@ -82,7 +82,11 @@
         if (sync) {
             // only initialize latch if we should get a response
             latch = new CountDownLatch(1);
+            // reset handler if we expect a response
+            ResponseHandler handler = (ResponseHandler) session.getHandler();
+            handler.reset();
         }
+
         // write the body
         if (LOG.isDebugEnabled()) {
             LOG.debug("Writing body: " + body);
@@ -101,6 +105,9 @@
             ResponseHandler handler = (ResponseHandler) session.getHandler();
             if (handler.getCause() != null) {
                 throw new CamelException("Response Handler had an exception", 
handler.getCause());
+            } else if (!handler.isMessageRecieved()) {
+                // no message received
+                throw new CamelExchangeException("No response received from 
remote server: " + endpoint.getEndpointUri(), exchange);
             } else {
                 // set the result on either IN or OUT on the original exchange 
depending on its pattern
                 if (ExchangeHelper.isOutCapable(exchange)) {
@@ -165,18 +172,26 @@
         private MinaEndpoint endpoint;
         private Object message;
         private Throwable cause;
+        private boolean messageRecieved;
 
         private ResponseHandler(MinaEndpoint endpoint) {
             this.endpoint = endpoint;
         }
 
+        public void reset() {
+            this.message = null;
+            this.cause = null;
+            this.messageRecieved = false;
+        }
+
         @Override
         public void messageReceived(IoSession ioSession, Object message) 
throws Exception {
             if (LOG.isDebugEnabled()) {
                 LOG.debug("Message received: " + message);
             }
-            cause = null;
             this.message = message;
+            messageRecieved = true;
+            cause = null;
             countDown();
         }
 
@@ -205,6 +220,7 @@
             LOG.error("Exception on receiving message from address: " + 
this.endpoint.getAddress()
                     + " using connector: " + this.endpoint.getConnector(), 
cause);
             this.message = null;
+            this.messageRecieved = false;
             this.cause = cause;
             if (ioSession != null) {
                 ioSession.close();
@@ -218,6 +234,10 @@
         public Object getMessage() {
             return this.message;
         }
+
+        public boolean isMessageRecieved() {
+            return messageRecieved;
+        }
     }
 
 }

Modified: 
activemq/camel/trunk/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaCustomCodecTest.java
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaCustomCodecTest.java?rev=722878&r1=722877&r2=722878&view=diff
==============================================================================
--- 
activemq/camel/trunk/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaCustomCodecTest.java
 (original)
+++ 
activemq/camel/trunk/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaCustomCodecTest.java
 Wed Dec  3 05:15:57 2008
@@ -41,7 +41,7 @@
         mock.expectedMessageCount(1);
         mock.expectedBodiesReceived("Bye World");
 
-        template.sendBody(uri, "Hello World");
+        template.requestBody(uri, "Hello World");
 
         mock.assertIsSatisfied();
     }
@@ -64,7 +64,7 @@
     protected RouteBuilder createRouteBuilder() throws Exception {
         return new RouteBuilder() {
             public void configure() throws Exception {
-                from(uri).to("mock:result");
+                from(uri).transform(constant("Bye World")).to("mock:result");
             }
         };
     }
@@ -75,8 +75,9 @@
             return new ProtocolEncoder() {
                 public void encode(IoSession ioSession, Object message, 
ProtocolEncoderOutput out)
                     throws Exception {
-                    ByteBuffer bb = ByteBuffer.allocate(9).setAutoExpand(true);
-                    bb.put("Bye World".getBytes());
+                    ByteBuffer bb = 
ByteBuffer.allocate(32).setAutoExpand(true);
+                    String s = (String) message;
+                    bb.put(s.getBytes());
                     bb.flip();
                     out.write(bb);
                 }

Copied: 
activemq/camel/trunk/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaNoResponseFromServerTest.java
 (from r722791, 
activemq/camel/trunk/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaCustomCodecTest.java)
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaNoResponseFromServerTest.java?p2=activemq/camel/trunk/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaNoResponseFromServerTest.java&p1=activemq/camel/trunk/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaCustomCodecTest.java&r1=722791&r2=722878&rev=722878&view=diff
==============================================================================
--- 
activemq/camel/trunk/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaCustomCodecTest.java
 (original)
+++ 
activemq/camel/trunk/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaNoResponseFromServerTest.java
 Wed Dec  3 05:15:57 2008
@@ -17,7 +17,8 @@
 package org.apache.camel.component.mina;
 
 import org.apache.camel.ContextTestSupport;
-import org.apache.camel.ResolveEndpointFailedException;
+import org.apache.camel.CamelExchangeException;
+import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.impl.JndiRegistry;
@@ -30,29 +31,25 @@
 import org.apache.mina.filter.codec.ProtocolEncoderOutput;
 
 /**
- * Unit test with custom codec.
+ * Unit test to test what happens if remote server closes session but doesn't 
reply
  */
-public class MinaCustomCodecTest extends ContextTestSupport {
+public class MinaNoResponseFromServerTest extends ContextTestSupport {
 
     private String uri = "mina:tcp://localhost:11300?sync=true&codec=myCodec";
 
-    public void testMyCodec() throws Exception {
+    public void testNoResponse() throws Exception {
         MockEndpoint mock = getMockEndpoint("mock:result");
-        mock.expectedMessageCount(1);
-        mock.expectedBodiesReceived("Bye World");
+        mock.expectedMessageCount(0);
 
-        template.sendBody(uri, "Hello World");
-
-        mock.assertIsSatisfied();
-    }
-
-    public void testBadConfiguration() throws Exception {
         try {
-            
template.sendBody("mina:tcp://localhost:11300?sync=true&codec=XXX", "Hello 
World");
-            fail("Should have thrown a ResolveEndpointFailedException");
-        } catch (ResolveEndpointFailedException e) {
-            // ok
+            template.requestBody(uri, "Hello World");
+            fail("Should throw a CamelExchangeException");
+        } catch (RuntimeCamelException e) {
+            assertIsInstanceOf(CamelExchangeException.class, e.getCause());
+            assertTrue(e.getCause().getMessage().startsWith("No response 
received from remote server"));
         }
+
+        mock.assertIsSatisfied();
     }
 
     protected JndiRegistry createRegistry() throws Exception {
@@ -64,7 +61,7 @@
     protected RouteBuilder createRouteBuilder() throws Exception {
         return new RouteBuilder() {
             public void configure() throws Exception {
-                from(uri).to("mock:result");
+                from(uri).transform(constant("Bye World")).to("mock:result");
             }
         };
     }
@@ -75,10 +72,8 @@
             return new ProtocolEncoder() {
                 public void encode(IoSession ioSession, Object message, 
ProtocolEncoderOutput out)
                     throws Exception {
-                    ByteBuffer bb = ByteBuffer.allocate(9).setAutoExpand(true);
-                    bb.put("Bye World".getBytes());
-                    bb.flip();
-                    out.write(bb);
+                    // close session instead of returning a reply
+                    ioSession.close();
                 }
 
                 public void dispose(IoSession ioSession) throws Exception {
@@ -92,8 +87,8 @@
             return new ProtocolDecoder() {
                 public void decode(IoSession ioSession, ByteBuffer in,
                                    ProtocolDecoderOutput out) throws Exception 
{
-                    in.acquire();
-                    out.write(in);
+                    // close session instead of returning a reply
+                    ioSession.close();
                 }
 
                 public void finishDecode(IoSession ioSession, 
ProtocolDecoderOutput protocolDecoderOutput)
@@ -108,4 +103,4 @@
         }
     }
 
-}
+}
\ No newline at end of file

Propchange: 
activemq/camel/trunk/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaNoResponseFromServerTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
activemq/camel/trunk/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaNoResponseFromServerTest.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Propchange: 
activemq/camel/trunk/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaNoResponseFromServerTest.java
------------------------------------------------------------------------------
    svn:mergeinfo = 

Modified: 
activemq/camel/trunk/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaProducerShutdownMockTest.java
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaProducerShutdownMockTest.java?rev=722878&r1=722877&r2=722878&view=diff
==============================================================================
--- 
activemq/camel/trunk/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaProducerShutdownMockTest.java
 (original)
+++ 
activemq/camel/trunk/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaProducerShutdownMockTest.java
 Wed Dec  3 05:15:57 2008
@@ -35,13 +35,12 @@
  */
 public class MinaProducerShutdownMockTest extends ContextTestSupport {
 
-    private static final String URI = 
"mina:tcp://localhost:6321?textline=true";
+    private static final String URI = 
"mina:tcp://localhost:6321?textline=true&sync=false";
 
     public void testProducerShutdownTestingWithMock() throws Exception {
         MockEndpoint mock = getMockEndpoint("mock:result");
         mock.expectedBodiesReceived("Hello World");
 
-
         // create our mock and record expected behavior = that worker timeout 
should be set to 0
         SocketConnector mockConnector = createMock(SocketConnector.class);
         mockConnector.setWorkerTimeout(0);

Modified: 
activemq/camel/trunk/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaProducerShutdownTest.java
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaProducerShutdownTest.java?rev=722878&r1=722877&r2=722878&view=diff
==============================================================================
--- 
activemq/camel/trunk/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaProducerShutdownTest.java
 (original)
+++ 
activemq/camel/trunk/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaProducerShutdownTest.java
 Wed Dec  3 05:15:57 2008
@@ -30,7 +30,7 @@
  */
 public class MinaProducerShutdownTest {
 
-    private static final String URI = 
"mina:tcp://localhost:6321?textline=true";
+    private static final String URI = 
"mina:tcp://localhost:6321?textline=true&sync=false";
     private long start;
 
     private CamelContext context;

Modified: 
activemq/camel/trunk/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaTcpTest.java
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaTcpTest.java?rev=722878&r1=722877&r2=722878&view=diff
==============================================================================
--- 
activemq/camel/trunk/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaTcpTest.java
 (original)
+++ 
activemq/camel/trunk/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaTcpTest.java
 Wed Dec  3 05:15:57 2008
@@ -22,7 +22,7 @@
 public class MinaTcpTest extends MinaVmTest {
     @Override
     protected void setUp() throws Exception {
-        uri = "mina:tcp://localhost:6123";
+        uri = "mina:tcp://localhost:6123?sync=false";
         super.setUp();
     }
 }

Modified: 
activemq/camel/trunk/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaTcpTextlineDelimiterTest.java
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaTcpTextlineDelimiterTest.java?rev=722878&r1=722877&r2=722878&view=diff
==============================================================================
--- 
activemq/camel/trunk/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaTcpTextlineDelimiterTest.java
 (original)
+++ 
activemq/camel/trunk/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaTcpTextlineDelimiterTest.java
 Wed Dec  3 05:15:57 2008
@@ -22,7 +22,7 @@
 public class MinaTcpTextlineDelimiterTest extends MinaVmTest {
     @Override
     protected void setUp() throws Exception {
-        uri = "mina:tcp://localhost:6124?textline=true&textlineDelimiter=UNIX";
+        uri = 
"mina:tcp://localhost:6124?sync=false&textline=true&textlineDelimiter=UNIX";
         super.setUp();
     }
 }
\ No newline at end of file

Modified: 
activemq/camel/trunk/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaTcpTextlineProtocolTest.java
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaTcpTextlineProtocolTest.java?rev=722878&r1=722877&r2=722878&view=diff
==============================================================================
--- 
activemq/camel/trunk/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaTcpTextlineProtocolTest.java
 (original)
+++ 
activemq/camel/trunk/components/camel-mina/src/test/java/org/apache/camel/component/mina/MinaTcpTextlineProtocolTest.java
 Wed Dec  3 05:15:57 2008
@@ -22,7 +22,7 @@
 public class MinaTcpTextlineProtocolTest extends MinaVmTest {
     @Override
     protected void setUp() throws Exception {
-        uri = "mina:tcp://localhost:6124?textline=true";
+        uri = "mina:tcp://localhost:6124?textline=true&sync=false";
         super.setUp();
     }
 }


Reply via email to