解析RESTful XML响应并在JTable中显示
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解析RESTful XML响应并在JTable中显示相关的知识,希望对你有一定的参考价值。
我的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的数据提供者,我无法弄清楚如何解析它。我的代码在下面但不起作用,因为“entity”是一个字符串。
JAXBContext context = JAXBContext.newInstance(Item.class);
Unmarshaller um = context.createUnmarshaller();
Item item = (Item) um.unmarshal(entity);
所以我的问题是
我在这做错了什么?
我不应该使用.getEntity(String.Class)来做这个吗?
是否有更简单的方法将此XML响应转换为JTable?
谢谢
答案
首先,除非绝对必要,否则不要将xml转换为String数据(它适用于调试输出,但不适用于实际工作)。我没有亲自使用过球衣,但我想你可以以比String更好的形式获得xml(例如DOM文档)。
但是,如果你必须从字符串中获取xml,那么你可以像这样解组它:
um.unmarshal(new StringReader(entity));
另一答案
您可以使用以下方法从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所需的数据。
另一答案
以文档形式阅读回复
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("
|
", "");
System.out.println(output);
}
以上是关于解析RESTful XML响应并在JTable中显示的主要内容,如果未能解决你的问题,请参考以下文章
RESTful 响应如何在 Yii2 中返回 JSON 而不是 XML?
RESTful 响应如何在 Yii2 中返回 JSON 而不是 XML?