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