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