Warum kann ich konvertieren nur eine Darstellung in eine Zeichenfolge einmal in Restlet?
Frage
Also, Ich versuche, eine Darstellung zu einem String oder einen String entweder mit dem getText () oder write () -Methode zu konvertieren. Es scheint, dass ich nur diese Methode aufrufen kann einmal erfolgreich auf einer Darstellung ... Wenn ich die Methode erneut aufrufen, gibt sie null oder eine leere Zeichenfolge auf den zweiten Anruf. Warum ist das? Ich würde erwarten, dass es die gleiche Sache jedes Mal zurück:
public void SomeMethod(Representation rep)
{
String repAsString = rep.getText(); // returns valid text for example: <someXml>Hello WOrld</someXml>
String repAsString2 = rep.getText(); // returns null... wtf?
}
Wenn ich „es falsch zu machen“, dann würde ich für alle Vorschläge offen, wie ich auf diese Daten erhalten kann.
Lösung
Die javadocs erklären diese:
Der Inhalt einer Darstellung kann mehrmals aufgerufen, wenn es eine ist stabil, leicht zugängliche Quelle, wie ein lokale Datei oder eine Zeichenfolge. Wenn die Darstellung wird über eine erhaltene temporäre Quelle wie ein Netzwerk Buchse, dessen Inhalt nur sein einmal abgerufen werden.
So vermutlich wird es direkt aus dem Netz oder etwas ähnliches gelesen werden.
Sie können dies überprüfen, indem isTransient()
aufrufen. Wenn Sie es in der Lage sein mehrfach zu lesen, vermutlich sollte man es in einen String konvertieren und dann eine neue Representation
aus dieser Zeichenfolge erstellen.
Andere Tipps
Es ist, weil in der Regel nicht die Darstellung nicht tatsächlich in der Input gelesen werden, bis sie es mit getText () fragen, und wenn Sie darum gebeten haben, werden alle Bytes gelesen wurden und in den String umgewandelt.
Dies ist die natürliche Implementierung für Effizienz: anstatt einen potenziell sehr großen String erstellen und dann die String Umwandlung in etwas Nützliches (ein JSON-Objekt, ein DOM-Baum, oder was auch immer), schreiben Sie Ihre Software auf dem Input zu arbeiten, anstatt , die Kosten für die Herstellung und das Lesens, dass die großen String zu vermeiden.
So zum Beispiel, wenn Sie eine große XML-Datei in einen Web-Service haben zu sein, können Sie die Input rechts in einen SAX-Parser ernähren.
(As @John Noten, ein StringRepresentation hüllt ein String, und kann so mehrmals gelesen werden. Aber Sie müssen einen Antrag der Darstellung liest, die die meisten wahrscheinlich ein InputRepresentation.)