Search in sources :

Example 36 with DocumentException

use of org.dom4j.DocumentException in project zm-mailbox by Zimbra.

the class CrossServerNotification method getHandler.

@Override
public MessageHandler getHandler() {
    return new MessageHandler() {

        @Override
        public void handle(Message m, String clientId) {
            if (!(m instanceof CrossServerNotification)) {
                return;
            }
            CrossServerNotification message = (CrossServerNotification) m;
            Collection<Session> sessions = SessionCache.getSoapSessions(m.getRecipientAccountId());
            if (sessions == null) {
                log.warn("no active sessions for account %s", m.getRecipientAccountId());
                return;
            }
            RemoteNotifications soapNtfn = null, jsonNtfn = null;
            try {
                org.dom4j.Document dom = org.dom4j.DocumentHelper.parseText(message.getPayload());
                soapNtfn = new RemoteNotifications(Element.convertDOM(dom.getRootElement(), XMLElement.mFactory));
                jsonNtfn = new RemoteNotifications(Element.convertDOM(dom.getRootElement(), JSONElement.mFactory));
            } catch (DocumentException e) {
                log.warn("cannot parse notification from %s", clientId, e);
                return;
            }
            for (Session session : sessions) {
                log.debug("notifying session %s", session.toString());
                SoapSession ss = (SoapSession) session;
                SoapProtocol responseProtocol = ss.getResponseProtocol();
                if (responseProtocol == SoapProtocol.Soap11 || responseProtocol == SoapProtocol.Soap12) {
                    ss.addRemoteNotifications(soapNtfn);
                } else if (responseProtocol == SoapProtocol.SoapJS) {
                    ss.addRemoteNotifications(jsonNtfn);
                }
                ss.forcePush();
            }
        }
    };
}
Also used : SoapSession(com.zimbra.cs.session.SoapSession) RemoteNotifications(com.zimbra.cs.session.SoapSession.RemoteNotifications) DocumentException(org.dom4j.DocumentException) SoapProtocol(com.zimbra.common.soap.SoapProtocol) SoapSession(com.zimbra.cs.session.SoapSession) Session(com.zimbra.cs.session.Session)

Aggregations

DocumentException (org.dom4j.DocumentException)36 Document (org.dom4j.Document)20 SAXReader (org.dom4j.io.SAXReader)19 Element (org.dom4j.Element)13 IOException (java.io.IOException)8 StringReader (java.io.StringReader)8 File (java.io.File)7 ConfigException (com.zimbra.common.localconfig.ConfigException)4 ArrayList (java.util.ArrayList)4 LocalConfig (com.zimbra.common.localconfig.LocalConfig)3 ServiceException (com.zimbra.common.service.ServiceException)3 ByteArrayInputStream (java.io.ByteArrayInputStream)3 Server (com.zimbra.cs.account.Server)2 ByteArrayOutputStream (java.io.ByteArrayOutputStream)2 HashMap (java.util.HashMap)2 List (java.util.List)2 XMLWriter (org.dom4j.io.XMLWriter)2 LoginCms (afip.wsaa.wsdl.LoginCms)1 NonNull (com.android.annotations.NonNull)1 DirectoryInput (com.android.build.api.transform.DirectoryInput)1