Apache Camel - 连接到 Gtalk
Posted
技术标签:
【中文标题】Apache Camel - 连接到 Gtalk【英文标题】:Apache Camel - Connect to Gtalk 【发布时间】:2012-08-19 06:11:28 【问题描述】:我尝试使用 apache camel 使用 gtalk 帐户发送即时消息。
我使用了 apache camel xmpp 组件。我能够连接到我的 jabber 帐户并成功发送消息。对于 jabber 帐户,我使用的是以下网址
xmpp://abc@jabber.org/praveen@gmail.com?password=secret"
这会从我的 abc jabber 帐户向 praveen gmail 帐户发送一条消息。但是当我尝试从我的 gmail 帐户发送消息时,它会失败并出现以下异常
xmpp://talk.google.com:5222/abc@jabber.org?serviceName=gmail.com&user=praveen&password=secret
Caused by: SASL authentication PLAIN failed: invalid-authzid:
at org.jivesoftware.smack.SASLAuthentication.authenticate(SASLAuthentication.java:337)
at org.jivesoftware.smack.XMPPConnection.login(XMPPConnection.java:203)
at org.apache.camel.component.xmpp.XmppEndpoint.createConnection(XmppEndpoint.java:169)
at org.apache.camel.component.xmpp.XmppPrivateChatProducer.doStart(XmppPrivateChatProducer.java:105)
at org.apache.camel.support.ServiceSupport.start(ServiceSupport.java:60)
at org.apache.camel.util.ServiceHelper.startService(ServiceHelper.java:62)
at org.apache.camel.impl.ProducerCache.doGetProducer(ProducerCache.java:387)
... 7 more
当我对此进行一些研究时,我发现 Google 不支持 SASL。所以我需要设置
setSASLAuthenticationEnabled(false);
在 org.jivesoftware.smack.ConnectionConfiguration 上让它工作。但是我在骆驼文档中找不到任何参数来设置这个参数。
有没有人成功做到这一点?如果是的话,你能提供一些关于这方面的信息吗?
谢谢, 帕拉尼维尔拉詹 B
【问题讨论】:
【参考方案1】:查看源码,目前的实现似乎没有办法做到这一点。
if (port > 0)
if (getServiceName() == null)
connection = new XMPPConnection(new ConnectionConfiguration(host, port));
else
connection = new XMPPConnection(new ConnectionConfiguration(host, port, serviceName));
else
connection = new XMPPConnection(host);
将此功能添加到 XMPP 组件应该不难(在这种情况下,您可能需要为此添加补丁,因此它可能会进入骆驼的未来版本),或者您可以从 XmppEndpoint 类派生并覆盖 createConnection 方法。您可能需要覆盖 XMPP 组件中的其他一些类,以确保使用您的自定义端点而不是原始端点。
【讨论】:
谢谢彼得。我会向 apache camel 团队提交补丁。 是的,我们喜欢贡献和补丁。你可以在这里阅读一些关于如何贡献的信息:camel.apache.org/contributing.html以上是关于Apache Camel - 连接到 Gtalk的主要内容,如果未能解决你的问题,请参考以下文章
无法使用 node.js 和 node-xmpp 连接到 GTalk
Smack 连接到 Google 的 XMPP 服务 (gtalk) 会引发异常“SASLError using PLAIN: not-authorized”