1

私はxmlを送受信するアプリを書いています。

メッセージは DOM で生成され、定期的に (2 秒に 1 回) サーバーに送信されます。メッセージを取得すると (いくつかのパラメーターに依存しますが、起動ごとに一定です)、サーバーはエラーで応答します: XML document structures must start and end within the same entity- おそらく、受信したメッセージの最後が途切れます。エラーが連続している場合もあれば、通常のメッセージと混じっている場合もあります。

メッセージは正しく形成されます (そうでなければ、最初からエラーが発生する可能性があります)。何らかの形でメッセージの長さに関連していると思います。ブレークで約 9800 シンボルです。

同様のエラーの投稿も見つけました: SAXParseException: XML document structure must start and end within the same entity , but it different from mine.

ここにコードの一部がありますが、何か間違っている可能性があります。

ドキュメント クラスを生成しています:

public class DOMConstructor {

private Element actions;
Document document = null;

DOMConstructor (String key) throws ParserConfigurationException, SAXException, IOException {

    DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
    DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();

    document = documentBuilder.newDocument();
    Element rootElement = document.createElement("request");
    document.appendChild(rootElement);


    Element token = document.createElement("token");
    token.appendChild(document.createTextNode(key));
    rootElement.appendChild(token);


    Element actions = document.createElement("actions");
    rootElement.appendChild(actions);

    this.actions = actions;
}


public StreamResult getResultXml (OutputStream out) throws TransformerException, FileNotFoundException {

    TransformerFactory transformerFactory = TransformerFactory.newInstance();
    Transformer transformer = transformerFactory.newTransformer();

    DOMSource domSource = new DOMSource(document);

    StreamResult streamResult = new StreamResult(out);
    transformer.transform(domSource, streamResult);

    return streamResult;
}


protected void addAction (String fromId, String toId, String droids_num) {      
    Element action = document.createElement("action");
    actions.appendChild(action);

    Element from = document.createElement("from");
    from.appendChild(document.createTextNode(fromId));
    action.appendChild(from);

    Element to = document.createElement("to");
    to.appendChild(document.createTextNode(toId));
    action.appendChild(to);

    Element units = document.createElement("unitscount");
    units.appendChild(document.createTextNode(droids_num));
    action.appendChild(units);
}       
}

XML の送信:

public void sendData (XMLData xml) throws UnknownHostException, IOException, TransformerException, ParserConfigurationException, SAXException {
    conn = new Socket(address, port);       
    OutputStream out = new BufferedOutputStream(conn.getOutputStream());
    xml.sendData(out, true);

}
4

0 に答える 0