1

我尝试使用 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

4

1 回答 1

2

查看源代码,目前的实现似乎没有办法做到这一点。

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 类派生并覆盖创建连接方法。您可能需要覆盖 XMPP 组件中的一些其他类,以确保使用您的自定义端点而不是原始端点。

于 2012-08-19T08:57:13.200 回答