8

在编组 JUnit 测试时,我无法找到强制 JAXBException 的方法。有没有人有任何想法?

这是我的编组代码:

   public String toXml() {
          log.debug("Entered toXml method");
    String result = null;
    try {
        JAXBContext jaxbContext = JAXBContext.newInstance(Config.class);
        Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
        jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        StringWriter writer = new StringWriter();
        jaxbMarshaller.marshal(this, writer);
        result = writer.toString();
    } catch (JAXBException e) {
          log.error(e);
    }
          log.debug("Exiting toXml method");
    return result;
   }
4

1 回答 1

5

JAXBException在操作期间有多种创建方法marshal

1 - 封送一个无效的对象

您可以JAXBException在编组操作期间通过编组JAXBContext不知道的类的实例来生成 a(即以您的示例并使用它来编组 的实例Foo)。这将产生以下异常。

Exception in thread "main" javax.xml.bind.JAXBException: class forum13389277.Foo nor any of its super class is known to this context.
    at com.sun.xml.bind.v2.runtime.JAXBContextImpl.getBeanInfo(JAXBContextImpl.java:594)
    at com.sun.xml.bind.v2.runtime.XMLSerializer.childAsRoot(XMLSerializer.java:482)
    at com.sun.xml.bind.v2.runtime.MarshallerImpl.write(MarshallerImpl.java:315)
    at com.sun.xml.bind.v2.runtime.MarshallerImpl.marshal(MarshallerImpl.java:244)
    at javax.xml.bind.helpers.AbstractMarshallerImpl.marshal(AbstractMarshallerImpl.java:95)
    at forum13272288.Demo.main(Demo.java:27)

2 - 封送无效输出

如果您尝试编组到无效输出,例如OutputStream已关闭的输出:

    FileOutputStream closedStream = new FileOutputStream("src/foo.xml");
    closedStream.close();
    jaxbMarshaller.marshal(this, closedStream);

然后你会得到一个MarshalException它是一个子类JAXBException

Exception in thread "main" javax.xml.bind.MarshalException
 - with linked exception:
[java.io.IOException: Stream Closed]
    at com.sun.xml.bind.v2.runtime.MarshallerImpl.write(MarshallerImpl.java:320)
    at com.sun.xml.bind.v2.runtime.MarshallerImpl.marshal(MarshallerImpl.java:244)
    at javax.xml.bind.helpers.AbstractMarshallerImpl.marshal(AbstractMarshallerImpl.java:95)
    at forum13272288.Demo.main(Demo.java:27)
Caused by: java.io.IOException: Stream Closed
    at java.io.FileOutputStream.writeBytes(Native Method)
    at java.io.FileOutputStream.write(FileOutputStream.java:318)
    at com.sun.xml.bind.v2.runtime.output.UTF8XmlOutput.flushBuffer(UTF8XmlOutput.java:413)
    at com.sun.xml.bind.v2.runtime.output.UTF8XmlOutput.endDocument(UTF8XmlOutput.java:137)
    at com.sun.xml.bind.v2.runtime.output.IndentingUTF8XmlOutput.endDocument(IndentingUTF8XmlOutput.java:165)
    at com.sun.xml.bind.v2.runtime.XMLSerializer.endDocument(XMLSerializer.java:852)
    at com.sun.xml.bind.v2.runtime.MarshallerImpl.postwrite(MarshallerImpl.java:369)
    at com.sun.xml.bind.v2.runtime.MarshallerImpl.write(MarshallerImpl.java:316)
    ... 3 more
于 2012-11-15T10:39:21.177 回答