You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by js...@apache.org on 2008/03/04 15:09:55 UTC
svn commit: r633479 - in /activemq/camel/trunk/camel-core/src:
main/java/org/apache/camel/builder/xml/
main/java/org/apache/camel/component/dataset/
test/java/org/apache/camel/component/dataset/
Author: jstrachan
Date: Tue Mar 4 06:09:54 2008
New Revision: 633479
URL: http://svn.apache.org/viewvc?rev=633479&view=rev
Log:
improvements to the DataSet support so its easier to create your own custom DataSet
Added:
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/dataset/DataSetSupport.java (with props)
activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/component/dataset/CustomDataSetTest.java
- copied, changed from r633440, activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/component/dataset/DataSetTest.java
Modified:
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/xml/XPathBuilder.java
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/dataset/DataSet.java
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/dataset/DataSetEndpoint.java
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/dataset/SimpleDataSet.java
Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/xml/XPathBuilder.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/xml/XPathBuilder.java?rev=633479&r1=633478&r2=633479&view=diff
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/xml/XPathBuilder.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/xml/XPathBuilder.java Tue Mar 4 06:09:54 2008
@@ -42,6 +42,8 @@
import org.apache.camel.spi.NamespaceAware;
import org.apache.camel.util.ExchangeHelper;
import org.w3c.dom.Document;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
/**
@@ -160,6 +162,16 @@
}
/**
+ * Sets the expression result type to boolean
+ *
+ * @return the current builder
+ */
+ public XPathBuilder<E> resultType(Class resultType) {
+ setResultType(resultType);
+ return this;
+ }
+
+ /**
* Sets the object model URI to use
*
* @return the current builder
@@ -376,6 +388,21 @@
public void setResultType(Class resultType) {
this.resultType = resultType;
+ if (Number.class.isAssignableFrom(resultType)) {
+ numberResult();
+ }
+ else if (String.class.isAssignableFrom(resultType)) {
+ stringResult();
+ }
+ else if (Boolean.class.isAssignableFrom(resultType)) {
+ booleanResult();
+ }
+ else if (Node.class.isAssignableFrom(resultType)) {
+ nodeResult();
+ }
+ else if (NodeList.class.isAssignableFrom(resultType)) {
+ nodeSetResult();
+ }
}
// Implementation methods
@@ -518,5 +545,4 @@
}
return answer;
}
-
}
Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/dataset/DataSet.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/dataset/DataSet.java?rev=633479&r1=633478&r2=633479&view=diff
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/dataset/DataSet.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/dataset/DataSet.java Tue Mar 4 06:09:54 2008
@@ -21,7 +21,7 @@
/**
* Represents a strategy for testing endpoints with canned data.
- *
+ *
* @version $Revision: 1.1 $
*/
public interface DataSet {
@@ -29,13 +29,18 @@
/**
* Populates a message exchange when using the DataSet as a source of messages
- *
+ *
* @param exchange
*/
- public void populateMessage(Exchange exchange, long messageIndex) throws Exception;
+ void populateMessage(Exchange exchange, long messageIndex) throws Exception;
/**
* Returns the size of the dataset
*/
- public long getSize();
+ long getSize();
+
+ /**
+ * Asserts that the expected message has been received for the given index
+ */
+ void assertMessageExpected(DataSetEndpoint dataSetEndpoint, Exchange expected, Exchange actual, long index) throws Exception;
}
Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/dataset/DataSetEndpoint.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/dataset/DataSetEndpoint.java?rev=633479&r1=633478&r2=633479&view=diff
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/dataset/DataSetEndpoint.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/dataset/DataSetEndpoint.java Tue Mar 4 06:09:54 2008
@@ -28,6 +28,7 @@
import org.apache.camel.Consumer;
import org.apache.camel.Processor;
import org.apache.camel.PollingConsumer;
+import org.apache.camel.Message;
import org.apache.camel.impl.EventDrivenPollingConsumer;
import org.apache.camel.component.mock.MockEndpoint;
import org.apache.camel.util.ExchangeHelper;
@@ -43,6 +44,12 @@
private DataSet dataSet;
private AtomicInteger receivedCounter = new AtomicInteger();
+ public static void assertEquals(String description, Object expected, Object actual, Exchange exchange) {
+ if (!ObjectHelper.equal(expected, actual)) {
+ throw new AssertionError(description + " does not match. Expected: " + expected + " but was: " + actual + " on " + exchange);
+ }
+ }
+
public DataSetEndpoint(String endpointUri, Component component, DataSet dataSet) {
super(endpointUri, component);
this.dataSet = dataSet;
@@ -72,10 +79,14 @@
/**
* Creates a message exchange for the given index in the {@link DataSet}
*/
- public Exchange createExchange(long counter) throws Exception {
- Exchange expected = createExchange();
- getDataSet().populateMessage(expected, counter);
- return expected;
+ public Exchange createExchange(long messageIndex) throws Exception {
+ Exchange exchange = createExchange();
+ getDataSet().populateMessage(exchange, messageIndex);
+
+ Message in = exchange.getIn();
+ in.setHeader(DataSet.INDEX_HEADER, messageIndex);
+
+ return exchange;
}
@@ -90,31 +101,20 @@
@Override
protected void performAssertions(Exchange actual) throws Exception {
int receivedCount = receivedCounter.incrementAndGet();
- long counter = receivedCount - 1;
- Exchange expected = createExchange(counter);
+ long index = receivedCount - 1;
+ Exchange expected = createExchange(index);
// now lets assert that they are the same
- LOG.debug("Received message: " + counter + " = " + actual);
- assertMessageExpected(counter, expected, actual);
+ LOG.debug("Received message: " + index + " = " + actual);
+
+ assertMessageExpected(index, expected, actual);
}
- protected void assertMessageExpected(long counter, Exchange expected, Exchange actual) throws InvalidPayloadException, NoSuchHeaderException {
+ protected void assertMessageExpected(long index, Exchange expected, Exchange actual) throws Exception {
long actualCounter = ExchangeHelper.getMandatoryHeader(actual, DataSet.INDEX_HEADER, Long.class);
- assertEquals(DataSet.INDEX_HEADER, counter, actualCounter, actual);
-
- Object expectedBody = expected.getIn().getBody();
- Object actualBody = actual.getIn().getBody();
- if (expectedBody != null) {
- // lets coerce to the correct type
- actualBody = ExchangeHelper.getMandatoryInBody(actual, expectedBody.getClass());
- }
- assertEquals("message body", expectedBody, actualBody, actual);
- }
+ assertEquals(DataSet.INDEX_HEADER, index, actualCounter, actual);
- protected void assertEquals(String description, Object expected, Object actual, Exchange exchange) {
- if (!ObjectHelper.equal(expected, actual)) {
- throw new AssertionError(description + " does not match. Expected: " + expected + " but was: " + actual + " on " + exchange);
- }
+ getDataSet().assertMessageExpected(this, expected, actual, index);
}
public void start() throws Exception {
Added: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/dataset/DataSetSupport.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/dataset/DataSetSupport.java?rev=633479&view=auto
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/dataset/DataSetSupport.java (added)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/dataset/DataSetSupport.java Tue Mar 4 06:09:54 2008
@@ -0,0 +1,105 @@
+/**
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.dataset;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.Message;
+import org.apache.camel.Processor;
+import org.apache.camel.util.ExchangeHelper;
+
+/**
+ * @version $Revision: 1.1 $
+ */
+public abstract class DataSetSupport implements DataSet {
+ private Map<String, Object> defaultHeaders;
+ private Processor outputTransformer;
+ private long size = 10;
+
+ public DataSetSupport() {
+ }
+
+ public DataSetSupport(int size) {
+ setSize(size);
+ }
+
+ public void populateMessage(Exchange exchange, long messageIndex) throws Exception {
+ Message in = exchange.getIn();
+ in.setBody(createMessageBody(messageIndex));
+ in.setHeaders(getDefaultHeaders());
+ applyHeaders(exchange, messageIndex);
+
+ if (outputTransformer != null) {
+ outputTransformer.process(exchange);
+ }
+ }
+
+ public void assertMessageExpected(DataSetEndpoint dataSetEndpoint, Exchange expected, Exchange actual, long index) throws Exception {
+ Object expectedBody = expected.getIn().getBody();
+ Object actualBody = actual.getIn().getBody();
+ if (expectedBody != null) {
+ // lets coerce to the correct type
+ actualBody = ExchangeHelper.getMandatoryInBody(actual, expectedBody.getClass());
+ }
+ DataSetEndpoint.assertEquals("message body", expectedBody, actualBody, actual);
+ }
+
+ public long getSize() {
+ return size;
+ }
+
+ public void setSize(long size) {
+ this.size = size;
+ }
+
+ public Map<String, Object> getDefaultHeaders() {
+ if (defaultHeaders == null) {
+ defaultHeaders = new HashMap<String, Object>();
+ populateDefaultHeaders(defaultHeaders);
+ }
+ return defaultHeaders;
+ }
+
+ public void setDefaultHeaders(Map<String, Object> defaultHeaders) {
+ this.defaultHeaders = defaultHeaders;
+ }
+
+ public Processor getOutputTransformer() {
+ return outputTransformer;
+ }
+
+ public void setOutputTransformer(Processor outputTransformer) {
+ this.outputTransformer = outputTransformer;
+ }
+
+ protected abstract Object createMessageBody(long messageIndex);
+
+ /**
+ * Allows derived classes to add some custom headers for a given message
+ */
+ protected void applyHeaders(Exchange exchange, long messageIndex) {
+ }
+
+ /**
+ * Allows derived classes to customize a default set of properties
+ */
+ protected void populateDefaultHeaders(Map<String, Object> map) {
+ }
+}
\ No newline at end of file
Propchange: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/dataset/DataSetSupport.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/dataset/SimpleDataSet.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/dataset/SimpleDataSet.java?rev=633479&r1=633478&r2=633479&view=diff
==============================================================================
--- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/dataset/SimpleDataSet.java (original)
+++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/dataset/SimpleDataSet.java Tue Mar 4 06:09:54 2008
@@ -17,11 +17,6 @@
*/
package org.apache.camel.component.dataset;
-import java.util.Map;
-import java.util.HashMap;
-
-import org.apache.camel.Exchange;
-import org.apache.camel.Message;
import org.apache.camel.Processor;
/**
@@ -30,42 +25,20 @@
*
* @version $Revision: 1.1 $
*/
-public class SimpleDataSet implements DataSet {
+public class SimpleDataSet extends DataSetSupport {
private Object defaultBody = "<hello>world!</hello>";
- private Map<String,Object> defaultHeaders;
- private Processor outputTransformer;
private Processor inputTransformer;
- private long size = 10;
public SimpleDataSet() {
}
public SimpleDataSet(int size) {
- setSize(size);
- }
-
- public void populateMessage(Exchange exchange, long messageIndex) throws Exception {
- Message in = exchange.getIn();
- in.setBody(getDefaultBody());
- in.setHeaders(getDefaultHeaders());
- applyHeaders(exchange, messageIndex);
-
- if (outputTransformer != null) {
- outputTransformer.process(exchange);
- }
+ super(size);
}
// Properties
//-------------------------------------------------------------------------
- public long getSize() {
- return size;
- }
-
- public void setSize(long size) {
- this.size = size;
- }
-
public Object getDefaultBody() {
return defaultBody;
}
@@ -74,18 +47,6 @@
this.defaultBody = defaultBody;
}
- public Map<String, Object> getDefaultHeaders() {
- if (defaultHeaders == null) {
- defaultHeaders = new HashMap<String, Object>();
- populateDefaultHeaders(defaultHeaders);
- }
- return defaultHeaders;
- }
-
- public void setDefaultHeaders(Map<String, Object> defaultHeaders) {
- this.defaultHeaders = defaultHeaders;
- }
-
public Processor getInputTransformer() {
return inputTransformer;
}
@@ -94,21 +55,13 @@
this.inputTransformer = inputTransformer;
}
- public Processor getOutputTransformer() {
- return outputTransformer;
- }
-
- public void setOutputTransformer(Processor outputTransformer) {
- this.outputTransformer = outputTransformer;
- }
-
// Implementation methods
//-------------------------------------------------------------------------
- protected void applyHeaders(Exchange exchange, long messageIndex) {
- Message in = exchange.getIn();
- in.setHeader(DataSet.INDEX_HEADER, messageIndex);
- }
- protected void populateDefaultHeaders(Map<String, Object> map) {
+ /**
+ * Creates the message body for a given message
+ */
+ protected Object createMessageBody(long messageIndex) {
+ return getDefaultBody();
}
}
Copied: activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/component/dataset/CustomDataSetTest.java (from r633440, activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/component/dataset/DataSetTest.java)
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/component/dataset/CustomDataSetTest.java?p2=activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/component/dataset/CustomDataSetTest.java&p1=activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/component/dataset/DataSetTest.java&r1=633440&r2=633479&rev=633479&view=diff
==============================================================================
--- activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/component/dataset/DataSetTest.java (original)
+++ activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/component/dataset/CustomDataSetTest.java Tue Mar 4 06:09:54 2008
@@ -20,16 +20,36 @@
import javax.naming.Context;
import org.apache.camel.ContextTestSupport;
+import org.apache.camel.Exchange;
+import org.apache.camel.Predicate;
+import org.apache.camel.Expression;
import org.apache.camel.component.mock.MockEndpoint;
import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.builder.PredicateBuilder;
+import org.apache.camel.builder.ExpressionBuilder;
+import org.apache.camel.builder.xml.XPathBuilder;
/**
* @version $Revision: 1.1 $
*/
-public class DataSetTest extends ContextTestSupport {
- protected SimpleDataSet dataSet = new SimpleDataSet(20);
+public class CustomDataSetTest extends ContextTestSupport {
+ protected DataSet dataSet = new DataSetSupport() {
+ Expression<Exchange> expression = new XPathBuilder<Exchange>("/message/@index").resultType(Long.class);
+
+ @Override
+ public void assertMessageExpected(DataSetEndpoint dataSetEndpoint, Exchange expected, Exchange actual, long index) throws Exception {
+ // lets compare the XPath result
+ Predicate<Exchange> predicate = PredicateBuilder.isEqualTo(expression, ExpressionBuilder.constantExpression(index));
+ System.out.println(">>>> evaluating predicate: " + predicate);
+ predicate.assertMatches("Actual: " + actual, actual);
+ }
+
+ protected Object createMessageBody(long messageIndex) {
+ return "<message index='" + messageIndex + "'>someBody" + messageIndex + "</message>";
+ }
+ };
- public void test() throws Exception {
+ public void testUsingCustomDataSet() throws Exception {
MockEndpoint endpoint = getMockEndpoint("mock:results");
endpoint.expectedMessageCount((int) dataSet.getSize());
@@ -55,4 +75,4 @@
}
};
}
-}
+}
\ No newline at end of file