Tuyadan foydalanib, faylga veb-xizmat javobini qanday yozish mumkin?

http://localhost: 8089/mock/success manzilida joylashgan REST veb-brauzeridan javob olishga harakat qilaman va javobni Camel dan foydalanib faylga yozing. Mana, java da yozgan marshrut,

from("direct:start")
    .to("http://localhost:8089/mock/success")
    .to("file://D:/tmp/restoutput");

Mana bu yo'lni qanday qilib chaqiraman,

CamelContext ctx = new DefaultCamelContext();
RouteBuilder routebuilder = new RestToFileRoute();
System.out.println("invokeRestToFileRoute() started.");
try {
    ctx.addRoutes(routebuilder);
    ctx.start();
    Thread.sleep(1000);
    ctx.stop();
} catch (Exception e) {
    e.printStackTrace();
}

Hech qanday istisno yo'q, lekin faylga hech narsa qo'shilmaydi. Men tuya uchun juda yangi bo'lib qoldim, shuning uchun bu muammoni aniqlay olmayapman. Buni menga kimdir yordam berishi mumkinmi?

Takliflar asosida taymerni ishlatib, faylga yozish paytida null ko'rsatgich istisnosini olaman. Mana, o'zgartirilgan kod -

from("timer://simpleTimer?repeatCount=1")
    .to("http://localhost:8089/mock/success")
    .process(exchange -> {System.out.println("Message: " + exchange.getOut().getBody(String.class));})//Output: "Message: null"
    .to("file://D:/tmp/restoutput");
0
Menimcha, veb-xizmat javobni null sifatida yozib chiqqani uchun chaqirilmaydi. .process (o'zgarish -> {System.out.println ("Message:" + exchange.getOut ()) - getBody (String.class));
qo'shib qo'ydi muallif Abhishek, manba
Menimcha, veb-xizmat javobni null sifatida yozib chiqqani uchun chaqirilmaydi. .process (o'zgarish -> {System.out.println ("Message:" + exchange.getOut ()) - getBody (String.class));
qo'shib qo'ydi muallif Abhishek, manba
@SoucianceEqdamRashti: Taymerni ishlata olmayapman. direct: start ga kelsak, hujjatlarni noto'g'ri talqin qildim.
qo'shib qo'ydi muallif Abhishek, manba
@SoucianceEqdamRashti: Taymerni ishlata olmayapman. direct: start ga kelsak, hujjatlarni noto'g'ri talqin qildim.
qo'shib qo'ydi muallif Abhishek, manba
exchange.getIn (). GetBody (String.class)) bo'lishi kerak. Sizga exchange.getOut shart emas
qo'shib qo'ydi muallif Souciance Eqdam Rashti, manba
exchange.getIn (). GetBody (String.class)) bo'lishi kerak. Sizga exchange.getOut shart emas
qo'shib qo'ydi muallif Souciance Eqdam Rashti, manba
@Claus kabi so'zlar bilan, marshrutingizni qanday kiritishingiz kerak? to'g'ridan-to'g'ri boshlash faqatgina xotirada saqlanadigan navbat. Unga biror narsa kerak. Oddiylik uchun faqatgina faylni olishingiz, uni marshrutga tashlashingiz va davom etishingiz mumkin. Yoki taymerni ishlating.
qo'shib qo'ydi muallif Souciance Eqdam Rashti, manba
exchange.getIn (). GetBody (String.class)) bo'lishi kerak. Sizga exchange.getOut shart emas
qo'shib qo'ydi muallif Souciance Eqdam Rashti, manba
Birinchi .to() dan so'ng logni oching va faylni yozishdan oldin tananing va sarlavhalarning nima ekanligini ko'ring. Taymer ishlamasa nimani nazarda tutasiz? Bu tetiklantirilmaydi?
qo'shib qo'ydi muallif Souciance Eqdam Rashti, manba
Birinchi .to() dan so'ng logni oching va faylni yozishdan oldin tananing va sarlavhalarning nima ekanligini ko'ring. Taymer ishlamasa nimani nazarda tutasiz? Bu tetiklantirilmaydi?
qo'shib qo'ydi muallif Souciance Eqdam Rashti, manba
@Claus kabi so'zlar bilan, marshrutingizni qanday kiritishingiz kerak? to'g'ridan-to'g'ri boshlash faqatgina xotirada saqlanadigan navbat. Unga biror narsa kerak. Oddiylik uchun faqatgina faylni olishingiz, uni marshrutga tashlashingiz va davom etishingiz mumkin. Yoki taymerni ishlating.
qo'shib qo'ydi muallif Souciance Eqdam Rashti, manba

7 javoblar

You need to either send a message to the direct endpoint, or if you just want to call that endpoint one time, you can use the timer and set its repeatCount=1 to run once only: http://camel.apache.org/timer

To'g'ridan-to'g'ri so'nggi nuqta qo'ng'iroq qilish uchun ProducerTemplate dan foydalanishingiz mumkin. Misol uchun, tuya hujjatiga qarang.

1
qo'shib qo'ydi
Avvaliga shunaqangi sodda edimki, siz aytmoqchi bo'lgan narsalarni tushunmadim. Rahmat.
qo'shib qo'ydi muallif Abhishek, manba
Javobni ProducerTemplate dan foydalanib olish imkoniyatiga ega bo'laman. Lekin men hali ham taymerni ishlatolmayapman. Kodni qo'shyapman. Iltimos, nima noto'g'ri ekanligini bilasizmi?
qo'shib qo'ydi muallif Abhishek, manba
Faqat http deb chaqirish va faylga saqlash bo'lsangiz, marshrutni tavsiya qilmayman. HTTP-ni chaqirish uchun ProducerTemplate-dan foydalaning va faylni saqlab qo'ying. Siz tanani faqat HTTP javobidan tanasi sifatida faylni so'nggi nuqtaga ishlab chiqaruvchi shablon bilan yuborishingiz mumkin
qo'shib qo'ydi muallif Claus Ibsen, manba

You need to either send a message to the direct endpoint, or if you just want to call that endpoint one time, you can use the timer and set its repeatCount=1 to run once only: http://camel.apache.org/timer

To'g'ridan-to'g'ri so'nggi nuqta qo'ng'iroq qilish uchun ProducerTemplate dan foydalanishingiz mumkin. Misol uchun, tuya hujjatiga qarang.

1
qo'shib qo'ydi
Avvaliga shunaqangi sodda edimki, siz aytmoqchi bo'lgan narsalarni tushunmadim. Rahmat.
qo'shib qo'ydi muallif Abhishek, manba
Javobni ProducerTemplate dan foydalanib olish imkoniyatiga ega bo'laman. Lekin men hali ham taymerni ishlatolmayapman. Kodni qo'shyapman. Iltimos, nima noto'g'ri ekanligini bilasizmi?
qo'shib qo'ydi muallif Abhishek, manba
Faqat http deb chaqirish va faylga saqlash bo'lsangiz, marshrutni tavsiya qilmayman. HTTP-ni chaqirish uchun ProducerTemplate-dan foydalaning va faylni saqlab qo'ying. Siz tanani faqat HTTP javobidan tanasi sifatida faylni so'nggi nuqtaga ishlab chiqaruvchi shablon bilan yuborishingiz mumkin
qo'shib qo'ydi muallif Claus Ibsen, manba

You need to either send a message to the direct endpoint, or if you just want to call that endpoint one time, you can use the timer and set its repeatCount=1 to run once only: http://camel.apache.org/timer

To'g'ridan-to'g'ri so'nggi nuqta qo'ng'iroq qilish uchun ProducerTemplate dan foydalanishingiz mumkin. Misol uchun, tuya hujjatiga qarang.

1
qo'shib qo'ydi
Avvaliga shunaqangi sodda edimki, siz aytmoqchi bo'lgan narsalarni tushunmadim. Rahmat.
qo'shib qo'ydi muallif Abhishek, manba
Javobni ProducerTemplate dan foydalanib olish imkoniyatiga ega bo'laman. Lekin men hali ham taymerni ishlatolmayapman. Kodni qo'shyapman. Iltimos, nima noto'g'ri ekanligini bilasizmi?
qo'shib qo'ydi muallif Abhishek, manba
Faqat http deb chaqirish va faylga saqlash bo'lsangiz, marshrutni tavsiya qilmayman. HTTP-ni chaqirish uchun ProducerTemplate-dan foydalaning va faylni saqlab qo'ying. Siz tanani faqat HTTP javobidan tanasi sifatida faylni so'nggi nuqtaga ishlab chiqaruvchi shablon bilan yuborishingiz mumkin
qo'shib qo'ydi muallif Claus Ibsen, manba

Hujjatlarga muvofiq, http-tarkibiy qismiga javob birja tashqi qismida saqlanadi. Dosyaning bo'sh bo'lishi sababi uning qismini yozib olishidir.

Siz tananing ichki qismini nusxa ko'chirish uchun shunday bir narsani sinashingiz mumkin:

.setBody(simple("${out.body}"))
.to("file://D:/tmp/restoutput");

Men Java DSL-da marshrutlarni yozish uchun foydalanmayapman, lekin agar men xato qilmasam, shunga o'xshash narsaga qarash kerak.

1
qo'shib qo'ydi
Buni qanday ishlataman?
qo'shib qo'ydi muallif Abhishek, manba

Hujjatlarga muvofiq, http-tarkibiy qismiga javob birja tashqi qismida saqlanadi. Dosyaning bo'sh bo'lishi sababi uning qismini yozib olishidir.

Siz tananing ichki qismini nusxa ko'chirish uchun shunday bir narsani sinashingiz mumkin:

.setBody(simple("${out.body}"))
.to("file://D:/tmp/restoutput");

Men Java DSL-da marshrutlarni yozish uchun foydalanmayapman, lekin agar men xato qilmasam, shunga o'xshash narsaga qarash kerak.

1
qo'shib qo'ydi
Buni qanday ishlataman?
qo'shib qo'ydi muallif Abhishek, manba

Hujjatlarga muvofiq, http-tarkibiy qismiga javob birja tashqi qismida saqlanadi. Dosyaning bo'sh bo'lishi sababi uning qismini yozib olishidir.

Siz tananing ichki qismini nusxa ko'chirish uchun shunday bir narsani sinashingiz mumkin:

.setBody(simple("${out.body}"))
.to("file://D:/tmp/restoutput");

Men Java DSL-da marshrutlarni yozish uchun foydalanmayapman, lekin agar men xato qilmasam, shunga o'xshash narsaga qarash kerak.

1
qo'shib qo'ydi
Buni qanday ishlataman?
qo'shib qo'ydi muallif Abhishek, manba

Shunday qilib, nihoyat, barcha javoblar yordamida ishlashga majbur bo'ldi. Quyida oxirgi ish kodi ko'rsatilgan.

  1. Using Routes-

    from("timer://simpleTimer?repeatCount=1")
        .to("http://localhost:8089/mock/success")
        .process(exchange -> {
              String response = exchange.getIn().getBody(String.class);
              exchange.getOut().setBody(msg);
         })
        .to("file://D:/tmp/?fileName=restoutput");//This was missing earlier
    
  2. Using ProducerTemplate-

    ProducerTemplate template = new DefaultCamelContext().createProducerTemplate();
    Exchange exchange = template.request("http://localhost:8089/mock/success", exchangeObjcet -> {});
    String response = exchange.getOut().getBody(String.class)
    

Ikkinchisi faylni yozish uchun yozmaydi. Uni java standart fayllaridan foydalanib, osongina bajarish mumkin.

0
qo'shib qo'ydi
O'ylaymanki, men noob emasman! Uchun uchun rahmat: @SoucianceEqdamRashti
qo'shib qo'ydi muallif Abhishek, manba
Men sizni tashqariga almashtirishni nima uchun undersatthend qilmayapman. O'zingizning hayot tsiklingiz orqali almashtirishingiz mumkin.
qo'shib qo'ydi muallif Souciance Eqdam Rashti, manba