The problem or my mis-understanding is in the producertemplate in the Junit tests

In the actual code when calling from one route to the other

to(jms:Sahara) header.test = foo

from(jms:Sahara)...  with MEP inout

/* do some cool stuff */

Back to the previous  returns the correct message/exchange header.test = bar

what is not happening from the junit test is Exchange reply =producerTemplate.send(new Processor etc )

      @Test
          @InSequence(15)
          public void testProcessingRun() throws Exception {
                log.info("\r\n\r\n----->>  Begin testProcessingRun() <<-----");
                 jobID = -1;
                ArrayList<Map<String,Object>> rtnArray = null;

                  MockEndpoint mock = camelctx.getEndpoint("mock:SaharaCoreTestResult", MockEndpoint.class);                   assertNotNull("Expected mock:SaharaCoreTestResult to exist", mock);
                  mock.reset();
                  mock.expectedMessageCount(1);

                // this is the problem
                  ProducerTemplate producerTemplate = camelctx.createProducerTemplate();

                  Map<String, Object> headers = new HashMap<String, Object>();


                  Exchange exchange= producerTemplate.send("jms:sahara", new Processor() {

                      public void process(final Exchange exchange) {

                        headers.put("test", "foo");
                        Map<String, Object> payload = new HashMap<String, Object>();
                        exchange.getIn().setHeaders(headers);
                      exchange.getIn().setBody(payload);
                      exchange.setPattern(ExchangePattern.InOut);

                      }
                  });

                assertThat("header is not bar", reply.getIn().getHeader("test"), equalTo("bar")) <--- this fails                 assertThat("header is not bar", reply.getOut().getHeader("test"), equalTo("bar")) <--- this fails

                List<Exchange> list = mock.getReceivedExchanges();
                assertThat("Expected exhange to return", list.size(),greaterThan(0));
                Exchange mockReply = list.get(0);
                assertThat("header is not bar", mockReply .getIn().getHeader("test"), equalTo("bar")) <--- this works

                MockEndpoint.assertIsSatisfied(5L, TimeUnit.SECONDS, mock);

              log.info("----->>  testProcessingRun Complete <<-----");
          }




+1 for getMessage() :)

On Mon, Feb 17, 2020 at 11:18 AM Giovanni Condello <
giovanni.conde...@coderit.it> wrote:

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