use of com.thoughtworks.xstream.io.xml.XppReader in project ddf by codice.
the class TestCswTransformProvider method testUnmarshalCopyPreservesNamespaces.
@Test
public void testUnmarshalCopyPreservesNamespaces() throws Exception {
InputTransformer mockInputTransformer = mock(InputTransformer.class);
when(mockInputManager.getTransformerBySchema(anyString())).thenReturn(mockInputTransformer);
StaxDriver driver = new StaxDriver();
driver.setRepairingNamespace(true);
driver.getQnameMap().setDefaultNamespace(CswConstants.CSW_OUTPUT_SCHEMA);
driver.getQnameMap().setDefaultPrefix(CswConstants.CSW_NAMESPACE_PREFIX);
// Have to use XppReader in order to preserve the namespaces.
HierarchicalStreamReader reader = new XppReader(new StringReader(getRecord()), XmlPullParserFactory.newInstance().newPullParser());
CswTransformProvider provider = new CswTransformProvider(null, mockInputManager);
UnmarshallingContext context = new TreeUnmarshaller(null, null, null, null);
context.put(CswConstants.OUTPUT_SCHEMA_PARAMETER, "http://example.com/schema");
ArgumentCaptor<InputStream> captor = ArgumentCaptor.forClass(InputStream.class);
provider.unmarshal(reader, context);
// Verify the context arguments were set correctly
verify(mockInputTransformer, times(1)).transform(captor.capture());
InputStream inStream = captor.getValue();
String result = IOUtils.toString(inStream);
XMLUnit.setIgnoreWhitespace(true);
XMLAssert.assertXMLEqual(getRecord(), result);
}
use of com.thoughtworks.xstream.io.xml.XppReader in project ddf by codice.
the class TestGetRecordsResponseConverter method testUnmarshalParseXmlNamespaces.
@Test
public void testUnmarshalParseXmlNamespaces() throws XmlPullParserException {
XStream xstream = new XStream(new WstxDriver());
xstream.setClassLoader(this.getClass().getClassLoader());
xstream.registerConverter(new GetRecordsResponseConverter(mockProvider));
xstream.alias("csw:GetRecordsResponse", CswRecordCollection.class);
String xml = "<?xml version='1.0' encoding='UTF-8'?>" + "<csw:GetRecordsResponse " + "xmlns:dc=\"http://purl.org/dc/elements/1.1/\" " + "xmlns:dct=\"http://purl.org/dc/terms/\" " + "xmlns:ows=\"http://www.opengis.net/ows\" " + "xmlns:csw=\"http://www.opengis.net/cat/csw/2.0.2\" " + "version=\"2.0.2\"><csw:SearchStatus " + "timestamp=\"2014-11-11T10:53:32.152-06:00\"/>" + "<csw:SearchResults numberOfRecordsMatched=\"1\" " + "numberOfRecordsReturned=\"1\" nextRecord=\"0\" " + "recordSchema=\"http://www.opengis.net/cat/csw/2.0.2\">" + "<csw:Record>\n" + "<dc:identifier>0a2e1b1d2a3755e70a96d61e6bddbc5d</dc:identifier>" + "<dct:bibliographicCitation>0a2e1b1d2a3755e70a96d61e6bddbc5d</dct:bibliographicCitation>" + "<dc:title>US woman attacks Gauguin painting</dc:title>" + "<dct:alternative>US woman attacks Gauguin painting</dct:alternative>" + "<dc:type>video</dc:type><dc:date>2011-04-06T04:49:20.230-05:00</dc:date>" + "<dct:modified>2011-04-06T04:49:20.230-05:00</dct:modified>" + "<dct:created>2011-04-06T04:49:20.230-05:00</dct:created>" + "<dct:dateAccepted>2011-04-06T04:48:26.180-05:00</dct:dateAccepted>" + "<dct:dateCopyrighted>2011-04-06T04:48:26.180-05:00</dct:dateCopyrighted><" + "dct:dateSubmitted>2011-04-06T04:49:20.230-05:00</dct:dateSubmitted>" + "<dct:issued>2011-04-06T04:49:20.230-05:00</dct:issued>" + "<dc:publisher>ddf.distribution</dc:publisher>" + "<ows:BoundingBox crs=\"urn:x-ogc:def:crs:EPSG:6.11:4326\">\n" + " <ows:LowerCorner>-50.5056430529222 84.0285103635943</ows:LowerCorner>" + "<ows:UpperCorner>-50.5056430529222 84.0285103635943</ows:UpperCorner>" + "</ows:BoundingBox></csw:Record><" + "/csw:SearchResults>" + "</csw:GetRecordsResponse>";
InputStream inStream = IOUtils.toInputStream(xml);
ArgumentCaptor<UnmarshallingContext> captor = ArgumentCaptor.forClass(UnmarshallingContext.class);
HierarchicalStreamReader reader = new XppReader(new InputStreamReader(inStream), XmlPullParserFactory.newInstance().newPullParser());
xstream.unmarshal(reader, null, null);
IOUtils.closeQuietly(inStream);
verify(mockProvider, times(1)).unmarshal(any(HierarchicalStreamReader.class), captor.capture());
UnmarshallingContext context = captor.getValue();
assertThat(context, notNullValue());
assertThat(context.get(CswConstants.NAMESPACE_DECLARATIONS), instanceOf(Map.class));
Map<String, String> namespaces = (Map) context.get(CswConstants.NAMESPACE_DECLARATIONS);
assertThat(namespaces.get(CswConstants.XMLNS + CswConstants.NAMESPACE_DELIMITER + CswConstants.CSW_NAMESPACE_PREFIX), is(CswConstants.CSW_OUTPUT_SCHEMA));
assertThat(namespaces.get(CswConstants.XMLNS + CswConstants.NAMESPACE_DELIMITER + CswConstants.DUBLIN_CORE_NAMESPACE_PREFIX), is(CswConstants.DUBLIN_CORE_SCHEMA));
assertThat(namespaces.get(CswConstants.XMLNS + CswConstants.NAMESPACE_DELIMITER + CswConstants.DUBLIN_CORE_TERMS_NAMESPACE_PREFIX), is(CswConstants.DUBLIN_CORE_TERMS_SCHEMA));
assertThat(namespaces.get(CswConstants.XMLNS + CswConstants.NAMESPACE_DELIMITER + CswConstants.OWS_NAMESPACE_PREFIX), is(CswConstants.OWS_NAMESPACE));
}
use of com.thoughtworks.xstream.io.xml.XppReader in project ddf by codice.
the class MetacardMarshallerImpl method geoToXml.
private String geoToXml(BinaryContent content, XmlPullParser parser) throws UnsupportedEncodingException {
PrintWriter destination;
try (InputStreamReader inputStreamReader = new InputStreamReader(content.getInputStream(), StandardCharsets.UTF_8.name())) {
XppReader source = new XppReader(inputStreamReader, parser);
// if multi-threading, cannot abstract PrintWriter to class member
destination = writerProvider.build(Metacard.class);
new HierarchicalStreamCopier().copy(source, destination);
} catch (IOException e) {
throw new RuntimeException(e);
}
return destination.makeString();
}
use of com.thoughtworks.xstream.io.xml.XppReader in project ddf by codice.
the class CswTransformProvider method writeXml.
private void writeXml(BinaryContent content, HierarchicalStreamWriter writer) {
try {
XmlPullParser parser = XppFactory.createDefaultParser();
new HierarchicalStreamCopier().copy(new XppReader(new InputStreamReader(content.getInputStream(), StandardCharsets.UTF_8), parser), writer);
} catch (XmlPullParserException e) {
throw new ConversionException("Unable to copy metadata to XML Output.", e);
}
}
Aggregations