Как десериализовать результат XML из запроса HTTP POST в Java? - PullRequest
2 голосов
/ 12 января 2011

В C # я создаю http-пост и получаю XML-ответ в виде байтового массива (bret), который легко десериализовать в класс:

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

Что будетправильный и простой способ сделать то же самое в Java?

Ответы [ 4 ]

1 голос
/ 12 января 2011

Сделайте ваш запрос POST через что-то вроде

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

или используйте HttpClient:

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

В зависимости от того, как вы сериализоваливаши данные, вы должны использовать соответствующий десериализатор.XStream является хорошим простым выбором для таких задач:

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

Все это, по общему признанию, больше кода, но этотипичный компромисс между системами .NET и Java (хотя это больше кода, у Java есть свои преимущества).

0 голосов
/ 17 января 2011

Если вы не хотите отображать свой результат в классах, вы можете проверить Resty . Это делает доступ к JSON, XML или любому другому типу данных однострочным. Вот код, который анализирует RSS-канал Slashdot как XML и печатает все связанные статьи.

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"));
}
0 голосов
/ 12 января 2011

JAXB - это стандарт Java ( JSR-222 ) для преобразования объектов в XML с несколькими реализациями: Metro , EclipseLink MOXy (Я технический руководитель), Apache JaxMe .

Доступ к HTTP-операциям в Java можно получить с помощью следующего кода:

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();

Приведенный выше пример кодаот:

Для сравнения JAXB и XStream см .:

0 голосов
/ 12 января 2011

Использование X-Stream - для запроса на получение:

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);

Вы можете изменить вызов URL для сообщения .

...