2012-11-14 2 views
6

के लिए marshalling जब JAXBException को मजबूर करने के लिए कैसे करें I JUnit परीक्षण के लिए marshalling जब मैं एक JAXBException को मजबूर करने के लिए एक रास्ता खोजने में सक्षम नहीं है। क्या किसी के पास कोई विचार है?JUnit परीक्षण

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; 
    } 

उत्तर

3

वहाँ एक marshal आपरेशन के दौरान एक JAXBException बनाने के लिए विभिन्न तरीके हैं:

यहाँ मेरी मार्शलिंग कोड है

1 - एक अमान्य वस्तु मार्शल

आप उत्पन्न कर सकते हैं एक JAXBException एक मार्शल ऑपरेशन के दौरान एक वर्ग के उदाहरण को मारने से JAXBContext पता नहीं है (यानी अपना परीक्षा लें ई और इसे 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