2011-07-19 26 views
1

私はXMPPサーバーに接続するクライアント、およびサーバーを持っているが、私に答えXMPPサーバーの応答文字列からXML文書へのJava、

<?xml version="1.0"?><stream:stream id="119B61FB" from="chat.facebook.com" version="1.0" xmlns="jabber:client" xmlns:stream="http://etherx.jabber.org/streams" xml:lang="en"> 

を送って、私はDocumentクラスでXMLDocumentを作成しよう:

try { 
     parser = factory.newDocumentBuilder(); 
     d = parser.parse(new ByteArrayInputStream(cleanXMLString.getBytes("UTF-8"))); 
    } catch (ParserConfigurationException ex) { 
     Logger.getLogger(XMPPManager.class.getName()).log(Level.SEVERE, null, ex); 
    } catch (SAXException ex) { 
     Logger.getLogger(XMPPManager.class.getName()).log(Level.SEVERE, null, ex); 
    } 

が、私はエラーを取得:

org.xml.sax.SAXParseException: XML document structures must start and end within the same entity of the SAXException.

への道があります文書が</stream:stream>タグで閉じられないのが普通であるため、この制限を無効にしますか?

答えて

1

これは、XMPPを実装する多くの疑問のうちの最初のものです。

James ClarkのXPのような増分XMLパーサーが必要です。 list on xmpp.orgからJavaのための既存のXMPPライブラリを使用する方が良いでしょう。

+0

デモを試しましたが、有効なXMLドキュメントを使用する必要があることがわかりました。私は手動で解析する前に、文字列に終了タグを追加して解決しました。 –

+1

そのアプローチはあなたのために数時間働きます。明日、XMLパーサに入れる完全なドキュメントと考えることができるときに分かりやすいように、動作しているが間違った角括弧のパーサを書いた後、新しいXMLが必要になることが分かります各スタンザのパーサ。メモリの*トン*です。真剣に、私は複数のXMPPクライアントとクライアントライブラリを書いてきました。ハートは、あなたがいる道を塞いでいます。 –

0

サーバーとクライアント間の通信にSmackを使用してみてください。それはあなたのためのすべての低レベルのコミュニケーションの世話をし、より機能的な抽象レベルでプログラムすることができます。

+0

Smack APIでは、私はカスタムSASLメカニズムの使い方を知らないので、X-FACEBOOK-PLATFORMです。 –

+0

独自のSASLメカニズムを追加:http://www.igniterealtime.org/builds/smack/docs/latest/javadoc/org/jivesoftware/smack/SASLAuthentication.html –

関連する問題