JAXB是否提供了一些API来根据根元素将XML流解组为备用对象?
生成流的应用程序可以返回
<Result>
<data>...</data>
</Result>
或
<Error>
<cause>...</cause>
</Error>
取决于执行状态。在这两种情况下,输出都是从stdin读取的,我需要根据输出解组Result对象或Error对象。这是否可以使用JAXB,而不是将输出存储在临时String中并手动检查内容,并决定要解析哪个对象?
答案 0 :(得分:3)
只需使用多个类并相应地添加带有名称的@XmlRootElement
注释,然后通过指定两个类来创建JAXBContext
。
@XmlRootElement(name = "Result")
@XmlAccessorType(XmlAccessType.FIELD)
static class Result {
String data;
}
@XmlRootElement(name = "Error")
@XmlAccessorType(XmlAccessType.FIELD)
static class Error {
String cause;
}
public static void main(String[] args) throws JAXBException {
JAXBContext jaxbContext = JAXBContext.newInstance(Result.class, Error.class);
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
String sampleErrorInput = "<Error><cause>Sample cause</cause></Error>";
String sampleResultInput = "<Result><data>Sample data</data></Result>";
for (String input : Arrays.asList(sampleErrorInput, sampleResultInput)) {
Object obj = unmarshaller.unmarshal(new StringReader(input));
if (obj instanceof Error) {
System.out.println("Error: " + ((Error) obj).cause);
} else if (obj instanceof Result) {
System.out.println("Result: " + ((Result) obj).data);
}
}
}
上面的代码产生了这个输出:
Error: Sample cause
Result: Sample data
答案 1 :(得分:0)
JAXB是一个软件框架,允许Java开发人员将Java类映射到XML表示,就是这样。您应该注意根据执行结果返回正确的xml结构,并且可以返回Result
元素或Error
元素或其他任何内容。