(骆驼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}]"试。
有什么想法吗?
答案 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而不做任何更改。我认为这个解决方案更好,因为百分号编码是表达敏感字符的标准方式。