You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2011/11/22 16:57:51 UTC
svn commit: r1205049 - in /camel/trunk/components/camel-stax/src:
main/java/org/apache/camel/component/stax/
test/java/org/apache/camel/component/stax/
test/resources/org/apache/camel/component/stax/
Author: davsclaus
Date: Tue Nov 22 15:57:50 2011
New Revision: 1205049
URL: http://svn.apache.org/viewvc?rev=1205049&view=rev
Log:
CAMEL-399: Added spring test and example.
Added:
camel/trunk/components/camel-stax/src/test/java/org/apache/camel/component/stax/SpringStAXJAXBIteratorExpressionTest.java
- copied, changed from r1205035, camel/trunk/components/camel-stax/src/test/java/org/apache/camel/component/stax/StAXJAXBIteratorExpressionTest.java
camel/trunk/components/camel-stax/src/test/resources/org/apache/camel/component/stax/SpringStAXJAXBIteratorExpressionTest.xml
Modified:
camel/trunk/components/camel-stax/src/main/java/org/apache/camel/component/stax/StAXBuilder.java
camel/trunk/components/camel-stax/src/main/java/org/apache/camel/component/stax/StAXJAXBIteratorExpression.java
camel/trunk/components/camel-stax/src/test/java/org/apache/camel/component/stax/StAXJAXBIteratorExpressionTest.java
Modified: camel/trunk/components/camel-stax/src/main/java/org/apache/camel/component/stax/StAXBuilder.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-stax/src/main/java/org/apache/camel/component/stax/StAXBuilder.java?rev=1205049&r1=1205048&r2=1205049&view=diff
==============================================================================
--- camel/trunk/components/camel-stax/src/main/java/org/apache/camel/component/stax/StAXBuilder.java (original)
+++ camel/trunk/components/camel-stax/src/main/java/org/apache/camel/component/stax/StAXBuilder.java Tue Nov 22 15:57:50 2011
@@ -18,13 +18,30 @@ package org.apache.camel.component.stax;
import org.apache.camel.Expression;
+/**
+ * Builder for StAX support.
+ */
public final class StAXBuilder {
private StAXBuilder() {
// no-op
}
+ /**
+ * Creates a {@link StAXJAXBIteratorExpression}.
+ *
+ * @param clazz the class which has JAXB annotations to bind POJO.
+ */
public static <T> Expression stax(Class<T> clazz) {
return new StAXJAXBIteratorExpression<T>(clazz);
}
+
+ /**
+ * Creates a {@link StAXJAXBIteratorExpression}.
+ *
+ * @param clazzName the FQN name of the class which has JAXB annotations to bind POJO.
+ */
+ public static <T> Expression stax(String clazzName) {
+ return new StAXJAXBIteratorExpression<T>(clazzName);
+ }
}
Modified: camel/trunk/components/camel-stax/src/main/java/org/apache/camel/component/stax/StAXJAXBIteratorExpression.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-stax/src/main/java/org/apache/camel/component/stax/StAXJAXBIteratorExpression.java?rev=1205049&r1=1205048&r2=1205049&view=diff
==============================================================================
--- camel/trunk/components/camel-stax/src/main/java/org/apache/camel/component/stax/StAXJAXBIteratorExpression.java (original)
+++ camel/trunk/components/camel-stax/src/main/java/org/apache/camel/component/stax/StAXJAXBIteratorExpression.java Tue Nov 22 15:57:50 2011
@@ -49,6 +49,7 @@ public class StAXJAXBIteratorExpression<
private static final Map<Class<?>, JAXBContext> JAX_CONTEXTS = new LRUSoftCache<Class<?>, JAXBContext>(1000);
private final Class<T> handled;
+ private final String handledName;
/**
* Creates this expression.
@@ -58,6 +59,18 @@ public class StAXJAXBIteratorExpression<
public StAXJAXBIteratorExpression(Class<T> handled) {
ObjectHelper.notNull(handled, "handled");
this.handled = handled;
+ this.handledName = null;
+ }
+
+ /**
+ * Creates this expression.
+ *
+ * @param handledName the FQN name of the class which has JAXB annotations to bind POJO.
+ */
+ public StAXJAXBIteratorExpression(String handledName) {
+ ObjectHelper.notNull(handledName, "handledName");
+ this.handledName = handledName;
+ this.handled = null;
}
private static JAXBContext jaxbContext(Class<?> handled) throws JAXBException {
@@ -74,16 +87,24 @@ public class StAXJAXBIteratorExpression<
}
@Override
+ @SuppressWarnings("unchecked")
public Object evaluate(Exchange exchange) {
try {
XMLEventReader reader = exchange.getIn().getMandatoryBody(XMLEventReader.class);
- return createIterator(reader, handled);
+ Class<T> clazz = handled;
+ if (clazz == null && handledName != null) {
+ clazz = (Class<T>) exchange.getContext().getClassResolver().resolveMandatoryClass(handledName);
+ }
+ return createIterator(reader, clazz);
} catch (InvalidPayloadException e) {
exchange.setException(e);
return null;
} catch (JAXBException e) {
exchange.setException(e);
return null;
+ } catch (ClassNotFoundException e) {
+ exchange.setException(e);
+ return null;
}
}
Copied: camel/trunk/components/camel-stax/src/test/java/org/apache/camel/component/stax/SpringStAXJAXBIteratorExpressionTest.java (from r1205035, camel/trunk/components/camel-stax/src/test/java/org/apache/camel/component/stax/StAXJAXBIteratorExpressionTest.java)
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-stax/src/test/java/org/apache/camel/component/stax/SpringStAXJAXBIteratorExpressionTest.java?p2=camel/trunk/components/camel-stax/src/test/java/org/apache/camel/component/stax/SpringStAXJAXBIteratorExpressionTest.java&p1=camel/trunk/components/camel-stax/src/test/java/org/apache/camel/component/stax/StAXJAXBIteratorExpressionTest.java&r1=1205035&r2=1205049&rev=1205049&view=diff
==============================================================================
--- camel/trunk/components/camel-stax/src/test/java/org/apache/camel/component/stax/StAXJAXBIteratorExpressionTest.java (original)
+++ camel/trunk/components/camel-stax/src/test/java/org/apache/camel/component/stax/SpringStAXJAXBIteratorExpressionTest.java Tue Nov 22 15:57:50 2011
@@ -17,38 +17,30 @@
package org.apache.camel.component.stax;
import org.apache.camel.EndpointInject;
-import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.mock.MockEndpoint;
import org.apache.camel.component.stax.model.Record;
import org.apache.camel.component.stax.model.RecordsUtil;
-import org.apache.camel.test.junit4.CamelTestSupport;
+import org.apache.camel.test.junit4.CamelSpringTestSupport;
import org.junit.BeforeClass;
import org.junit.Test;
+import org.springframework.context.support.AbstractApplicationContext;
+import org.springframework.context.support.ClassPathXmlApplicationContext;
-import static org.apache.camel.component.stax.StAXBuilder.stax;
+public class SpringStAXJAXBIteratorExpressionTest extends CamelSpringTestSupport {
-public class StAXJAXBIteratorExpressionTest extends CamelTestSupport {
@EndpointInject(uri = "mock:records")
private MockEndpoint recordsEndpoint;
+ @Override
+ protected AbstractApplicationContext createApplicationContext() {
+ return new ClassPathXmlApplicationContext("org/apache/camel/component/stax/SpringStAXJAXBIteratorExpressionTest.xml");
+ }
+
@BeforeClass
public static void initRouteExample() {
RecordsUtil.createXMLFile();
}
- @Override
- public RouteBuilder createRouteBuilder() {
- return new RouteBuilder() {
- @Override
- public void configure() throws Exception {
- from("file:target/in")
- .routeId("stax-test")
- .split(stax(Record.class))
- .to("mock:records");
- }
- };
- }
-
@Test
public void testStaxExpression() throws InterruptedException {
recordsEndpoint.expectedMessageCount(10);
@@ -60,4 +52,5 @@ public class StAXJAXBIteratorExpressionT
assertEquals("4", five.getKey());
assertEquals("#4", five.getValue());
}
+
}
Modified: camel/trunk/components/camel-stax/src/test/java/org/apache/camel/component/stax/StAXJAXBIteratorExpressionTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-stax/src/test/java/org/apache/camel/component/stax/StAXJAXBIteratorExpressionTest.java?rev=1205049&r1=1205048&r2=1205049&view=diff
==============================================================================
--- camel/trunk/components/camel-stax/src/test/java/org/apache/camel/component/stax/StAXJAXBIteratorExpressionTest.java (original)
+++ camel/trunk/components/camel-stax/src/test/java/org/apache/camel/component/stax/StAXJAXBIteratorExpressionTest.java Tue Nov 22 15:57:50 2011
@@ -41,10 +41,12 @@ public class StAXJAXBIteratorExpressionT
return new RouteBuilder() {
@Override
public void configure() throws Exception {
+ // START SNIPPET: e1
from("file:target/in")
- .routeId("stax-test")
+ // split the file using StAX (the stax method is from StAXBuilder) -->
.split(stax(Record.class))
.to("mock:records");
+ // END SNIPPET: e1
}
};
}
Added: camel/trunk/components/camel-stax/src/test/resources/org/apache/camel/component/stax/SpringStAXJAXBIteratorExpressionTest.xml
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-stax/src/test/resources/org/apache/camel/component/stax/SpringStAXJAXBIteratorExpressionTest.xml?rev=1205049&view=auto
==============================================================================
--- camel/trunk/components/camel-stax/src/test/resources/org/apache/camel/component/stax/SpringStAXJAXBIteratorExpressionTest.xml (added)
+++ camel/trunk/components/camel-stax/src/test/resources/org/apache/camel/component/stax/SpringStAXJAXBIteratorExpressionTest.xml Tue Nov 22 15:57:50 2011
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+-->
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="
+ http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
+ http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd
+ ">
+
+ <!-- START SNIPPET: e1 -->
+ <!-- use STaXBuilder to create the expression we want to use in the route below for splitting the XML file -->
+ <!-- notice we use the factory-method to define the stax method, and to pass in the parameter as a constructor-arg -->
+ <bean id="staxRecord" class="org.apache.camel.component.stax.StAXBuilder" factory-method="stax">
+ <!-- FQN class name of the POJO with the JAXB annotations -->
+ <constructor-arg index="0" value="org.apache.camel.component.stax.model.Record"/>
+ </bean>
+
+ <camelContext xmlns="http://camel.apache.org/schema/spring">
+ <route>
+ <!-- pickup XML files -->
+ <from uri="file:target/in"/>
+ <split>
+ <!-- split the file using StAX (ref to bean above) -->
+ <ref>staxRecord</ref>
+ <!-- and send each splitted to a mock endpoint, which will be a Record POJO instance -->
+ <to uri="mock:records"/>
+ </split>
+ </route>
+ </camelContext>
+ <!-- END SNIPPET: e1 -->
+
+</beans>