1

我的 Web 服务正在运行,我可以使用以下代码打印出服务检索到的 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 的数据提供者,但我不知道如何解析它。我的代码在下面但不起作用,因为“实体”是一个字符串。

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

所以我的问题是

我在这里做错了什么?

我不应该使用 .getEntity(String.Class) 来做到这一点吗?

有没有更简单的方法可以将此 XML 响应放入 JTable 中?

谢谢

4

3 回答 3

1

您可以使用以下方法从您的字符串创建一个文档:

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

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

于 2012-04-12T16:30:30.603 回答
0

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

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

um.unmarshal(new StringReader(entity));
于 2012-04-12T16:33:30.953 回答
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);
}
于 2015-12-07T15:12:25.380 回答