VRaptor + XML - Questão fácil

Pessoal, eu recebo de um cliente o seguinte POST XML

<!--?xml version="1.0" encoding="UTF-8"?--> <hash> <output> <height type="integer">16</height> <audio-sample-rate type="integer">48000</audio-sample-rate> <frame-rate type="float">29.97</frame-rate> <channels>2</channels> <duration-in-ms type="integer">5055</duration-in-ms> <audio-bitrate-in-kbps type="integer">87</audio-bitrate-in-kbps> <video-codec>h264</video-codec> <format>mpeg4</format> <file-size-in-bytes type="integer">62625</file-size-in-bytes> <audio-codec>aac</audio-codec> <total-bitrate-in-kbps type="integer">93</total-bitrate-in-kbps> <label nil="true"></label> <width type="integer">30</width> <id type="integer">235316</id> <video-bitrate-in-kbps type="integer">6</video-bitrate-in-kbps> <state>finished</state> <url>ftp://example.com/file.mp4</url> <md5_checksum>7f106918e02a69466afa0ee014172496</md5_checksum> <thumbnails type="array"> <thumbnail> <urls type="array"> <url> <url>ftp://example.com/images/123.png</url> <format>PNG</format> <file-size-bytes type="integer">1273573</file-size-bytes> <dimensions>1280x720</dimensions> </url> </urls> <label>1280</label> </thumbnail> </thumbnails> </output> <job> <test type="boolean">false</test> <created-at type="datetime">2011-09-27T19:14:24Z</created-at> <pass-through nil="true"></pass-through> <updated-at type="datetime">2011-09-27T19:15:01Z</updated-at> <submitted-at type="datetime">2011-09-27T19:14:24Z</submitted-at> <id type="integer">172153</id> <state>finished</state> </job> <input> <height type="integer">16</height> <audio-sample-rate type="integer">48000</audio-sample-rate> <frame-rate type="float">29.97</frame-rate> <channels>2</channels> <duration-in-ms type="integer">5038</duration-in-ms> <audio-bitrate-in-kbps type="integer">148</audio-bitrate-in-kbps> <video-codec>h264</video-codec> <format>mpeg4</format> <file-size-in-bytes type="integer">100149</file-size-in-bytes> <audio-codec>aac</audio-codec> <total-bitrate-in-kbps type="integer">155</total-bitrate-in-kbps> <width type="integer">30</width> <id type="integer">172151</id> <state>finished</state> <video-bitrate-in-kbps type="integer">7</video-bitrate-in-kbps> <md5_checksum>7f106918e02a69466afa0ee014174143</md5_checksum> </input> </hash>

Como eu faço pra pegar algumas informações desse XML ? A forma mais facil de pegar o valor do job-state por exemplo ?
Desculpa a pergunta, mas não vi uma documentação pra isso. Ainda não implementei nada, só estou lendo algumas documentações e estudando algumas coisas e como nunca mexi com isso, me surgiu a dúvida simples.

Vlw.

Você vai precisar fazer um parser nesse XML para pegar os valores que desejar.
Se você não conhece nenhuma API sobre XML, de uma olhada aqui: XML Tem 4 tipos de parse em XML que você pode usar.’>

Brigado pela resposta, mas como eu recebo isso no parâmetro da função ?

Seria algo assim?

@Post @Path("/test") public void teste(HttpServletRequest request) throws IOException { final InputStream body = request.getInputStream(); this.logger.info(body.toString()); }

Desculpa ai, pensei que você queria saber como fazer o parser do xml.
Para receber por post e ler o xml, de uma olhada nesses links:
http://java.assistprogramming.com/how-to-make-a-java-xml-post.html

body.toString() não vai funcionar…

vc precisa usar um IOUtils.toString(body)…

na verdade as bibliotecas de XML geralmente recebem diretamente o inputStream…

em todo caso, se vc conseguir criar classes que representam os dados desse xml, dá pra receber dirteto… algo como:

@Post("/test")
@Consumes("application/xml")
public void teste(Hash hash) {
   ....
}

daí a requisição precisa ir com o content-type application/xml

e essa classe Hash, deveria ter atributos Input input, Output output e Job job, com os respectivos atributos

Boa lucas, mas eu não gostaria de criar atributos pra tudo.
Eu so preciso de 2 atributos ali.

Tem alguma forma de só usar os atributos que eu quero ?

nesse caso é melhor vc fazer o IOUtils.toString mesmo e usar regex pra extrair os dados que vc precisa.

E como eu faria pra testar isso ?

Uma forma de dar post passando uma string ? Que string seria essa ?

Vlw

use uma extensão do Firefox chamada Poster…

dá pra vc passar o xml inteiro por lá