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