如何在编组JUnit测试时强制执行JAXBException

Mar*_*ena 6 jaxb

在编组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;
   }
Run Code Online (Sandbox Code Playgroud)

bdo*_*han 5

JAXBExceptionmarshal操作期间创建一个的方法有多种:

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)
Run Code Online (Sandbox Code Playgroud)

2 - 封送无效输出

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

    FileOutputStream closedStream = new FileOutputStream("src/foo.xml");
    closedStream.close();
    jaxbMarshaller.marshal(this, closedStream);
Run Code Online (Sandbox Code Playgroud)

然后你会得到 a 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
Run Code Online (Sandbox Code Playgroud)