के अंत में दोनों अनुरोध और उत्तर संदेश तक पहुंचें, मैं अपने मार्ग के अंत में अनुरोध और प्रतिक्रिया संदेश दोनों को संसाधित करना चाहता हूं। हालांकि, मुझे मूल अनुरोध संदेश तक पहुंचने का तरीका नहीं दिख रहा है।अपाचे कैमल: मार्ग
मुझे भयानक लग रहा है कि मैं कुछ बुनियादी अवधारणाओं के साथ संघर्ष कर रहा हूं।
यहाँ डीएसएल में एक साधारण उदाहरण के मार्ग मेरी समस्या की रूपरेखा तैयार करने (streamCaching पूरे संदर्भ के लिए सक्षम किया गया है) है:
from("activemq:queue:myQueue")
.to("log:" + getClass().getName() + "?showOut=true")
.to("http://localhost:8080/someBackend")
.log("Now in.Body returns this: ${in.body} and out.Body this: ${out.body}")
.to("log:" + getClass().getName() + "?showOut=true");
यहाँ (बेहतर पढ़ने के लिए संपादित लाइन टूट जाता है) मेरी लॉग से एक के अनुसार अंश है । जैसा कि कोई देख सकता है, http सर्वर उत्तर देने के बाद मूल SOAP संदेश खो जाता है, और एसओएपी प्रतिक्रिया ऑब्जेक्ट संदेश के बॉडी में संग्रहीत होता है।
2012-09-25 17:28:08,312 local.bar.foo.MyRouteBuilder INFO -
Exchange[ExchangePattern:InOut, BodyType:byte[],
Body:<?xml version="1.0" encoding="UTF-8"?><env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"><env:Header /><env:Body><urn:someRequest xmlns:urn="http://foo.bar.local/ns"></urn:someRequest></env:Body></env:Envelope>,
Out: null]
2012-09-25 17:28:08,398 org.apache.camel.component.http.HttpProducer DEBUG -
Executing http POST method: http://localhost:8080/someBackend
2012-09-25 17:28:09,389 org.apache.camel.component.http.HttpProducer DEBUG -
Http responseCode: 200
2012-09-25 17:28:09,392 route2 INFO -
Now in.Body returns this: <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><ns2:someResponse xmlns:ns2="http://foo.bar.local/ns"</ns2:someResponse></soap:Body></soap:Envelope>
and out.Body this:
2012-09-25 17:28:09,392 local.bar.foo.MyRouteBuilder INFO -
Exchange[ExchangePattern:InOut,
BodyType:org.apache.camel.converter.stream.InputStreamCache,
Body:[Body is instance of org.apache.camel.StreamCache],
Out: null]
मुझे उम्मीद है कि किसी और में शामिल होगा। किसी को पूरे रास्ते में संरक्षित किया जाएगा?
वैकल्पिक समाधान मैं विचार कर रहा हूँ: Correlation Identifier पैटर्न के
- उपयोग करें दोनों अनुरोध और जबाब मेल खाते हैं। लेकिन क्या यह संदेश निकायों को भी संरक्षित करेगा? साथ ही, मेरे अनुरोध/उत्तर संदेशों में सहसंबंध के लिए अद्वितीय पहचानकर्ता नहीं हैं।
- जो http बैकएंड करने के लिए कॉल करता है एक कस्टम सेम, लिखें, दोनों अनुरोध पर कार्रवाई करने और उत्तर वस्तुओं (लेकिन यह मूल रूप से एक नो-ऊंट समाधान है, पहिया और इसलिए पसंदीदा नहीं पुनर्रचना)
पहले से ही में विफल रहा है दृष्टिकोण:
मैं अपने मार्ग के अंत में इस तरह की एक प्रोसेसर का उपयोग कर मूल अनुरोध संदेश पहुँचने का प्रयास किया है, कोई सफलता के साथ:
process(new Processor() {
@Override
public void process(Exchange exchange) throws Exception {
Message originalInMessage = exchange.getUnitOfWork().getOriginalInMessage();
logger.debug(originalInMessage.getBody(String.class));
logger.debug(exchange.getIn().getBody(String.class));
}
});
किसी भी मदद
मुझे इसी तरह की स्थिति का सामना करना पड़ा, जैसा हल किया गया: स्ट्रिंग पेलोड = नया स्ट्रिंग ((बाइट []) exchange.getUnitOfWork()। GetOriginalInMessage()। GetBody()) – dkb