Apache Camel - подключайтесь к Gtalk

Я пытаюсь использовать Apache Camel для отправки мгновенного сообщения с использованием учетной записи gtalk.

Я использовал компонент Apache Camel Xmpp. Мне удалось подключиться к моей учетной записи jabber и успешно отправить сообщение. Для учетной записи Jabber я использую следующий URL

XMPP://abc@jabber.org/praveen@gmail.com пароль = секрет"

Это отправляет сообщение с моей учетной записи abc jabber на учетную запись praveen gmail. Но когда я пытаюсь отправить сообщение с моей учетной записи Gmail, это не удается, за исключением следующего

XMPP://talk.google.com:5222/abc@jabber.org SERVICENAME =gmail.com и пользователь = Praveen и пароль = секрет

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, чтобы заставить его работать. Но я не мог найти какой-либо параметр в документах верблюда, чтобы установить этот параметр.

Кто-нибудь успешно сделал это? Если да, не могли бы вы предоставить мне некоторую информацию об этом?

Спасибо, Паланивель Раджан Б

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, чтобы убедиться, что ваша исходная конечная точка используется вместо исходной.

Другие вопросы по тегам