Marci, Not sure I get the overall test scenario, but I think it's expected. "producerTemplate.send("jms:sahara", new Processor() {" is actually sending a message with MEP InOnly. So you get the exchange back before "jms:sahara" as treated the message, and thus can't assert any side effect from jms:sahara route.
producerTemplate.request(...) should set the MEP to InOut early enough so that your test is ok. Alex On Thu, Feb 20, 2020 at 3:47 AM Marci Wilken <kilidar...@gmail.com> wrote: > > 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 > >>>> > >>>> >