Hi Marci,

to add on what Alex said, I found it's always better to use either getMessage() 
or to explicitly check if the exchange hasOut() instead of assuming getIn() is 
always the right place to look for data coming out of a component

Giovanni

-----Messaggio originale-----
Da: Alex Dettinger <aldettin...@gmail.com> 
Inviato: lunedì 17 febbraio 2020 11:04
A: users@camel.apache.org
Oggetto: Re: ProducerTemplate.request() not returning complete Exchange

Hi Marci,

  I would say that from("jms:Sahara")... has MEP InOUt so In message with 
header "foo", and OUT message with header "bar".

  So assertThat(“return should be
bar”,reply.get*Out/Message*().getHeader(“test”),equalTo(“bar”)
should be ok.

Alex

On Mon, Feb 17, 2020 at 11:02 AM Alex Dettinger <aldettin...@gmail.com>
wrote:

> Hi Marci,
>
>   I would say that from("jms:Sahara")... has MEP InOUt so In message 
> with header "foo", and OUT mess
>
> On Fri, Feb 14, 2020 at 11:43 PM Marci <kilidar...@gmail.com> wrote:
>
>>
>>  I understand that the new Processor(){} is for the message being 
>> sent to the consumers (from(route)) and this is working fine.
>> What I am not understanding is why the ProducerTemplate.request() is 
>> not returning an exchange back at the end of the route.
>> For example.
>> Exchange reply = producerTemplate.request("jms:Sahara", new Processor() {
>>         public void process(final Exchange exchange) {
>>         exchange.getIn().setHeader(“test”,”foo”)
>>         }
>> Route
>>      From(jms:Sahara”)
>>           .log(LoggingLevel.INFO,"* Test ID: ${header.test}" )
>>           .setHeader(“test”,”bar”);
>> end route
>>
>> assertThat(“return should be
>> bar”,reply.getIn().getHeader(“test”),equalTo(“bar”)
>> but it is still “foo”
>> This is failing when  it should pass
>>
>> Maybe I’m reading these wrong
>> From Javadoc.io
>> Exchange        request(Endpoint endpoint, Processor processor)
>> Sends an exchange to an endpoint using a supplied processor Uses an 
>> ExchangePattern.InOut message exchange pattern.
>>
>> from the camel apache org website
>> request*() methods
>>
>> The send*() methods use the default Message Exchange Pattern (InOnly, 
>> InOut etc) as the endpoint. If you want to explicitly perform a 
>> request/response (InOut) you can use the request*() methods instead 
>> of the
>> send*() methods.
>>
>> E.g. let’s invoke an endpoint and get the response:
>>
>>
>>
>> >Camel › Camel - Users › Camel - Users kilidarria
>>
>> >Re: ProducerTemplate.request() not returning complete Exchange.
>> >‹ Previous Topic Next Topic ›
>>
>> classic         Classic         list    List    threaded        Threaded
>>  X  Turn off highlighting 1 message Options Options
>>
>> Classic Threaded   Reply   More   Close
>> Jan 15, 2020; 12:34am Claus Ibsen-2 Claus Ibsen-2 Re:
>> ProducerTemplate.request() not returning complete Exchange.
>> Hi
>>
>> The new Processor(){ } in the request method of the producer template 
>> is not for the reply message, but for preparing the message to send 
>> (eg the input message).
>>
>> On Tue, Jan 14, 2020 at 9:16 PM Wilken Marci J < [hidden email]> 
>> wrote:
>>
>> > Based on the documentation I was reading the 
>> > ProducerTemplate.request(<URL>, Processor) should return the  
>> > Exchange information from the route that was called.  When I am 
>> > running my test
>> on
>> > this it is returning the body information in the
>> > exchange.getOut().getBody() but the exchange.getOut().getHeaders() 
>> > has
>> the
>> > headers that I sent and not returned headers that I see if I look 
>> > at the mock endpoint.  I am expecting it to return the header and 
>> > body data in
>> the
>> > Exchange.getIn().  Since this test is calling a jms message Queue
>> (JBoss
>> > EAP 7.2 Fuse 7.3) I am expecting this to return the same thing as 
>> > the a call from another route would see.  Am I understanding this 
>> > wrong or am
>> I
>> > missing a setting?
>> >
>> >
>> >
>> > *public void testConnection() throws Exception {*
>> >
>> > *       log.info <http://log.info>("----->>  Begin testConnection
>> > <<-----");*
>> >
>> > *       Assert.assertNotNull("Expected QueueRoute-context to exist",
>> > camelctx);*
>> >
>> > *       Assert.assertEquals(ServiceStatus.Started,
>> camelctx.getStatus());*
>> >
>> >
>> >
>> > *       MockEndpoint mock = camelctx.getEndpoint("mock:JobLogResult",
>> > MockEndpoint.class);*
>> >
>> > *       assertNotNull("Expected mock:JobLogResult to exist", mock);*
>> >
>> > *       mock.reset();*
>> >
>> > *       mock.expectedMessageCount(1);*
>> >
>> >
>> >
>> > *       ProducerTemplate producerTemplate =
>> > camelctx.createProducerTemplate();*
>> >
>> > *       Assert.assertNotNull("Expected producerTemplate to exist",
>> > producerTemplate);*
>> >
>> >
>> >
>> > *       Exchange reply =
>> > producerTemplate.request("jms:queue:Sahara.Core.JobIdRequest", new
>> > Processor() {*
>> >
>> >
>> >
>> > *              public void process(final Exchange exchange) {*
>> >
>> >
>> >
>> > *                     Map<String, Object> headers = new HashMap<String,
>> > Object>();*
>> >
>> > *                     headers.put("RequestingSource",
>> requestingSource);*
>> >
>> > *                     headers.put("AuthorizationKey",
>> authorizationKey);*
>> >
>> > *                     headers.put("RequestType", "testConnection");*
>> >
>> >
>> >
>> > *                     Map<String, Object> payload = new HashMap<String,
>> > Object>();*
>> >
>> >
>> >
>> > *                     exchange.getIn().setHeaders(headers);*
>> >
>> > *                     exchange.getIn().setBody(payload);*
>> >
>> > *                     exchange.setPattern(ExchangePattern.InOut);*
>> >
>> >
>> >
>> > *              }*
>> >
>> > *       });*
>> >
>> > *       // these fail*
>> >
>> > *       assertThat("Request was un-successful", (
>> > reply.getIn().getHeader("SQLErrorMessage") == null ? "null"
>> > :((String)reply.getIn().getHeader("SQLErrorMessage"))).toLowerCase(
>> > )
>> > ,equalTo("success"));*
>> >
>> > *       assertThat("Didn't Return Data ", (int)
>> > reply.getIn().getHeader("CamelSqlRowCount"),equalTo(1));*
>> >
>> >
>> >
>> >
>> >
>> > *       // these are successfull.*
>> >
>> > *       List<Exchange> list = mock.getReceivedExchanges();*
>> >
>> > *       Exchange reply2 = list.get(0);*
>> >
>> > *       assertThat("Request was un-successful", (
>> > reply2.getIn().getHeader("SQLErrorMessage") == null ? "null"
>> > :((String)reply2.getIn().getHeader("SQLErrorMessage"))).toLowerCase
>> > ()
>> > ,equalTo("success"));*
>> >
>> > *       assertThat("Didn't Return Data ", (int)
>> > reply2.getIn().getHeader("CamelSqlRowCount"),equalTo(1));*
>> >
>> > *}*
>> >
>> >
>> >
>> > *Route*
>> >
>> > *from("jms:queue:Sahara.Core.JobIdRequest?exchangePattern=InOut")*
>> >
>> > *      .routeId("JobLogRouter")*
>> >
>> > *
>> >
>> .log(LoggingLevel.INFO,"*********************************************
>> ****")
>> > *
>> >
>> > *       .log(LoggingLevel.INFO,"* Beginning JobAuditingRequest")*
>> >
>> > *       .log(LoggingLevel.INFO,"* Requesting Source:
>> > ${header.RequestingSource} " )*
>> >
>> > *       .log(LoggingLevel.INFO,"* Request Type: ${header.RequestType} "
>> )*
>> >
>> > *
>> >
>> .log(LoggingLevel.INFO,"*********************************************
>> ****")
>> > *
>> >
>> > *       .choice()    *
>> >
>> > *              .when(simple ("${header.RequestType} == \"complete\""))*
>> >
>> > *                     .to("direct:CompleteJob")*
>> >
>> > *                     .endChoice()*
>> >
>> > *
>> > .when().simple("${header.RequestType?.equalsIgnoreCase(\"audit\")}"
>> > )*
>> >
>> > *                     .to("direct:LogAudit")*
>> >
>> > *                     .endChoice()*
>> >
>> > *              .when(simple ("${header.RequestType} == \"error\""))*
>> >
>> > *                     .to("direct:LogError")*
>> >
>> > *                     .endChoice()*
>> >
>> > *
>> > .when().simple("${header.RequestType?.equalsIgnoreCase(\"whoami\")}
>> > ")*
>> >
>> > *                 .to("direct:WhoAmI")*
>> >
>> > *                 .endChoice()*
>> >
>> > *
>> >
>> .when().simple("${header.RequestType?.equalsIgnoreCase(\"testConnecti
>> on\")}")*
>> >
>> > *                 .to("direct:ConnectionTest")*
>> >
>> > *                 .endChoice()*
>> >
>> > *
>> > .when().simple("${header.RequestType?.equalsIgnoreCase(\"start\")} 
>> > ||
>> > ${header.RequestType?.equalsIgnoreCase(\"open\")}")*
>> >
>> > *                 .to("direct:InitialJobRequest")*
>> >
>> > *                 .endChoice()   *
>> >
>> > *              .otherwise()*
>> >
>> > *                     .process(new Processor() {*
>> >
>> > *                           public void process(Exchange exchange)
>> throws
>> > Exception {*
>> >
>> > *                       //     Message in = exchange.getIn();*
>> >
>> > *                                  Map<String, Object> payload = new
>> > HashMap<String, Object>();*
>> >
>> > *                                  exchange.setOut(exchange.getIn());*
>> >
>> > *                                  payload = (Map<String,Object>)
>> > exchange.getIn().getBody();*
>> >
>> > *                                  payload.put("whoami", "I am " +
>> > getContext().resolvePropertyPlaceholders("{{whoami}}") );*
>> >
>> > *                                  payload.put("SQLErrorMessage", "No
>> > Choice Provided");*
>> >
>> > *                                  payload.put("SQLErrorNumber", -1);*
>> >
>> > *                                  exchange.getOut().setBody(payload);*
>> >
>> > *
>> > exchange.getOut().setHeader("RequestType", "failed");*
>> >
>> >
>> >
>> > *                                  }*
>> >
>> >
>> >
>> > *                     })*
>> >
>> > *                     .endChoice()*
>> >
>> > *       .end()*
>> >
>> > *       .process(new Processor() {*
>> >
>> > *              public void process(Exchange exchange) throws Exception
>> {*
>> >
>> >
>> >
>> > *                     exchange.setOut(exchange.getIn());*
>> >
>> > *
>> >
>> exchange.getOut().setHeader("BodyType",exchange.getIn().getBody().get
>> Class().getName());*
>> >
>> > *                     exchange.getOut().setHeader("BodyEncoding",
>> "JSON");*
>> >
>> > *                     String payloadJson = new
>> > ObjectMapper().writeValueAsString(exchange.getIn().getBody());*
>> >
>> > *                     log.debug(payloadJson);*
>> >
>> > *                     exchange.getOut().setBody(payloadJson);*
>> >
>> >
>> >
>> > *              }*
>> >
>> >
>> >
>> > *       })*
>> >
>> > *       .log(LoggingLevel.INFO, "Request results Job ID Request : \r\n
>> > Header:  ${headers} \r\n Body:  ${body} ")*
>> >
>> >
>> >
>> > *       .to("mock:JobLogResult")*
>> >
>> > *          .onException(Exception.class)*
>> >
>> > *              .setHeader("MESSAGE_INFO", constant("Failure to Process
>> > Audit Job"))*
>> >
>> > *              .setHeader("ROUTE_STOP", constant(Boolean.TRUE))*
>> >
>> > *              .log(LoggingLevel.ERROR, "${exception.stackTrace}")*
>> >
>> > *              .maximumRedeliveries("0")*
>> >
>> > *              .redeliveryDelay("0")*
>> >
>> > *              .id("_onExceptionCron")*
>> >
>> > *              .handled(true)*
>> >
>> > *              ;*
>> >
>> > *       ;*
>> >
>> >
>> >
>> >
>> >
>> > * from("direct:ConnectionTest")*
>> >
>> > *       .routeId("ConnectionTest")*
>> >
>> > *       .log(LoggingLevel.INFO, "Beginning Connection Test")*
>> >
>> > *       .log(LoggingLevel.INFO,"whoami ->> {{whoami}}")*
>> >
>> > *       .log(LoggingLevel.INFO, "Request: \r\n Header:  ${headers} \r\n
>> > Body:  ${body} ")*
>> >
>> > *       .to("sql:select name from sys.sysusers where uid =
>> > 0?dataSource=#Sahara_DS")*
>> >
>> > *       .log(LoggingLevel.INFO, "Request Result: \r\n Header:
>> ${headers}
>> > \r\n Body:  ${body} ")*
>> >
>> >
>> >
>> > *       .process(new Processor() {*
>> >
>> > *              public void process(Exchange exchange) throws Exception
>> {*
>> >
>> > *              Map<String, Object> payload = new HashMap<String,
>> > Object>();*
>> >
>> > *              exchange.setOut(exchange.getIn());*
>> >
>> > *              ArrayList<Map<String,Object>> body =
>> > (ArrayList<Map<String,Object>>)  exchange.getIn().getBody();*
>> >
>> > *              payload.put("whoami", "I am " +
>> > getContext().resolvePropertyPlaceholders("{{whoami}}") );*
>> >
>> > *              body.add(payload);*
>> >
>> > *              exchange.getOut().setBody(body);*
>> >
>> > *              exchange.getOut().setHeader("RequestType", "complete");*
>> >
>> > *              exchange.getOut().setHeader("SQLErrorMessage",
>> "Success");*
>> >
>> > *       }*
>> >
>> >
>> >
>> > *       })*
>> >
>> > *       .onException(SQLException.class)*
>> >
>> > *              .setHeader("MESSAGE_INFO", constant("Sql Connection
>> > Error"))*
>> >
>> > *              .setHeader("ROUTE_STOP", constant(Boolean.TRUE))*
>> >
>> > *              .log(LoggingLevel.ERROR, "${exception.stackTrace}")*
>> >
>> > *              .maximumRedeliveries("0")*
>> >
>> > *              .redeliveryDelay("0")*
>> >
>> > *              .id("_onExceptionConnectionTest")*
>> >
>> > *              .handled(false)*
>> >
>> > *       ;*
>> >
>> >
>> >
>> >
>> >
>> >
>> >
>> >
>> >
>> > Regards-
>> >
>> > Marci Wilken
>> >
>> > Operations Architect
>> >
>> > Office of Information Services
>> >
>> > OHA/DHS/CAF-CW/OR-KIDS
>> >
>> > 503.378.2405
>> >
>> > [image: Description: Description: Description:
>> > cid:image001.png@01CCF13E.2FACEC70][image: OHAsiglogo]
>> >
>> > CONFIDENTIALITY NOTICE
>> >
>> > *This email may contain information that is privileged, 
>> > confidential, or otherwise exempt from disclosure under applicable 
>> > law. If you are not
>> the
>> > addressee or it appears from the context or otherwise that you have 
>> > received this email in error, please advise me immediately by reply
>> email,
>> > keep the contents confidential, and immediately delete the message 
>> > and
>> any
>> > attachments from your system. *
>> >
>> >
>> >
>> >
>> >
>> «  [hide part of quote]
>>
>>
>> --
>> Claus Ibsen
>> -----------------
>> http://davsclaus.com @davsclaus
>> Camel in Action 2: https://www.manning.com/ibsen2 « Return to Camel - 
>> Users  |  12 views
>> Free forum by Nabble    Disable Popup Ads | Edit this page
>>
>>

Reply via email to