Camel:如何在&URI(不作为分隔符)中包含&符作为数据?

时间:2012-06-13 16:07:59

标签: java apache-camel

(骆驼2.9.2)

非常简单的用例,但我似乎无法找到答案。我的代码归结为:

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抛出ResolveEndpointFailedException,其中包含"未知参数= [{bar = null}]。"

如果我尝试" foo%26bar,"我得到了相同的结果。

如果我尝试" foo& amp; bar"骆驼以"未知参数= [{amp; bar = null}]回应。"

我尝试使用URISupport创建URI。它逃脱了&至%26,然后我得到"未知参数= [{bar = null}]"试。

有什么想法吗?

3 个答案:

答案 0 :(得分:8)

从Camel 2.11开始,您可以使用原始语法

例如:

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

  

在上面的例子中,我们将密码值声明为raw,并且   实际密码将是键入的,例如se + re?t& 23

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

答案 1 :(得分:1)

您可以将密码指定为uri权限的一部分,例如在前面。 还有&应该被转义为%26,但是Camel中有一个错误,它没有解析转义值。当它出局时尝试2.10。

答案 2 :(得分:0)

RAW()语法有效,但它是Camel专有语法。在我们的用例中,它在处理URI后负担。

我们使用了替代解决方案:配置为使用原始URI(Component.useRawUri() == true)的组件。然后,组件参数只需编码一次(foo%26bar)并通过Camel而不做任何更改。我认为这个解决方案更好,因为百分号编码是表达敏感字符的标准方式。