@Override
    protected Document getStreamHeader() {
        final Element open = DocumentHelper.createElement(QName.get("open", FRAMING_NAMESPACE));
        final Document document = DocumentHelper.createDocument(open);
        document.setXMLEncoding(StandardCharsets.UTF_8.toString());
        open.addAttribute("from", XMPPServer.getInstance().getServerInfo().getXMPPDomain());
        open.addAttribute("id", session.getStreamID().toString());
        open.addAttribute(QName.get("lang", Namespace.XML_NAMESPACE), session.getLanguage().toLanguageTag());
        open.addAttribute("version", "1.0");

        return document;
    }
A {@link org.jivesoftware.openfire.net.StanzaHandler} that is able to process the specific framing that is used by
clients connecting via websockets.

@author Guus der Kinderen, guus@goodbytes.nl
@see <a href="https://www.rfc-editor.org/rfc/rfc7395.html">RFC 7395:  An Extensible Messaging and Presence Protocol (XMPP) Subprotocol for WebSocket</a>
xmppserver/src/main/java/org/jivesoftware/openfire/websocket/WebSocketClientStanzaHandler.java