日志后的Camel消息正文为null

时间:2017-07-28 07:48:47

标签: java spring

我遇到了Camel的问题。 我有这样的配置:

<properties>
    <env.camel.version>2.19.1</env.camel.version>
    <env.spring.version>4.3.10.RELEASE</env.spring.version>
    <spring-security.version>4.2.3.RELEASE</spring-security.version>
    <org.jvnet.jaxb2_commons.version>0.6.2</org.jvnet.jaxb2_commons.version>
    <org.codehaus.jackson.version>2.8.9</org.codehaus.jackson.version>
    <jaxb-api.version>2.2.11</jaxb-api.version>
    <jaxb.impl.version>${jaxb-api.version}</jaxb.impl.version>
    <ch.qos.logback.version>1.2.3</ch.qos.logback.version>
    <org.slf4j.version>1.7.25</org.slf4j.version>
    <jdk.version>1.7</jdk.version>
    <itext.pdf.version>4.2.2</itext.pdf.version>
    <apache.poi.microsoft.version>3.16</apache.poi.microsoft.version>
    <junit.version>3.8.1</junit.version>
    <maven-compiler-plugin.version>3.6.1</maven-compiler-plugin.version>
    <restlet-version>2.3.10</restlet-version>
    <openjpa-all.version>2.4.2</openjpa-all.version>
    <javax.servlet.jstl.version>1.2</javax.servlet.jstl.version>
</properties>

<dependencies>
    <!-- Dipendenze per Camel start -->
    <dependency>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-mail</artifactId>
        <version>${env.camel.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-core</artifactId>
        <version>${env.camel.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-spring</artifactId>
        <version>${env.camel.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-cxf</artifactId>
        <version>${env.camel.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-jms</artifactId>
        <version>${env.camel.version}</version>
    </dependency>

    <!-- The camel-http4 component provides HTTP based endpoints for calling 
        external HTTP resources (as a client to call external servers using HTTP) -->
    <dependency>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-http4</artifactId>
        <version>${env.camel.version}</version>
    </dependency>

    <!-- The stream: component provides access to the System.in, System.out 
        and System.err streams as well as allowing streaming of file and URL. -->
    <dependency>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-stream</artifactId>
        <version>${env.camel.version}</version>
    </dependency>

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

    <dependency>
        <groupId>org.apache.activemq</groupId>
        <artifactId>activemq-camel</artifactId>
        <version>5.15.0</version>
        <exclusions>
            <exclusion>
                <groupId>org.mortbay.jetty</groupId>
                <artifactId>jsp-2.1</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.mortbay.jetty</groupId>
                <artifactId>jsp-api-2.1</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

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

    <!-- Dipendenze Camel End -->

    <!-- Spring dependencies Start -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>${env.spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context-support</artifactId>
        <version>${env.spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-web</artifactId>
        <version>${spring-security.version}</version>
        <exclusions>
            <exclusion>
                <groupId>org.springframework</groupId>
                <artifactId>spring-web</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-config</artifactId>
        <version>${spring-security.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-expression</artifactId>
        <version>${env.spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-aop</artifactId>
        <version>${env.spring.version}</version>
    </dependency>
    <!-- spring web -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
        <version>${env.spring.version}</version>
    </dependency>
    <!-- spring web -->
    <!-- spring webmvc -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>${env.spring.version}</version>
    </dependency>
    <!-- spring webmvc -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-beans</artifactId>
        <version>${env.spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-tx</artifactId>
        <version>${env.spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-orm</artifactId>
        <version>${env.spring.version}</version>
    </dependency>

    <!-- RESTLET -->
    <dependency>
        <groupId>org.restlet.jee</groupId>
        <artifactId>org.restlet.ext.spring</artifactId>
        <version>${restlet-version}</version>
        <exclusions>
            <exclusion>
                <artifactId>commons-logging</artifactId>
                <groupId>commons-logging</groupId>
            </exclusion>
        </exclusions>
    </dependency>

    <!-- Spring dependencies End -->


    <!-- JPA / DB -->
    <dependency>
        <groupId>org.apache.openjpa</groupId>
        <artifactId>openjpa-all</artifactId>
        <version>${openjpa-all.version}</version>
    </dependency>
    <!-- Dipendenze per JUnit test start -->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>${junit.version}</version>
        <scope>test</scope>
    </dependency>
    <!-- Dipendenze per JUnit test end -->


    <!-- dipendenza logback per il logging -->

    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-core</artifactId>
        <version>${ch.qos.logback.version}</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/ch.qos.logback/logback-classic -->
    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>${ch.qos.logback.version}</version>
        <!-- <scope>test</scope> -->
    </dependency>

    <!-- SLF4J -->
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>${org.slf4j.version}</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>jcl-over-slf4j</artifactId>
        <version>${org.slf4j.version}</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>jul-to-slf4j</artifactId>
        <version>${org.slf4j.version}</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>log4j-over-slf4j</artifactId>
        <version>${org.slf4j.version}</version>
    </dependency>
    <!-- dipendenza logback per il logging -->

    <!-- https://mvnrepository.com/artifact/javax.servlet/jstl -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
        <version>${javax.servlet.jstl.version}</version>
    </dependency>

    <!-- Jackson -->
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-annotations</artifactId>
        <version>${org.codehaus.jackson.version}</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>${org.codehaus.jackson.version}</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-core</artifactId>
        <version>${org.codehaus.jackson.version}</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.jaxrs</groupId>
        <artifactId>jackson-jaxrs-json-provider</artifactId>
        <version>${org.codehaus.jackson.version}</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.module</groupId>
        <artifactId>jackson-module-jaxb-annotations</artifactId>
        <version>${org.codehaus.jackson.version}</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.dataformat</groupId>
        <artifactId>jackson-dataformat-xml</artifactId>
        <version>${org.codehaus.jackson.version}</version>
    </dependency>


    <!-- dipendenze JAXB start -->
    <dependency>
        <groupId>javax.xml.bind</groupId>
        <artifactId>jaxb-api</artifactId>
        <version>${jaxb-api.version}</version>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>com.sun.xml.bind</groupId>
        <artifactId>jaxb-impl</artifactId>
        <version>${jaxb.impl.version}</version>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>org.jvnet.jaxb2_commons</groupId>
        <artifactId>jaxb2-basics-runtime</artifactId>
        <version>${org.jvnet.jaxb2_commons.version}</version>
    </dependency>
    <!-- dipendenze JAXB end -->

    <!-- Needed for PDF View -->
    <!-- https://mvnrepository.com/artifact/com.lowagie/itext -->
    <dependency>
        <groupId>com.lowagie</groupId>
        <artifactId>itext</artifactId>
        <version>${itext.pdf.version}</version>
        <type>pom</type>
    </dependency>


    <!-- Needed for XLS View -->
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi</artifactId>
        <version>${apache.poi.microsoft.version}</version>
    </dependency>

我已经设置了这个驼峰上下文属性:

<camelContext xmlns="http://camel.apache.org/schema/spring"
    trace="#{config.camelTrace}" useMDCLogging="true" streamCache="true">

这是我的路线定义:

<route>
        <from uri="direct:contactTheMovieDb" />
        <to
            uri="http4://api.themoviedb.org/3/movie/550?api_key=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&amp;bridgeEndpoint=true" />

        <log message="contactTheMovieDb -> ${body}" loggingLevel="DEBUG"
            logName="it.umberto" />

        <!-- <setProperty propertyName="messageAsString"> -->
        <!-- <simple>${body}</simple> -->
        <!-- </setProperty> -->

        <!-- <process ref="readBodyExchange" /> -->

        <unmarshal>
            <json library="Jackson" unmarshalTypeName="it.umberto.Bean.MappingBean.Movie" />
        </unmarshal>

        <process ref="printMovie" />


        <!-- <log message="contactTheMovieDb INDENTATO -> ${body}" -->
        <!-- loggingLevel="DEBUG" logName="it.umberto" /> -->
    </route>

    <route>
        <from uri="restlet:/getMovie" />
        <setHeader headerName="CamelHttpMethod">
            <constant>GET</constant>
        </setHeader>
        <to uri="direct:contactTheMovieDb" />
        <!-- <to uri="stream:out" /> -->
        <log message="getMovie --> ${body}" loggingLevel="DEBUG" logName="it.umberto" />
    </route>

如果我删除日志正文填充正文,但如果激活它我有 null 邮件正文

这是我的申请日志:

https://gist.github.com/JafferWilson/7035ec8bf5b8d6aad81e205d3969ebeb

P.S: 抱歉我的英语不好:(

1 个答案:

答案 0 :(得分:0)

我解决了。

添加到camelContext streamCache = true(在camel 2.0之后默认禁用):

<camelContext xmlns="http://camel.apache.org/schema/spring"
    trace="#{config.camelTrace}" useMDCLogging="true" streamCache="true">

并在阅读后添加正文:

LOG.info("................Processor ReadBodyExchange ...........START");
    String body = exchange.getIn().getBody(String.class);
    LOG.info(" ExchangeMessage="+body);
    exchange.getIn().setBody(body);
    LOG.info("................Processor ReadBodyExchange ...........END");

此致 翁