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