Consider the following "simple" route:
from("jetty:http://0.0.0.0:8089/test/rest?matchOnUriPrefix=true")
.onCompletion()
.to("log:sync")
.end()
.to("http://localhost:8099?throwExceptionOnFailure=false&bridgeEndpoint=true");
With tracing enabled, the following log occurs when the http endpoint is hit
with curl. (I've numbered the entries so I can refer to them in my comments
below).
1)
Mar 28, 2010 6:28:44 PM org.apache.camel.processor.Logger process
INFO: 50ec6397-c4b5-4837-b642-86ae563a6b6c >>> ()
from(http://0.0.0.0:8089/test/rest) --> <<< Pattern:InOut,
Headers:{Host=localhost:8089,
CamelHttpUrl=http://localhost:8089/test/rest/v1/ping,
CamelHttpUri=/test/rest/v1/ping, CamelHttpPath=/test/rest/v1/ping,
CamelHttpCharacterEncoding=null, CamelHttpQuery=null, Content-Type=null,
CamelHttpMethod=GET, User-Agent=curl/7.19.7 (i386-apple-darwin10.2.0)
libcurl/7.19.7 OpenSSL/0.9.8l zlib/1.2.3, Accept=*/*}, BodyType:null,
Body:null
2)
Mar 28, 2010 6:28:44 PM org.apache.camel.processor.Logger process
INFO: 50ec6397-c4b5-4837-b642-86ae563a6b6c >>> (route1)
from(http://0.0.0.0:8089/test/rest) --> http://localhost:8099 <<<
Pattern:InOut,
Headers:{CamelHttpUrl=http://localhost:8089/test/rest/v1/ping,
CamelHttpCharacterEncoding=null, CamelHttpQuery=null, Host=localhost:8089,
User-Agent=curl/7.19.7 (i386-apple-darwin10.2.0) libcurl/7.19.7
OpenSSL/0.9.8l zlib/1.2.3, CamelHttpMethod=GET,
CamelHttpPath=/test/rest/v1/ping, CamelHttpUri=/test/rest/v1/ping,
Accept=*/*, Content-Type=null}, BodyType:null, Body:null
Mar 28, 2010 6:28:57 PM org.apache.camel.processor.Logger process
3)
INFO: 50ec6397-c4b5-4837-b642-86ae563a6b6c >>> (route1)
from(http://0.0.0.0:8089/test/rest) --> http://localhost:8099 <<< (OUT),
Pattern:InOut, Headers:{Content-Type=text/plain,
CamelHttpPath=/test/rest/v1/ping,
CamelHttpUrl=http://localhost:8089/test/rest/v1/ping,
Transfer-Encoding=chunked, CamelHttpUri=/test/rest/v1/ping,
CamelHttpMethod=GET, CamelHttpResponseCode=200, Cache-Control=private,
x-gzip-ok="", Host=localhost:8089, CamelHttpQuery=null, X-XSS-Protection=0,
CamelHttpCharacterEncoding=null, Accept=*/*, Date=Mon, 29 Mar 2010 01:28:58
GMT, Server=Google Frontend, User-Agent=curl/7.19.7
(i386-apple-darwin10.2.0) libcurl/7.19.7 OpenSSL/0.9.8l zlib/1.2.3},
BodyType:null, Body:null, OutBodyType:java.io.ByteArrayInputStream,
OutBody:PONG
Mar 28, 2010 6:28:57 PM org.apache.camel.processor.Logger process
4)
INFO: 1b363ae4-1e94-409f-bef4-5ba76b163f3e >>> (route1)
OnCompletion[50ec6397-c4b5-4837-b642-86ae563a6b6c] --> log://sync <<<
(OUT), Pattern:InOnly, Headers:{User-Agent=curl/7.19.7
(i386-apple-darwin10.2.0) libcurl/7.19.7 OpenSSL/0.9.8l zlib/1.2.3,
Content-Type=null, CamelHttpUrl=http://localhost:8089/test/rest/v1/ping,
CamelHttpPath=/test/rest/v1/ping, Accept=*/*, CamelHttpMethod=GET,
CamelHttpUri=/test/rest/v1/ping, CamelHttpQuery=null,
CamelHttpCharacterEncoding=null, Host=localhost:8089}, BodyType:null,
Body:null, OutBodyType:org.apache.camel.converter.stream.InputStreamCache,
OutBody:
5)
Mar 28, 2010 6:28:57 PM org.apache.camel.processor.Logger process
INFO: Exchange[BodyType:null, Body:null]
6)
Mar 28, 2010 6:28:57 PM org.apache.camel.processor.Logger process
INFO: 1b363ae4-1e94-409f-bef4-5ba76b163f3e >>> (route1)
OnCompletion[50ec6397-c4b5-4837-b642-86ae563a6b6c] --> log://sync <<<
(OUT), Pattern:InOnly, Headers:{User-Agent=curl/7.19.7
(i386-apple-darwin10.2.0) libcurl/7.19.7 OpenSSL/0.9.8l zlib/1.2.3,
Content-Type=null, CamelHttpUrl=http://localhost:8089/test/rest/v1/ping,
CamelHttpPath=/test/rest/v1/ping, Accept=*/*, CamelHttpMethod=GET,
CamelHttpUri=/test/rest/v1/ping, CamelHttpQuery=null,
CamelHttpCharacterEncoding=null, Host=localhost:8089}, BodyType:null,
Body:null, OutBodyType:org.apache.camel.converter.stream.InputStreamCache,
OutBody:PONG
---
I understand entries 2 and 3, (the IN and OUT of the main route). However I
have a number of questions on the others:
a) What is entry 1 representing (and why does it have an "empty" to()
endpoint)?
b) Why are their two log entries for the onCompletion portion (4 and 6)? I
notice that one contains the outBody (PONG) and the other does not.
c) I want to add a predicate for onComplete based on
Exchange.HTTP_RESPONSE_CODE. This is in the regular response (3), but it
doesn't appear in any of the onCompletion entries, so how do I make
decisions based on this?
Thanks
--
View this message in context:
http://old.nabble.com/Help-with-onCompletion%28%29-tp28064287p28064287.html
Sent from the Camel - Users mailing list archive at Nabble.com.