Java JAXB,如何在出错的情况下解组不同的对象

Java JAXB,如何在出错的情况下解组不同的对象,java,xml,parsing,stream,jaxb,Java,Xml,Parsing,Stream,Jaxb,JAXB是否提供了一些API来根据根元素将XML流解组到另一个对象 生成流的应用程序可以返回 <Result> <data>...</data> </Result> ... 或 ... 取决于执行的状态。在这两种情况下,输出都是从stdin读取的,我需要根据输出来解组Result对象或Error对象。使用JAXB,不需要将输出存储在临时字符串中并手动检查内容,也不需要决定要解析哪个对象,这是否可行?JAXB是一个软件框架,它允许Java

JAXB是否提供了一些API来根据根元素将XML流解组到另一个对象

生成流的应用程序可以返回

<Result>
 <data>...</data>
</Result>

...


...

取决于执行的状态。在这两种情况下,输出都是从stdin读取的,我需要根据输出来解组Result对象或Error对象。使用JAXB,不需要将输出存储在临时字符串中并手动检查内容,也不需要决定要解析哪个对象,这是否可行?

JAXB是一个软件框架,它允许Java开发人员将Java类映射到XML表示,仅此而已。根据执行的结果,您应该注意返回正确的xml结构,您可以返回
result
元素或
Error
元素,或其他任何内容。

JAXB是一个软件框架,允许Java开发人员将Java类映射到xml表示,仅此而已。根据执行结果,您应该注意返回正确的xml结构,您可以返回
结果
元素或
错误
元素或任何其他内容。

只需使用多个类,并相应地添加带有名称的
@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);
        }
    }
}

只需使用多个类并添加相应名称的
@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