【发布时间】:2011-02-15 11:46:15
【问题描述】:
我正在开发一个 web 服务客户端应用程序,而且我大部分时间都在工作。我可以很好地从第三方网络服务中检索和读取数据。现在我需要提交一些数据,但我卡住了。
我正在检索/提交的对象的类是通过 xjc 工具从 XSD 文件生成的。我坚持的部分是将这些对象之一转换为 XML 树以提交给 Web 服务。
当我从/向 ws 检索/发送请求时,它包含一个“有效负载”对象。这在 java 代码中定义为(部分列表):
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "PayloadType", propOrder = {
"compressed",
"document",
"any",
"format"
})
public class PayloadType {
@XmlElement(name = "Compressed")
protected String compressed;
@XmlElement(name = "Document")
protected List<String> document;
@XmlAnyElement
protected List<Element> any;
protected String format;
public List<Element> getAny() {
if (any == null) {
any = new ArrayList<Element>();
}
return this.any;
}
}
我关心的唯一字段是包含 XML 树的“任何”字段。当我从 ws 检索数据时,我使用如下内容读取该字段: ('root' 是 org.w3c.dom.Element 类型,是在负载对象上调用 'getAny().get(0)' 的结果)
NodeList nl = root.getElementsByTagName("ns1:Process"); // "ns1:Process" is an XML node to do something with
if (nl != null && nl.getLength() > 0) {
for (int i = 0; i < nl.getLength(); i++) {
Element proc = (Element) nl.item(i);
try {
// do something with the 'proc' Element here...
} catch (Exception ex) {
// handle problems here...
}
}
}
提交数据是我卡住的地方。如何获取从 XSD 生成的类之一创建的 java 对象并将其转换为可以添加到有效负载对象的“任何”列表中的 Element 对象?例如,如果我有一个 DailyData 类并且我创建并使用数据填充它:
DailyData dData = new DailyData();
dData.setID = 34;
dData.setValues = "3,5,76,23";
如何将该“dData”对象添加到有效负载对象的“任何”列表中?它必须是一个元素。我是否使用 JAXBContext 编组器做某事?我用它来将“dData”对象转储到屏幕上以检查 XML 结构。
我确定答案正盯着我看,但我就是看不到它!
戴夫
更新:可以使用以下代码 sn-p:
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
Document doc = dbf.newDocumentBuilder().newDocument();
JAXBContext context = JAXBContext.newInstance(DailyData.class);
Marshaller marshaller = context.createMarshaller();
marshaller.marshal(dData, doc);
PayloadType payload = new PayloadType();
payload.getAny().add((Element)doc.getFirstChild());
【问题讨论】:
-
我认为我已经弄明白了,但是直到我们在 DEV 环境中获得一些测试数据后我才能确定。如果结果是正确的,我会发布我的答案。
-
你应该已经回答了你自己的问题,因为我会投赞成票 :-) 这是最有用的。
标签: java xml web-services jaxb