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>