Pertanyaan Camel: Bagaimana cara memasukkan ampersand sebagai data dalam URI (BUKAN sebagai pembatas)?


(Camel 2.9.2)

Kasus penggunaan sangat sederhana, tetapi saya tidak dapat menemukan jawabannya. Kode saya bermuara pada ini:

String user = "user";
String password = "foo&bar";

String uri = "smtp://hostname:25?username=" + user +
    "&password=" + password + 
    "&to=somthing@something.com"; // etc. You get the idea

from("seda:queue:myqueue").to(uri);

Camel melempar ResolveEndpointFailedException dengan "Unknown parameters = [{bar = null}]."

Jika saya mencoba "foo% 26bar," saya mendapatkan hasil yang sama.

Jika saya mencoba "foo & amp; bar" unta merespons dengan "Parameter tidak dikenal = [{amp; bilah = null}]."

Saya mencoba menggunakan URISupport untuk membuat URI. Ini lolos & ke% 26, dan kemudian saya mendapatkan "Parameter tidak dikenal = [{bar = null}]" lagi.

Ada ide?


4
2018-06-13 16:07


asal


Jawaban:


Mulai dari Camel 2.11 Anda bisa menggunakan sintaksis mentah

Contohnya:

.to("ftp:joe@myftpserver.com?password=RAW(se+re?t&23)&binary=true"

Dalam contoh di atas, kami telah menyatakan nilai kata sandi sebagai mentah, dan   kata sandi yang sebenarnya akan diketik, misalnya se + re? t & 23

https://cwiki.apache.org/confluence/display/CAMEL/How+do+I+configure+endpoints


7
2018-05-07 13:42



Anda dapat menentukan kata sandi sebagai bagian dari otoritas uri, misalnya di depan. Juga & harus diloloskan ke% 26, tetapi ada bug di Camel yang tidak menguraikan nilai yang lolos ke sumur. Coba 2.10 saat keluar.


1
2018-06-14 04:11



Itu RAW() sintaks bekerja, namun itu adalah sintaks milik Camel. Dalam usecase kami terbebani setelah pemrosesan URI.

Kami menggunakan solusi alternatif: komponen dikonfigurasi sebagai menggunakan URI mentah (Component.useRawUri() == true). Parameter komponen kemudian hanya dikodekan sekali (foo%26bar) dan melewati Unta tanpa perubahan. Saya menganggap solusi ini lebih baik karena enkode tanda-persen adalah cara standar untuk mengekspresikan karakter sensitif.


0
2018-01-21 14:37