blob: 3f99350bbf430b3ae4ed73d7604c3a540e709463 [file] [log] [blame]
/*
* Copyright (c) 2011, 2021 Oracle and/or its affiliates. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0,
* or the Eclipse Distribution License v. 1.0 which is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
*/
// Contributors:
// dmccann - August 5/2010 - 2.2 - Initial implementation
package org.eclipse.persistence.testing.jaxb.externalizedmetadata.multiplebindings;
import java.io.InputStream;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.xml.namespace.QName;
import javax.xml.transform.stream.StreamSource;
import org.eclipse.persistence.jaxb.JAXBContextFactory;
import org.eclipse.persistence.mappings.DatabaseMapping;
import org.eclipse.persistence.oxm.XMLDescriptor;
import org.eclipse.persistence.testing.jaxb.JAXBWithJSONTestCases;
import org.eclipse.persistence.testing.jaxb.externalizedmetadata.multiplebindings.simple.Department;
import org.eclipse.persistence.testing.jaxb.externalizedmetadata.multiplebindings.simple.Employee;
import org.eclipse.persistence.testing.jaxb.externalizedmetadata.multiplebindings.simple.Person;
import org.eclipse.persistence.testing.jaxb.externalizedmetadata.multiplebindings.simple.Phone;
public class MultipleBindingsFourFilesTestCases extends JAXBWithJSONTestCases {
protected final static String XML_RESOURCE = "org/eclipse/persistence/testing/jaxb/externalizedmetadata/multiplebindings/fourfilesmultiplebindings.xml";
protected final static String JSON_RESOURCE = "org/eclipse/persistence/testing/jaxb/externalizedmetadata/multiplebindings/fourfilesmultiplebindings.json";
XMLDescriptor employeeDesc = null;
public MultipleBindingsFourFilesTestCases(String name) throws Exception {
super(name);
}
@Override
public void setUp() throws Exception {
setControlDocument(XML_RESOURCE);
setControlJSON(JSON_RESOURCE);
super.setUp();
Type[] types = new Type[2];
types[0] = Person.class;
types[1] = Employee.class;
setTypes(types);
}
public void init() throws Exception {
Type[] types = new Type[2];
types[0] = Person.class;
types[1] = Employee.class;
setTypes(types);
}
@Override
protected Object getControlObject() {
Employee emp = new Employee();
emp.age = 35;
emp.id = "someID";
emp.name = "Bob Jones";
emp.address = "123 theStreet";
emp.jobTitle = "job3";
emp.departments = new ArrayList();
emp.departments.add(Department.DEV);
emp.departments.add(Department.SUPPORT);
Phone phone = new Phone();
phone.number = "12345678";
emp.phone = phone;
return emp;
}
public void testSchemaGen() throws Exception {
List<InputStream> controlSchemas = new ArrayList<InputStream>();
InputStream is = ClassLoader.getSystemResourceAsStream("org/eclipse/persistence/testing/jaxb/externalizedmetadata/multiplebindings/fourfilesmultiplebindings.xsd");
//InputStream is2= ClassLoader.getSystemResourceAsStream("org/eclipse/persistence/testing/jaxb/externalizedmetadata/multiplebindings/fourfilesmultiplebindings2.xsd");
controlSchemas.add(is);
//controlSchemas.add(is2);
super.testSchemaGen(controlSchemas);
}
@Override
protected Map getProperties() {
Map overrides = new HashMap();
//DOMSource src1 = null;
//DOMSource src2 = null;
StreamSource src1 = null;
StreamSource src2 = null;
StreamSource src3 = null;
StreamSource src4 = null;
InputStream iStream = classLoader.getResourceAsStream("org/eclipse/persistence/testing/jaxb/externalizedmetadata/multiplebindings/eclipselink-oxm1.xml");
InputStream iStream2 = classLoader.getResourceAsStream("org/eclipse/persistence/testing/jaxb/externalizedmetadata/multiplebindings/eclipselink-oxm2.xml");
InputStream iStream3 = classLoader.getResourceAsStream("org/eclipse/persistence/testing/jaxb/externalizedmetadata/multiplebindings/eclipselink-oxm3.xml");
InputStream iStream4 = classLoader.getResourceAsStream("org/eclipse/persistence/testing/jaxb/externalizedmetadata/multiplebindings/eclipselink-oxm4.xml");
// InputStream iStreamCopy = classLoader.getResourceAsStream("eclipselink-oxm1.xml");
try {
//Document doc = parser.parse(new ByteArrayInputStream(bindings1.getBytes()));
//src1 = new DOMSource(doc.getDocumentElement());
//src2 = new DOMSource(doc.getDocumentElement());
src1 = new StreamSource(iStream);
src2 = new StreamSource(iStream2);
src3 = new StreamSource(iStream3);
src4 = new StreamSource(iStream4);
} catch (Exception e) {
e.printStackTrace();
fail("An error occurred during setup");
}
ArrayList<Object> bindingsList = new ArrayList();
bindingsList.add(src1);
bindingsList.add(src2);
bindingsList.add(src3);
bindingsList.add(src4);
overrides.put("org.eclipse.persistence.testing.jaxb.externalizedmetadata.multiplebindings.simple", bindingsList);
Map props = new HashMap();
props.put(JAXBContextFactory.ECLIPSELINK_OXM_XML_KEY, overrides);
return props;
}
public void testUserProperties(){
String PROPKEY_1 ="1";
String PROPKEY_2 ="2";
String PROPKEY_3 ="3";
String PROPVAL_1 ="A";
Integer PROPVAL_2 =66;
Boolean PROPVAL_3 =Boolean.TRUE;
XMLDescriptor employeeDesc = this.xmlContext.getDescriptor(new QName("", "empRoot4"));
DatabaseMapping projectNameMapping = employeeDesc.getMappingForAttributeName("id");
Map props = projectNameMapping.getProperties();
assertNotNull("No user-defined properties exist on the mapping for [id]", props);
assertTrue("Expected [3] user-defined properties, but there were [" + props.size() + "]", props.size() == 3);
// verify entries exist for each key
assertNotNull("No property found for key [" + PROPKEY_1 + "]", props.get(PROPKEY_1));
assertNotNull("No property found for key [" + PROPKEY_2 + "]", props.get(PROPKEY_2));
assertNotNull("No property found for key [" + PROPKEY_3 + "]", props.get(PROPKEY_3));
// verify value-types
assertTrue("Expected value-type [String] for key [" + PROPKEY_1 + "] but was [" + props.get(PROPKEY_1).getClass().getName() + "]", props.get(PROPKEY_1) instanceof String);
assertTrue("Expected value-type [Integer] for key [" + PROPKEY_2 + "] but was [" + props.get(PROPKEY_2).getClass().getName() + "]", props.get(PROPKEY_2) instanceof Integer);
assertTrue("Expected value-type [Boolean] for key [" + PROPKEY_3 + "] but was [" + props.get(PROPKEY_3).getClass().getName() + "]", props.get(PROPKEY_3) instanceof Boolean);
// verify values
assertTrue("Expected property value [" + PROPVAL_1 + "] for key [" + PROPKEY_1 + "] but was [" + props.get(PROPKEY_1) + "]", PROPVAL_1.equals(props.get(PROPKEY_1)));
assertTrue("Expected property value [" + PROPVAL_2 + "] for key [" + PROPKEY_2 + "] but was [" + props.get(PROPKEY_2) + "]", PROPVAL_2.equals(props.get(PROPKEY_2)));
assertTrue("Expected property value [" + PROPVAL_3 + "] for key [" + PROPKEY_3 + "] but was [" + props.get(PROPKEY_3) + "]", PROPVAL_3 == props.get(PROPKEY_3));
}
public void testDescriptorProperties() {
// create the JAXBContext
assertNotNull("JAXBContext creation failed", xmlContext);
XMLDescriptor xdesc = xmlContext.getDescriptor(new QName("", "empRoot4"));
assertNotNull("Employee descriptor is null", xdesc);
assertNotNull("No user-defined properties exist on the descriptor for Employee", xdesc.getProperties());
Map props = xdesc.getProperties();
assertEquals(8, props.size());
assertEquals("I", props.get("2"));
}
public void testNamespaceResolver(){
assertNotNull("JAXBContext creation failed", xmlContext);
XMLDescriptor xdesc = xmlContext.getDescriptor(new QName("", "empRoot4"));
assertNotNull("Employee descriptor is null", xdesc);
// Test merged namespaces
// Ensure that there are two namespaces for prefix "uriA" and one for "uriB"
String uriA = "http://www.example.com/uriA";
String uriB = "http://www.example.com/uriB";
String prefixA = "prefixA";
String prefixNewA = "newPrefixA";
String prefixB = "prefixB";
assertEquals(uriA, xdesc.getNamespaceResolver().resolveNamespacePrefix(prefixA));
assertEquals(uriA, xdesc.getNamespaceResolver().resolveNamespacePrefix(prefixNewA));
assertEquals(uriB, xdesc.getNamespaceResolver().resolveNamespacePrefix(prefixB));
}
}