Search in sources :

Example 6 with Marshaller

use of org.springframework.oxm.Marshaller in project uPortal by Jasig.

the class IdentityImportExportTestUtilities method testIdentityImportExport.

public static <T> void testIdentityImportExport(TransactionOperations transactionOperations, final IDataImporter<T> dataImporter, final IDataExporter<?> dataExporter, Resource resource, Function<T, String> getName) throws Exception {
    final String importData = toString(resource);
    final XMLInputFactory xmlInputFactory = XMLInputFactory.newFactory();
    final XMLEventReader xmlEventReader = xmlInputFactory.createXMLEventReader(new StringReader(importData));
    //Unmarshall from XML
    final Unmarshaller unmarshaller = dataImporter.getUnmarshaller();
    final StAXSource source = new StAXSource(xmlEventReader);
    @SuppressWarnings("unchecked") final T dataImport = (T) unmarshaller.unmarshal(source);
    //Make sure the data was unmarshalled
    assertNotNull("Unmarshalled import data was null", dataImport);
    //Import the data
    dataImporter.importData(dataImport);
    //Export the data
    final String name = getName.apply(dataImport);
    final Object dataExport = transactionOperations.execute(new TransactionCallback<Object>() {

        /* (non-Javadoc)
                             * @see org.springframework.transaction.support.TransactionCallback#doInTransaction(org.springframework.transaction.TransactionStatus)
                             */
        @Override
        public Object doInTransaction(TransactionStatus status) {
            return dataExporter.exportData(name);
        }
    });
    //Make sure the data was exported
    assertNotNull("Exported data was null", dataExport);
    //Marshall to XML
    final Marshaller marshaller = dataExporter.getMarshaller();
    final StringWriter result = new StringWriter();
    marshaller.marshal(dataExport, new StreamResult(result));
    //Compare the exported XML data with the imported XML data, they should match
    final String resultString = result.toString();
    try {
        XMLUnit.setIgnoreWhitespace(true);
        Diff d = new Diff(new StringReader(importData), new StringReader(resultString));
        assertTrue("Export result differs from import" + d, d.similar());
    } catch (Exception e) {
        throw new XmlTestException("Failed to assert similar between import XML and export XML", resultString, e);
    } catch (Error e) {
        throw new XmlTestException("Failed to assert similar between import XML and export XML", resultString, e);
    }
}
Also used : Marshaller(org.springframework.oxm.Marshaller) StreamResult(javax.xml.transform.stream.StreamResult) Diff(org.custommonkey.xmlunit.Diff) TransactionStatus(org.springframework.transaction.TransactionStatus) StAXSource(javax.xml.transform.stax.StAXSource) IOException(java.io.IOException) StringWriter(java.io.StringWriter) StringReader(java.io.StringReader) XMLEventReader(javax.xml.stream.XMLEventReader) Unmarshaller(org.springframework.oxm.Unmarshaller) XMLInputFactory(javax.xml.stream.XMLInputFactory)

Aggregations

Marshaller (org.springframework.oxm.Marshaller)6 Test (org.junit.Test)4 IOException (java.io.IOException)2 Result (javax.xml.transform.Result)2 MockHttpOutputMessage (org.springframework.http.MockHttpOutputMessage)2 Unmarshaller (org.springframework.oxm.Unmarshaller)2 StringReader (java.io.StringReader)1 StringWriter (java.io.StringWriter)1 XMLEventReader (javax.xml.stream.XMLEventReader)1 XMLInputFactory (javax.xml.stream.XMLInputFactory)1 StAXSource (javax.xml.transform.stax.StAXSource)1 StreamResult (javax.xml.transform.stream.StreamResult)1 StreamSource (javax.xml.transform.stream.StreamSource)1 Diff (org.custommonkey.xmlunit.Diff)1 MediaType (org.springframework.http.MediaType)1 MockHttpInputMessage (org.springframework.http.MockHttpInputMessage)1 HttpMessageNotWritableException (org.springframework.http.converter.HttpMessageNotWritableException)1 MarshallingFailureException (org.springframework.oxm.MarshallingFailureException)1 XmlMappingException (org.springframework.oxm.XmlMappingException)1 TransactionStatus (org.springframework.transaction.TransactionStatus)1