我的网络服务正在运行,我可以使用下面的代码打印出服务检索到的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?
由于
答案 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);
}