解析RESTful XML响应并在JTable中显示

时间:2012-04-12 16:24:13

标签: java xml jaxb jersey jax-rs

我的网络服务正在运行,我可以使用下面的代码打印出服务检索到的XML:

resource = client.resource("http://localhost:8080/testProject/rest/items");
ClientResponse response= resource.get(ClientResponse.class);
String entity = response.getEntity(String.class);
System.out.println(entity);

但是我现在尝试使用这个XML作为JTable的数据提供者,我无法弄清楚如何解析它。我的代码在下面但不起作用,因为“entity”是一个字符串。

    JAXBContext context = JAXBContext.newInstance(Item.class);
    Unmarshaller um = context.createUnmarshaller();
    Item item = (Item) um.unmarshal(entity);

所以我的问题是

我在这里做错了什么?

我不应该使用.getEntity(String.Class)来执行此操作吗?

是否有更简单的方法将此XML响应转换为JTable?

由于

3 个答案:

答案 0 :(得分:1)

您可以使用以下方法从String中创建Document

 public static Document loadXML(String xmlAsString) {
    DocumentBuilder b = DocumentBuilderFactory.newInstance().newDocumentBuilder();
    InputSource is = new InputSource(new StringReader(xmlAsString));
    return b.parse(is);
}

然后您可以使用该文档并获取填充JTable所需的数据。

答案 1 :(得分:0)

首先,除非绝对必要,否则将xml转换为String数据(这对于调试输出很好,但不适用于实际工作)。我个人没有使用过jersey,但我想你可以以比String更好的形式获得xml(例如DOM文档)。

但是,如果你必须从字符串中获取xml,那么你可以像这样解组它:

um.unmarshal(new StringReader(entity));

答案 2 :(得分:0)

将回复作为文档阅读

Document xml = wsResponse.asXml();
displayXml(xml);

使用下面的代码段进行文字转换我使用了ref

void displayXml(Document doc) {
    TransformerFactory tf = TransformerFactory.newInstance();
    Transformer transformer = null;
    try {
        transformer = tf.newTransformer();
    } catch (TransformerConfigurationException e1) {
        e1.printStackTrace();
    }
    transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
    StringWriter writer = new StringWriter();
    try {
        transformer.transform(new DOMSource(doc), new StreamResult(writer));
    } catch (TransformerException e) {
        e.printStackTrace();
    }
    String output = writer.getBuffer().toString().replaceAll("\n|\r", "");
    System.out.println(output);
}