/*
* Constellation - An open source and standard compliant SDI
* http://www.constellation-sdi.org
*
* Copyright 2014 Geomatys.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.constellation.metadata.io;
import org.apache.sis.internal.jaxb.LegacyNamespaces;
import org.apache.sis.metadata.iso.DefaultMetadata;
import org.apache.sis.test.XMLComparator;
import org.apache.sis.xml.MarshallerPool;
import org.apache.sis.xml.XML;
import org.constellation.generic.database.Automatic;
import org.constellation.generic.database.BDD;
import org.constellation.jaxb.MarshallWarnings;
import org.constellation.test.utils.Order;
import org.constellation.test.utils.TestRunner;
import org.constellation.util.Util;
import org.geotoolkit.ebrim.xml.EBRIMMarshallerPool;
import org.geotoolkit.internal.sql.DefaultDataSource;
import org.geotoolkit.lang.Setup;
import org.geotoolkit.util.sql.DerbySqlScriptRunner;
import org.geotoolkit.xml.AnchoredMarshallerPool;
import org.junit.runner.RunWith;
import org.mdweb.model.storage.FullRecord;
import org.mdweb.model.storage.LinkedValue;
import org.mdweb.model.storage.Value;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import java.io.File;
import java.io.InputStream;
import java.io.StringReader;
import java.io.StringWriter;
import java.sql.Connection;
import java.util.TimeZone;
import static org.junit.Assert.*;
/**
*
* @author Guilhem Legal (Geomatys)
*/
@RunWith(TestRunner.class)
public class MDWebMetadataWriterTest {
private static Automatic configuration;
private static MDWebMetadataReader reader;
private static MDWebMetadataWriter writer;
private static MarshallerPool pool;
private static DefaultDataSource ds;
@BeforeClass
public static void setUpClass() throws Exception {
Setup.initialize(null);
pool = EBRIMMarshallerPool.getInstance();
StaticMetadata.fillPoolAnchor((AnchoredMarshallerPool) pool);
final String url = "jdbc:derby:memory:MMWTest;create=true";
ds = new DefaultDataSource(url);
Connection con = ds.getConnection();
DerbySqlScriptRunner sr = new DerbySqlScriptRunner(con);
sr.run(Util.getResourceAsStream("org/mdweb/sql/v24/metadata/model/mdw_schema_2.4_derby.sql"));
sr.run(Util.getResourceAsStream("org/mdweb/sql/v24/metadata/schemas/ISO19115.sql"));
sr.run(Util.getResourceAsStream("org/mdweb/sql/v24/metadata/schemas/ISO19119.sql"));
sr.run(Util.getResourceAsStream("org/mdweb/sql/v24/metadata/schemas/ISO19108.sql"));
sr.run(Util.getResourceAsStream("org/mdweb/sql/v24/metadata/schemas/ISO19115-2.sql"));
sr.run(Util.getResourceAsStream("org/mdweb/sql/v24/metadata/schemas/ISO19110.sql"));
sr.run(Util.getResourceAsStream("org/mdweb/sql/v24/metadata/data/defaultRecordSets.sql"));
sr.run(Util.getResourceAsStream("org/mdweb/sql/v24/metadata/users/creation_user.sql"));
sr.run(Util.getResourceAsStream("org/mdweb/sql/v24/metadata/profiles/inputLevels.sql"));
sr.run(Util.getResourceAsStream("org/mdweb/sql/v24/metadata/profiles/user_profile.sql"));
sr.run(Util.getResourceAsStream("org/mdweb/sql/v24/metadata/schemas/catalog_web_service.sql"));
sr.run(Util.getResourceAsStream("org/mdweb/sql/v24/metadata/schemas/ebrimv2.5.sql"));
sr.run(Util.getResourceAsStream("org/mdweb/sql/v24/metadata/schemas/ebrimv3.0.sql"));
sr.run(Util.getResourceAsStream("org/mdweb/sql/v24/metadata/schemas/SensorML_v2.sql"));
sr.run(Util.getResourceAsStream("org/constellation/sql/contact.sql"));
//we write the configuration file
BDD bdd = new BDD("org.apache.derby.jdbc.EmbeddedDriver", url, "", "");
configuration = new Automatic("mdweb", bdd);
reader = new MDWebMetadataReader(configuration);
writer = new MDWebMetadataWriter(configuration);
}
@AfterClass
public static void tearDownClass() throws Exception {
if (reader != null) {
reader.destroy();
}
if (writer != null) {
writer.destroy();
}
if (ds != null) {
ds.shutdown();
}
File f = new File("derby.log");
if (f.exists()) {
f.delete();
}
}
@Before
public void setUp() throws Exception {
}
@After
public void tearDown() throws Exception {
}
/**
* Tests the storeMetadata method for SensorML data
*
* @throws java.lang.Exception
*/
@Test
@Order(order=1)
public void writeMetadataComponentSMLTest() throws Exception {
Node absExpResult = getNodeFromStream(Util.getResourceAsStream("org/constellation/xml/sml/component2.xml"), MetadataType.SENSORML);
writer.storeMetadata(absExpResult);
Object absResult = reader.getMetadata("component2", MetadataType.SENSORML);
assertTrue(absResult != null);
assertTrue(absResult instanceof Node);
assertTrue(absExpResult instanceof Node);
Node result = (Node) absResult;
Node expResult = getNodeFromStream(Util.getResourceAsStream("org/constellation/xml/sml/component2.xml"), MetadataType.SENSORML);
compare(expResult, result);
}
/**
* Tests the storeMetadata method for SensorML data
*
* @throws java.lang.Exception
*/
@Test
@Order(order=2)
public void writeMetadataSystemSMLTest() throws Exception {
Node absExpResult = getNodeFromStream(Util.getResourceAsStream("org/constellation/xml/sml/system.xml"), MetadataType.SENSORML);
writer.storeMetadata(absExpResult);
Node result = reader.getMetadata("sensor-system", MetadataType.SENSORML);
assertTrue(result != null);
Node expResult = getNodeFromStream(Util.getResourceAsStream("org/constellation/xml/sml/system.xml"), MetadataType.SENSORML);
compare(expResult, result);
absExpResult = getNodeFromStream(Util.getResourceAsStream("org/constellation/xml/sml/system2.xml"), MetadataType.SENSORML);
writer.storeMetadata(absExpResult);
absExpResult = getNodeFromStream(Util.getResourceAsStream("org/constellation/xml/sml/system2.xml"), MetadataType.SENSORML);
result = reader.getMetadata("sensor-system2", MetadataType.SENSORML);
assertTrue(result != null);
expResult = (Node) absExpResult;
compare(expResult, result);
}
/**
* Tests the storeMetadata method for ISO 19139 data with GML geometries
*
* @throws java.lang.Exception
*/
@Test
@Order(order=3)
public void writeMetadataISOXlinkTest() throws Exception {
Node absExpResult = getNodeFromString(StaticMetadata.META_20, MetadataType.ISO_19115);
writer.storeMetadata(absExpResult);
Node result = reader.getMetadata("666-999-666", MetadataType.ISO_19115);
assertTrue(result != null);
Node expResult = getNodeFromString(StaticMetadata.META_20, MetadataType.ISO_19115);
/* DataIdentification expId = ((ServiceIdentificationImpl)expResult.getIdentificationInfo().iterator().next()).getOperatesOn().iterator().next();
DataIdentification resId = ((ServiceIdentificationImpl)result.getIdentificationInfo().iterator().next()).getOperatesOn().iterator().next();
assertEquals(new URI("http://test.com"), ((IdentifiedObject)expId).getIdentifierMap().getSpecialized(IdentifierSpace.XLINK).getHRef());
assertEquals(new URI("http://test.com"), ((IdentifiedObject)resId).getIdentifierMap().getSpecialized(IdentifierSpace.XLINK).getHRef());*/
compare(expResult,result);
absExpResult = getNodeFromString(StaticMetadata.META_21, MetadataType.ISO_19115);
writer.storeMetadata(absExpResult);
result = reader.getMetadata("999-666-999", MetadataType.ISO_19115);
assertTrue(result != null);
expResult = getNodeFromString(StaticMetadata.META_21, MetadataType.ISO_19115);
/*expId = ((ServiceIdentificationImpl)expResult.getIdentificationInfo().iterator().next()).getOperatesOn().iterator().next();
resId = ((ServiceIdentificationImpl)result.getIdentificationInfo().iterator().next()).getOperatesOn().iterator().next();
assertEquals(new URI("http://test2.com"), ((IdentifiedObject)expId).getIdentifierMap().getSpecialized(IdentifierSpace.XLINK).getHRef());
assertEquals(new URI("http://test2.com"), ((IdentifiedObject)resId).getIdentifierMap().getSpecialized(IdentifierSpace.XLINK).getHRef());*/
compare(expResult, result);
}
/**
* Tests the storeMetadata method for ISO 19139 data with GML geometries
*
* @throws java.lang.Exception
*/
@Test
@Order(order=4)
public void writeMetadataGMLTest() throws Exception {
Node absExpResult = getNodeFromStream(Util.getResourceAsStream("org/constellation/xml/metadata/meta10.xml"), MetadataType.ISO_19115);
writer.storeMetadata(absExpResult);
Node result = reader.getMetadata("IGNF_PVA_1-0__1968__C0620-0111_CDP_5569_8959.xml", MetadataType.ISO_19115);
assertTrue(result != null);
Node expResult = getNodeFromStream(Util.getResourceAsStream("org/constellation/xml/metadata/meta10.xml"), MetadataType.ISO_19115);
compare(expResult,result);
absExpResult = getNodeFromString(StaticMetadata.META_11, MetadataType.ISO_19115);
writer.storeMetadata(absExpResult);
result = reader.getMetadata("af24f70a-818c-4da1-9afb-1fc1e0058760", MetadataType.ISO_19115);
assertTrue(result != null);
expResult = getNodeFromString(StaticMetadata.META_11, MetadataType.ISO_19115);
compare(expResult,result);
absExpResult = getNodeFromString(StaticMetadata.META_12, MetadataType.ISO_19115);
writer.storeMetadata(absExpResult);
result = reader.getMetadata("1c7d52ac-66c5-449b-a88b-8a0feeccb5fa", MetadataType.ISO_19115);
assertTrue(result != null);
expResult = getNodeFromString(StaticMetadata.META_12, MetadataType.ISO_19115);
compare(expResult,result);
absExpResult = getNodeFromString(StaticMetadata.META_13, MetadataType.ISO_19115);
writer.storeMetadata(absExpResult);
result = reader.getMetadata("4c017cc5-3e0e-49d5-9f68-549943247e7e", MetadataType.ISO_19115);
assertTrue(result != null);
expResult = getNodeFromString(StaticMetadata.META_13, MetadataType.ISO_19115);
compare(expResult,result);
absExpResult = getNodeFromString(StaticMetadata.META_14, MetadataType.ISO_19115);
writer.storeMetadata(absExpResult);
result = reader.getMetadata("4c017cc5-3e0e-49d5-9f68-549943247e89", MetadataType.ISO_19115);
assertTrue(result != null);
expResult = getNodeFromString(StaticMetadata.META_14, MetadataType.ISO_19115);
compare(expResult,result);
absExpResult = getNodeFromString(StaticMetadata.META_15, MetadataType.ISO_19115);
writer.storeMetadata(absExpResult);
result = reader.getMetadata("484fc4d9-8d11-48a5-a386-65c19398f7c3", MetadataType.ISO_19115);
assertTrue(result != null);
expResult = getNodeFromString(StaticMetadata.META_15, MetadataType.ISO_19115);
compare(expResult,result);
absExpResult = getNodeFromString(StaticMetadata.META_16, MetadataType.ISO_19115);
writer.storeMetadata(absExpResult);
result = reader.getMetadata("484fc4d9-8d11-48a5-a386-65c19398f7k7", MetadataType.ISO_19115);
assertTrue(result != null);
expResult = getNodeFromString(StaticMetadata.META_16, MetadataType.ISO_19115);
compare(expResult,result);
absExpResult = getNodeFromString(StaticMetadata.META_17, MetadataType.ISO_19115);
writer.storeMetadata(absExpResult);
result = reader.getMetadata("81a25c84-2bb0-4727-8f36-4a296e1e7b57", MetadataType.ISO_19115);
assertTrue(result != null);
expResult = getNodeFromString(StaticMetadata.META_17, MetadataType.ISO_19115);
compare(expResult,result);
absExpResult = getNodeFromString(StaticMetadata.META_18, MetadataType.ISO_19115);
writer.storeMetadata(absExpResult);
result = reader.getMetadata("28644bf0-5d9d-4ebd-bef0-f2b0b2067b26", MetadataType.ISO_19115);
assertTrue(result != null);
expResult = getNodeFromString(StaticMetadata.META_18, MetadataType.ISO_19115);
compare(expResult,result);
absExpResult = getNodeFromString(StaticMetadata.META_19, MetadataType.ISO_19115);
writer.storeMetadata(absExpResult);
result = reader.getMetadata("937491cd-4bc4-43e4-9509-f6cc606f906e", MetadataType.ISO_19115);
assertTrue(result != null);
expResult = getNodeFromString(StaticMetadata.META_19, MetadataType.ISO_19115);
compare(expResult,result);
}
@Test
@Order(order=5)
public void writeMetadataMultiContactTest() throws Exception {
final DefaultMetadata obj = (DefaultMetadata) getObjectFromStream(Util.getResourceAsStream("org/constellation/xml/metadata/meta11.xml"), MetadataType.ISO_19115);
assertEquals(3, obj.getContacts().size());
FullRecord f = writer.getRecordFromObject(obj);
int nbLinkedValue = 0;
for (Value v : f.getValues()) {
if (v instanceof LinkedValue) {
nbLinkedValue++;
}
}
assertEquals(2, nbLinkedValue);
Node absExpResult = getNodeFromStream(Util.getResourceAsStream("org/constellation/xml/metadata/meta11.xml"), MetadataType.ISO_19115);
writer.storeMetadata(absExpResult);
Node result = reader.getMetadata("multi-contacts", MetadataType.ISO_19115);
assertTrue(result != null);
Node expResult = getNodeFromStream(Util.getResourceAsStream("org/constellation/xml/metadata/meta11.xml"), MetadataType.ISO_19115);
compare(expResult,result);
}
/**
* Tests the storeMetadata method for ISO 19110 data
*
* @throws java.lang.Exception
*/
@Test
@Order(order=5)
public void writeMetadata19110Test() throws Exception {
Node absExpResult = getNodeFromStream(Util.getResourceAsStream("org/constellation/xml/metadata/featcatalog1.xml"), MetadataType.ISO_19115);
writer.storeMetadata(absExpResult);
Node result = reader.getMetadata("cat-1", MetadataType.ISO_19115);
assertTrue(result != null);
Node expResult = getNodeFromStream(Util.getResourceAsStream("org/constellation/xml/metadata/featcatalog1.xml"), MetadataType.ISO_19115);
compare(expResult,result);
}
/**
* Tests the storeMetadata method for Dublin Core data
*
* @throws java.lang.Exception
*/
@Test
@Order(order=6)
public void writeMetadataDCTest() throws Exception {
Node absExpResult = getNodeFromStream(Util.getResourceAsStream("org/constellation/xml/metadata/meta8.xml"), MetadataType.DUBLINCORE);
writer.storeMetadata(absExpResult);
Node absResult = reader.getMetadata("urn:uuid:1ef30a8b-876d-4828-9246-c37ab4510bbd", MetadataType.DUBLINCORE);
assertTrue(absResult != null);
assertTrue(absResult instanceof Node);
Node result = (Node) absResult;
Node expResult = getNodeFromStream(Util.getResourceAsStream("org/constellation/xml/metadata/meta8.xml"), MetadataType.DUBLINCORE);
compare(expResult,result);
}
/**
* Tests the storeMetadata method for ISO 19139 data
*
* @throws java.lang.Exception
*/
@Test
@Order(order=7)
public void writeMetadataISO19115Test() throws Exception {
Node absExpResult = getNodeFromStream(Util.getResourceAsStream("org/constellation/xml/metadata/meta7.xml"), MetadataType.ISO_19115);
writer.storeMetadata(absExpResult);
Node result = reader.getMetadata("MDWeb_FR_SY_couche_vecteur_258", MetadataType.ISO_19115);
assertTrue(result != null);
Node expResult = getNodeFromStream(Util.getResourceAsStream("org/constellation/xml/metadata/meta7.xml"), MetadataType.ISO_19115);
compare(expResult,result);
absExpResult = getNodeFromStream(Util.getResourceAsStream("org/constellation/xml/metadata/meta1.xml"), MetadataType.ISO_19115);
writer.storeMetadata(absExpResult);
result = reader.getMetadata("42292_5p_19900609195600", MetadataType.ISO_19115);
assertTrue(result != null);
expResult = getNodeFromStream(Util.getResourceAsStream("org/constellation/xml/metadata/meta1.xml"), MetadataType.ISO_19115);
compare(expResult,result);
absExpResult = getNodeFromStream(Util.getResourceAsStream("org/constellation/xml/metadata/meta9.xml"), MetadataType.ISO_19115);
writer.storeMetadata(absExpResult);
result = reader.getMetadata("identifier-test", MetadataType.ISO_19115);
assertTrue(result != null);
expResult = getNodeFromStream(Util.getResourceAsStream("org/constellation/xml/metadata/meta9.xml"), MetadataType.ISO_19115);
compare(expResult,result);
}
/**
* Tests the storeMetadata method for ISO 19115-2 data
*
* @throws java.lang.Exception
*/
@Test
@Order(order=8)
public void writeMetadata191152Test() throws Exception {
Node absExpResult = getNodeFromStream(Util.getResourceAsStream("org/constellation/xml/metadata/imageMetadata.xml"), MetadataType.ISO_19115);
writer.storeMetadata(absExpResult);
Node result = reader.getMetadata("gov.noaa.nodc.ncddc. MODXXYYYYJJJ.L3_Mosaic_NOAA_GMX or MODXXYYYYJJJHHMMSS.L3_NOAA_GMX", MetadataType.ISO_19115);
assertTrue(result != null);
Node expResult = getNodeFromStream(Util.getResourceAsStream("org/constellation/xml/metadata/imageMetadata.xml"), MetadataType.ISO_19115);
compare(expResult,result);
}
/**
* Tests the storeMetadata method for ISO 19115-2 data
* The purpose of this test is to write a second time the same file.
*
* @todo the result is another metadata stored with title(2) in the Records table but not in the metadata.
* @todo what about the identifier ?
*
* @throws java.lang.Exception
*/
@Test
@Order(order=9)
public void writeMetadata191152Again() throws Exception {
Node absExpResult = getNodeFromStream(Util.getResourceAsStream("org/constellation/xml/metadata/imageMetadata.xml"), MetadataType.ISO_19115);
String exceptionMsg = "";
try {
writer.storeMetadata(absExpResult);
} catch (MetadataIoException ex) {
exceptionMsg = ex.getMessage();
}
assertTrue(exceptionMsg.contains("is already used"));
/*Object absResult = reader.getMetadata("gov.noaa.nodc.ncddc. MODXXYYYYJJJ.L3_Mosaic_NOAA_GMX or MODXXYYYYJJJHHMMSS.L3_NOAA_GMX", MetadataType.ISO_19115);
assertTrue(absResult != null);
assertTrue(absResult instanceof DefaultMetadata);
Node result = (Node) absResult;
// may be final String expTitle = "Sea surface temperature and history derived from an analysis of MODIS Level 3 data for the Gulf of Mexico(2)";
final String expTitle = "Sea surface temperature and history derived from an analysis of MODIS Level 3 data for the Gulf of Mexico";
final String title = Utils.findTitle(result);
assertEquals(expTitle, title);*/
}
/**
* Tests the storeMetadata method for ISO 19119 data
*
* @throws java.lang.Exception
*/
@Test
@Order(order=10)
public void writeMetadata19119Test() throws Exception {
Node absExpResult = getNodeFromStream(Util.getResourceAsStream("org/constellation/xml/metadata/meta-19119.xml"), MetadataType.ISO_19115);
writer.storeMetadata(absExpResult);
Node result = reader.getMetadata("mdweb_2_catalog_CSW Data Catalog_profile_inspire_core_service_4", MetadataType.ISO_19115);
assertTrue(result != null);
Node expResult = getNodeFromStream(Util.getResourceAsStream("org/constellation/xml/metadata/meta-19119.xml"), MetadataType.ISO_19115);
compare(expResult, result);
}
@Test
@Order(order=11)
public void writeMetadataEbrimTest() throws Exception {
Node absExpResult = getNodeFromStream(Util.getResourceAsStream("org/constellation/xml/metadata/ebrim1.xml"), MetadataType.EBRIM);
writer.storeMetadata(absExpResult);
Node absResult = reader.getMetadata("000068C3-3B49-C671-89CF-10A39BB1B652", MetadataType.EBRIM);
assertTrue(absResult != null);
assertTrue(absResult instanceof Node);
Node result = (Node) absResult;
Node expResult = getNodeFromStream(Util.getResourceAsStream("org/constellation/xml/metadata/ebrim1.xml"), MetadataType.EBRIM);
compare(expResult, result);
absExpResult = getNodeFromStream(Util.getResourceAsStream("org/constellation/xml/metadata/ebrim2.xml"), MetadataType.EBRIM);
writer.storeMetadata(absExpResult);
absResult = reader.getMetadata("urn:uuid:3e195454-42e8-11dd-8329-00e08157d076", MetadataType.EBRIM);
assertTrue(absResult != null);
assertTrue(absResult instanceof Node);
result = (Node) absResult;
expResult = (Node) getNodeFromStream(Util.getResourceAsStream("org/constellation/xml/metadata/ebrim2.xml"), MetadataType.EBRIM);
compare(expResult, result);
}
@Test
@Order(order=12)
public void writeMetadataEbrim30Test() throws Exception {
Node absExpResult = getNodeFromStream(Util.getResourceAsStream("org/constellation/xml/metadata/ebrim3.xml"), MetadataType.EBRIM);
writer.storeMetadata(absExpResult);
Node absResult = reader.getMetadata("urn:motiive:csw-ebrim", MetadataType.EBRIM);
assertTrue(absResult != null);
assertTrue(absResult instanceof Node);
Node result = (Node) absResult;
Node expResult = getNodeFromStream(Util.getResourceAsStream("org/constellation/xml/metadata/ebrim3.xml"), MetadataType.EBRIM);
compare(expResult, result);
}
@Test
@Order(order=13)
public void deleteMetadataTest() throws Exception {
Node absResult = reader.getMetadata("mdweb_2_catalog_CSW Data Catalog_profile_inspire_core_service_4", MetadataType.ISO_19115);
assertTrue(absResult != null);
Node result = (Node) absResult;
Node expResult = getNodeFromStream(Util.getResourceAsStream("org/constellation/xml/metadata/meta-19119.xml"), MetadataType.ISO_19115);
compare(expResult, result);
/*
* we delete the metadata
*/
writer.deleteMetadata("mdweb_2_catalog_CSW Data Catalog_profile_inspire_core_service_4");
/*
* Metadata is still in cache.
*/
Node cacheResult = reader.getMetadata("mdweb_2_catalog_CSW Data Catalog_profile_inspire_core_service_4", MetadataType.ISO_19115);
compare(result, cacheResult);
/*
* removing from cache
*/
reader.removeFromCache("mdweb_2_catalog_CSW Data Catalog_profile_inspire_core_service_4");
assertNull(reader.getMetadata("mdweb_2_catalog_CSW Data Catalog_profile_inspire_core_service_4", MetadataType.ISO_19115));
}
@Test
@Order(order=14)
public void writeMetadataIDTest() throws Exception {
Node absExpResult = getNodeFromString(StaticMetadata.META_22, MetadataType.ISO_19115);
writer.storeMetadata(absExpResult);
Node result = reader.getMetadata("777-444-852", MetadataType.ISO_19115);
assertTrue(result != null);
Node expResult = getNodeFromString(StaticMetadata.META_22, MetadataType.ISO_19115);
compare(expResult,result);
}
private Object getObjectFromStream(final InputStream stream, final MetadataType mode) throws MetadataIoException {
try {
final boolean replace = mode == MetadataType.ISO_19115;
Unmarshaller um = pool.acquireUnmarshaller();
um.setProperty(LegacyNamespaces.APPLY_NAMESPACE_REPLACEMENTS, replace);
final Object obj = um.unmarshal(stream);
pool.recycle(um);
return obj;
} catch (JAXBException ex) {
throw new MetadataIoException(ex);
}
}
private Node getNodeFromStream(final InputStream stream, final MetadataType mode) throws MetadataIoException {
try {
final boolean replace = mode == MetadataType.ISO_19115;
Unmarshaller um = pool.acquireUnmarshaller();
um.setProperty(LegacyNamespaces.APPLY_NAMESPACE_REPLACEMENTS, replace);
um.setProperty(XML.TIMEZONE, TimeZone.getTimeZone("GMT+2:00"));
final Object obj = um.unmarshal(stream);
pool.recycle(um);
final DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);
final DocumentBuilder docBuilder = dbf.newDocumentBuilder();
final Document document = docBuilder.newDocument();
Marshaller marshaller = EBRIMMarshallerPool.getInstance().acquireMarshaller();
marshaller.setProperty(LegacyNamespaces.APPLY_NAMESPACE_REPLACEMENTS, replace);
final MarshallWarnings warnings = new MarshallWarnings();
marshaller.setProperty(XML.CONVERTER, warnings);
marshaller.setProperty(XML.TIMEZONE, TimeZone.getTimeZone("GMT+2:00"));
marshaller.marshal(obj, document);
pool.recycle(marshaller);
return document.getDocumentElement();
} catch (ParserConfigurationException | JAXBException ex) {
throw new MetadataIoException(ex);
}
}
private Node getNodeFromString(final String s, final MetadataType mode) throws MetadataIoException {
try {
final boolean replace = mode == MetadataType.ISO_19115;
Unmarshaller Unmarshaller = pool.acquireUnmarshaller();
Unmarshaller.setProperty(LegacyNamespaces.APPLY_NAMESPACE_REPLACEMENTS, replace);
Unmarshaller.setProperty(XML.TIMEZONE, TimeZone.getTimeZone("GMT+2:00"));
Marshaller marshaller = EBRIMMarshallerPool.getInstance().acquireMarshaller();
marshaller.setProperty(LegacyNamespaces.APPLY_NAMESPACE_REPLACEMENTS, replace);
marshaller.setProperty(XML.TIMEZONE, TimeZone.getTimeZone("GMT+2:00"));
final Object obj = Unmarshaller.unmarshal(new StringReader(s));
final DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);
final DocumentBuilder docBuilder = dbf.newDocumentBuilder();
final Document document = docBuilder.newDocument();
marshaller.marshal(obj, document);
pool.recycle(Unmarshaller);
pool.recycle(marshaller);
return document.getDocumentElement();
} catch (ParserConfigurationException | JAXBException ex) {
throw new MetadataIoException(ex);
}
}
private void compare(final Node expResultNode, final Node resultNode) throws Exception {
XMLComparator comparator = new XMLComparator(expResultNode, resultNode);
comparator.ignoredAttributes.add("http://www.w3.org/2000/xmlns:*");
comparator.ignoredAttributes.add("codeList");
comparator.ignoredAttributes.add("http://www.w3.org/2001/XMLSchema-instance:xsi:schemaLocation");
comparator.compare();
}
/**
* used for debug
* @param n
* @return
* @throws Exception
*/
private static String getStringFromNode(final Node n) throws Exception {
TransformerFactory tf = TransformerFactory.newInstance();
Transformer transformer = tf.newTransformer();
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
StringWriter writer = new StringWriter();
transformer.transform(new DOMSource(n), new StreamResult(writer));
String output = writer.getBuffer().toString().replaceAll("\n|\r", "");
return output;
}
}