2011-01-12 3 views
2

In C#, ich mache eine HTTP-Post und erhalte eine XML in der Antwort in Form eines Byte-Array (bret), die ich in eine Klasse Deserialisieren leicht:Wie kann das XML-Ergebnis aus einer HTTP-POST-Anfrage in Java deserialisiert werden?

MemoryStream m = new MemoryStream(bret); 
XmlSerializer s = new XmlSerializer(typeof(TransactionResults)); 
TransactionResults t = (TransactionResults)s.Deserialize(m); 

Was die richtig wären und einfachste Möglichkeit, das gleiche in Java zu tun?

+0

Fühlen Sie sich frei, den Titel in etwas korrekteres zu redigieren – juan

Antwort

1

Machen Sie Ihre POST-Anfrage über so etwas wie

http://www.exampledepot.com/egs/java.net/post.html

oder Httpclient verwenden:

http://hc.apache.org/httpclient-3.x/methods/post.html

Je nachdem, wie Sie Ihre Daten serialisiert haben, können Sie einen entsprechenden Deserialisierer verwenden sollten . XStream ist eine gute, einfache Wahl für solche Aufgaben:

http://x-stream.github.io/

All dies ist freilich mehr Code, aber dies ist ein typischer Kompromiss von .NET vs Java-Systeme (obwohl es mehr Code ist, gibt es Vorteile für Java).

0

Mit X-Stream - für eine GET-Anfrage:

XStream xstream = new XStream(new DomDriver()); 
xstream.alias("person", Person.class); 
URL url = new URL("www.foo.bar/person/name/foobar"); 
BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream())); 
Person foobar = (Person) xstream.fromXML(in); 

Sie den Anruf ändern kann für eine post url.

0

JAXB is the Java standard (JSR-222) für Objekte zu XML mit mehreren Implementierungen Umwandlung: Metro, EclipseLink MOXy (Ich bin die Tech-Blei), Apache JaxMe.

String uri = 
    "http://localhost:8080/CustomerService/rest/customers/1"; 
URL url = new URL(uri); 
HttpURLConnection connection = 
    (HttpURLConnection) url.openConnection(); 
connection.setRequestMethod("GET"); 
connection.setRequestProperty("Accept", "application/xml"); 

JAXBContext jc = JAXBContext.newInstance(Customer.class); 
InputStream xml = connection.getInputStream(); 
Customer customer = 
    (Customer) jc.createUnmarshaller().unmarshal(xml); 

connection.disconnect(); 

Der obige Code Probe stammt von::

Für eine comparsion von JAXB und XStream

Die HTTP-Operationen können wie in Java unter Verwendung von Code zugegriffen werden siehe:

0

Wenn Sie Ihr Ergebnis in Klassen nicht abbilden wollen, möchten Sie vielleicht Resty auszuchecken. Es macht den Zugriff auf JSON, XML oder einen anderen Datentyp zu einem einzigen Liner. Hier ist Code, der den Slashdot RSS als XML analysiert und alle verknüpften Artikel druckt.

Resty r = new Resty(); 
NodeList nl = r.xml("http://rss.slashdot.org/Slashdot/slashdotGamesatom").get("feed/entry/link"); 
for (int i = 0, len = nl.getLength(); i < len; i++) { 
    System.out.println(((Element)nl.item(i)).getAttribute("href")); 
} 
Verwandte Themen