Uploaded image for project: 'ServiceMix 4'
  1. ServiceMix 4
  2. SMX4-417

calling <setHeader> with <groovy> expression can delete message and headers

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Major
    • Resolution: Fixed
    • 4.0.0
    • 4.3.0
    • None
    • None
    • OSX 10.6.1, Java(TM) SE Runtime Environment (build 1.6.0_15-b03-219)

    Description

      I've got a route that takes an HTTP form post, does some transformations, and sends an email. One of the transforms I'd like to do is to set a header value based on the result of a Groovy expression. I found that setting a header with <groovy>...</groovy> clears out the entire exchange. Setting a header using <constant>...</constant> works fine.

      Here's a route that I'm using to diagnose this problem:

      <camelContext xmlns="http://activemq.apache.org/camel/schema/spring">
      <route>
      <from uri="jetty:http://0.0.0.0:8103/" />
      <to uri="log:from jetty?showAll=true" />
      <to uri="seda:transform" />
      </route>
      <route>
      <from uri="timer:mytimer?period=30000"/>
      <setHeader headerName="application">
      <constant>TEST</constant>
      </setHeader>
      <to uri="log:from timer?showAll=true" />
      <to uri="seda:transform"/>
      </route>
      <route>
      <from uri="seda:transform" />
      <setHeader headerName="fromGroovy">
      <groovy>"my header is ${in.headers.application}"</groovy>
      </setHeader>
      <to uri="log:after set header?showAll=true" />
      </route>
      </camelContext>

      Messages that originate from the timer look fine:

      12:31:49,332 | INFO | mer?period=30000 | from timer | rg.apache.camel.processor.Logger 88 | Exchange[Id:ID-iago.local/53297-1257192385112/0-16, Properties:

      {org.apache.camel.timer.name=mytimer, org.apache.camel.timer.firedTime=Mon Nov 02 12:31:49 PST 2009, org.apache.camel.timer.period=30000}

      , Headers:

      {application=TEST, firedTime=Mon Nov 02 12:31:49 PST 2009}

      , BodyType:null, Body:null, Out: null]
      12:31:49,335 | INFO | ansform thread:3 | after set header | rg.apache.camel.processor.Logger 88 | Exchange[Id:ID-iago.local/53297-1257192385112/0-17, Properties:

      {org.apache.camel.timer.name=mytimer, org.apache.camel.timer.firedTime=Mon Nov 02 12:31:49 PST 2009, org.apache.camel.timer.period=30000}

      , Headers:

      {application=TEST, fromGroovy=my header is TEST, firedTime=Mon Nov 02 12:31:49 PST 2009}

      , BodyType:null, Body:null, Out: null]

      Messages that originate in response to a request to http://localhost:8103/?application=TEST appear to be lost after the header is set with the <groovy> tag:

      12:32:03,607 | INFO | 34102763@qtp13-1 | from jetty | rg.apache.camel.processor.Logger 88 | Exchange[Id:ID-iago.local/53297-1257192385112/0-18, Properties:{}, Headers:

      {application=TEST, Host=localhost:8103, org.apache.camel.component.http.query=application=TEST, User-Agent=curl/7.19.0 (i386-apple-darwin9.7.0) libcurl/7.19.0 zlib/1.2.3, http.requestMethod=GET, Accept=*/*}

      , BodyType:org.apache.camel.converter.stream.StreamCacheConverter.InputStreamCache, Body:, Out: null]
      12:32:03,611 | INFO | ansform thread:3 | after set header | rg.apache.camel.processor.Logger 88 | Exchange[Id:ID-iago.local/53297-1257192385112/0-19, Properties:{}, Headers:{}, BodyType:null, Body:null, Out: null]

      The message after the <setHeader><groovy> is completely blank. I've tried building the route with the Java DSL but it does the same thing. Anything added after the <setHeader><groovy>... element is added to the message, but all previous contents were lost.

      Attachments

        1. SMX4-417.tar.gz
          2 kB
          Paul Mietz Egli

        Issue Links

          Activity

            People

              davsclaus Claus Ibsen
              pegli Paul Mietz Egli
              Votes:
              1 Vote for this issue
              Watchers:
              0 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: