Exception using Jackson JSON library with camel

19,700

You are missing the camel-jackson dependency:

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-jackson</artifactId>
    <version>${camel-version}</version>
</dependency>

This pulls in jackson-core-asl and jackson-mapper-asl, but unfortunately not jackson-jaxrs. For the latter you still need an explicit dependency in a compatible version.

Share:
19,700

Related videos on Youtube

KingAndrew
Author by

KingAndrew

language: c-&gt;c++-&gt;java-&gt;objectiveC-&gt;JS/Node years doing it: 4 6 20 1.5 2.4

Updated on September 15, 2022

Comments

  • KingAndrew
    KingAndrew over 1 year

    I am having trouble using the Jackson JSON library with camel. The exception is:

    FailedToCreateRouteException: Failed to create route... because of Data format 'json-jackson' could not be created. Ensure the data format is valid and the associated Camel component is present on the classpath
    

    Here is the beginning of classpath notice that the Jackson libs are there:

     <<< camel-maven-plugin:2.9.0:run (default-cli) @ portlistener <<<
    
    --- camel-maven-plugin:2.9.0:run (default-cli) @ portlistener ---
    Classpath = [file:/C:/Users/andrew.b-ext/Workspace/portlistener/target/classes/, file:/C:/Users/andrew.b-ext/.m2/repository/org/codehaus/jackson/jackson-asl/1.9.13/jackson-core-asl-1.9.13.jar, file:/C:/Users/andrew.b-ext/.m2/repository/org/codehaus/jackson/jackson-mapper-asl/1.9.13/jackson-mapper-asl-1.9.13.jar, file:/C:/Users/andrew.b-ext/.m2/repository/org/codehaus/jackson/jackson-jaxrs/1.9.13/jackson-jaxrs-1.9.13.jar, ...snip...
    

    My pom has Jackson:

     <properties>
        <camel.version>2.12.2</camel.version>
        <cxf.version>2.7.8</cxf.version>
        <activemq.version>5.6.0</activemq.version>
    </properties>
    
    <dependencies>
      <dependency>
         <groupId>org.codehaus.jackson</groupId>
         <artifactId>jackson-core-asl</artifactId>
         <version>1.9.13</version>
      </dependency>
      <dependency>
         <groupId>org.codehaus.jackson</groupId>
         <artifactId>jackson-mapper-asl</artifactId>
         <version>1.9.13</version>
      </dependency>
      <dependency>
         <groupId>org.codehaus.jackson</groupId>
         <artifactId>jackson-jaxrs</artifactId>
         <version>1.9.13</version>
      </dependency>
    

    Here is my definition of the Dataformat object:

    <bean id="jsonDataformat" class="org.apache.camel.model.dataformat.JsonDataFormat">
        <property name="unmarshalType" value="java.util.Map" />
        <property name="library" value="Jackson"></property>
    </bean>
    

    I tried changing the jsonDataformat declaration to:

        <camel:dataFormats>
                <camel:json id="jsonDataformat" library="Jackson"/>
    </camel:dataFormats>
    

    When I do that I get a different error:

    Configuration problem: Cannot locate BeanDefinitionParser for element [dataFormats]
    

    Can anyone see what I'm doing wrong?

    Thanks,

    Andrew entire pom.xml

    <?xml version="1.0" encoding="UTF-8"?>
    

    http://maven.apache.org/maven-v4_0_0.xsd">

    <modelVersion>4.0.0</modelVersion>
    
    <!--<parent> <artifactId>core</artifactId> <groupId>com.xxxx.clinical</groupId> 
        <version>3.3.3.3.1</version> </parent> -->
    <groupId>com.xxxx.clinical</groupId>
    <artifactId>portlistener</artifactId>
    <packaging>jar</packaging>
    <name>portlistener</name>
    <version>0.0.0.0.01</version>
    
    <properties>
        <camel.version>2.12.2</camel.version>
        <cxf.version>2.7.8</cxf.version>
        <activemq.version>5.6.0</activemq.version>
        <jackson.version>1.9.13</jackson.version>
    </properties>
    
    <dependencies>
        <dependency>
            <groupId>org.codehaus.jackson</groupId>
            <artifactId>jackson-core-asl</artifactId>
            <version>${jackson.version}</version>
        </dependency>
        <dependency>
            <groupId>org.codehaus.jackson</groupId>
            <artifactId>jackson-mapper-asl</artifactId>
            <version>${jackson.version}</version>
        </dependency>
        <dependency>
            <groupId>org.codehaus.jackson</groupId>
            <artifactId>jackson-jaxrs</artifactId>
            <version>${jackson.version}</version>
        </dependency>
    
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-frontend-jaxws</artifactId>
            <version>${cxf.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-transports-http</artifactId>
            <version>${cxf.version}</version>
        </dependency>
        <!-- This dependency is needed if you're using the Jetty container -->
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-transports-http-jetty</artifactId>
            <version>${cxf.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.activemq</groupId>
            <artifactId>activemq-all</artifactId>
            <version>${activemq.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.activemq</groupId>
            <artifactId>activemq-camel</artifactId>
            <version>${activemq.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.activemq</groupId>
            <artifactId>activemq-pool</artifactId>
            <version>${activemq.version}</version>
        </dependency>
        <!-- Camel -->
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-core</artifactId>
            <version>${camel.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-spring</artifactId>
            <version>${camel.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.xbean</groupId>
            <artifactId>xbean-spring</artifactId>
            <version>3.15</version>
        </dependency> 
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-jms</artifactId>
            <version>${camel.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-hl7</artifactId>
            <version>${camel.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-netty</artifactId>
            <version>${camel.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-cxf</artifactId>
            <version>${camel.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-http</artifactId>
            <version>${camel.version}</version>
        </dependency>
        <!-- hapi -->
        <dependency>
            <groupId>ca.uhn.hapi</groupId>
            <artifactId>hapi-base</artifactId>
            <version>2.1</version>
            <exclusions>
                <exclusion>
                    <artifactId>xercesImpl</artifactId>
                    <groupId>xerces</groupId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>ca.uhn.hapi</groupId>
            <artifactId>hapi-structures-v25</artifactId>
            <version>2.1</version>
        </dependency>
    
    
        <!-- logging -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.6.1</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.6.1</version>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.16</version>
        </dependency>
    </dependencies>
    
    <build>
        <defaultGoal>install</defaultGoal>
    
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.3.2</version>
                <configuration>
                    <source>1.6</source>
                    <target>1.6</target>
                </configuration>
            </plugin>
    
            <!-- allows the route to be ran via 'mvn camel:run' -->
            <plugin>
                <groupId>org.apache.camel</groupId>
                <artifactId>camel-maven-plugin</artifactId>
                <version>2.9.0</version>
            </plugin>
        </plugins>
    </build>
    </project>
    
  • KingAndrew
    KingAndrew over 10 years
    Dooh! Thanks alot. Sometimes I wish I would post the question a lot sooner than I do.
  • masT
    masT almost 6 years
    With Camel 2.22.x, you may need to explicitly create a bean json-jackson