blob: 3ea614e0a40e55d66641f0356b5916a097898620 [file] [log] [blame]
/*
* Copyright (c) 1998, 2020 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:
// Oracle - initial API and implementation from Oracle TopLink
package org.eclipse.persistence.testing.oxm.mappings.namespaces;
import javax.xml.namespace.QName;
import org.eclipse.persistence.oxm.NamespaceResolver;
import org.eclipse.persistence.oxm.XMLDescriptor;
import org.eclipse.persistence.oxm.XMLField;
import org.eclipse.persistence.oxm.mappings.*;
import org.eclipse.persistence.oxm.schema.XMLSchemaClassPathReference;
import org.eclipse.persistence.sessions.Project;
public class ExtraNamespacesBug6004272Project extends Project {
public ExtraNamespacesBug6004272Project() {
super();
this.addDescriptor(getManagerDescriptor());
this.addDescriptor(getEmployeeDescriptor());
this.addDescriptor(getRootDescriptor());
this.addDescriptor(getCompanyDescriptor());
this.addDescriptor(getDepartmentDescriptor());
this.addDescriptor(getTeamDescriptor());
this.addDescriptor(getProjectDescriptor());
}
private XMLDescriptor getRootDescriptor() {
XMLDescriptor xmlDescriptor = new XMLDescriptor();
xmlDescriptor.setJavaClass(Root.class);
xmlDescriptor.setDefaultRootElement("ns1:root");
XMLCompositeCollectionMapping companiesMapping = new XMLCompositeCollectionMapping();
companiesMapping.setAttributeName("companies");
companiesMapping.setXPath("ns2:companies/ns2:company");
companiesMapping.setReferenceClass(Company.class);
xmlDescriptor.addMapping(companiesMapping);
NamespaceResolver nsResolver = new NamespaceResolver();
nsResolver.put("ns1", "http://www.example.com/rootns");
nsResolver.put("ns2", "http://www.example.com/ns2");
xmlDescriptor.setNamespaceResolver(nsResolver);
return xmlDescriptor;
}
private XMLDescriptor getCompanyDescriptor() {
XMLDescriptor xmlDescriptor = new XMLDescriptor();
xmlDescriptor.setJavaClass(Company.class);
XMLDirectMapping nameMapping = new XMLDirectMapping();
nameMapping.setAttributeName("companyName");
nameMapping.setXPath("ns2:companyname/text()");
xmlDescriptor.addMapping(nameMapping);
XMLCompositeObjectMapping managerMapping = new XMLCompositeObjectMapping();
managerMapping.setAttributeName("manager");
managerMapping.setXPath("ns2:manager");
managerMapping.setReferenceClass(Manager.class);
//XMLField xmlFld = (XMLField) managerMapping.getField();
//xmlFld.setLeafElementType(new QName("http://www.example.com/ns2","manager-type"));
xmlDescriptor.addMapping(managerMapping);
XMLCompositeCollectionMapping departmentsMapping = new XMLCompositeCollectionMapping();
departmentsMapping.setAttributeName("departments");
departmentsMapping.setXPath("ns2:departments/ns2:dept");
departmentsMapping.setReferenceClass(Department.class);
xmlDescriptor.addMapping(departmentsMapping);
NamespaceResolver nsResolver = new NamespaceResolver();
nsResolver.put("ns1", "http://www.example.com/rootns");//keep in resolver
nsResolver.put("ns2", "http://www.example.com/ns2");
nsResolver.put("aaa", "http://www.example.com/aaa");
xmlDescriptor.setNamespaceResolver(nsResolver);
return xmlDescriptor;
}
private XMLDescriptor getEmployeeDescriptor() {
XMLDescriptor xmlDescriptor = new XMLDescriptor();
xmlDescriptor.setJavaClass(Employee.class);
xmlDescriptor.setDefaultRootElement("ns4:employee");
XMLField classIndicatorField = new XMLField("@xsi:type");
xmlDescriptor.getInheritancePolicy().setClassIndicatorField(classIndicatorField);
xmlDescriptor.getInheritancePolicy().addClassIndicator(Employee.class, "ns4:emp-type");
xmlDescriptor.getInheritancePolicy().addClassIndicator(Manager.class, "ns2:manager-type");
xmlDescriptor.getInheritancePolicy().setShouldReadSubclasses(true);
XMLDirectMapping idMapping = new XMLDirectMapping();
idMapping.setAttributeName("id");
idMapping.setXPath("ns4:personal-info/@ns4:id");
xmlDescriptor.addMapping(idMapping);
XMLDirectMapping nameMapping = new XMLDirectMapping();
nameMapping.setAttributeName("name");
nameMapping.setXPath("ns4:personal-info/ns4:name/text()");
xmlDescriptor.addMapping(nameMapping);
NamespaceResolver nsResolver = new NamespaceResolver();
nsResolver.put("ns4", "http://www.example.com/ns4");
nsResolver.put("ns2", "http://www.example.com/ns2");
nsResolver.put("xsi", "http://www.w3.org/2001/XMLSchema-instance");
xmlDescriptor.setNamespaceResolver(nsResolver);
XMLSchemaClassPathReference ref = new XMLSchemaClassPathReference();
ref.setSchemaContext("/ns4:emp-type");
ref.setType(XMLSchemaClassPathReference.COMPLEX_TYPE);
xmlDescriptor.setSchemaReference(ref);
return xmlDescriptor;
}
private XMLDescriptor getManagerDescriptor() {
XMLDescriptor xmlDescriptor = new XMLDescriptor();
xmlDescriptor.setJavaClass(Manager.class);
xmlDescriptor.setDefaultRootElement("ns3:manager");
xmlDescriptor.getInheritancePolicy().setParentClass(Employee.class);
XMLDirectMapping titleMapping = new XMLDirectMapping();
titleMapping.setAttributeName("title");
titleMapping.setXPath("ns3:title/text()");
xmlDescriptor.addMapping(titleMapping);
XMLSchemaClassPathReference ref = new XMLSchemaClassPathReference();
ref.setSchemaContext("/ns2:manager-type");
ref.setType(XMLSchemaClassPathReference.COMPLEX_TYPE);
xmlDescriptor.setSchemaReference(ref);
NamespaceResolver nsResolver = new NamespaceResolver();
nsResolver.put("ns3", "http://www.example.com/ns3");
nsResolver.put("ns2", "http://www.example.com/ns2");
nsResolver.put("ns4", "http://www.example.com/ns4");
nsResolver.put("ns7", "http://www.example.com/ns7");
nsResolver.put("xsi", "http://www.w3.org/2001/XMLSchema-instance");
xmlDescriptor.setNamespaceResolver(nsResolver);
return xmlDescriptor;
}
private XMLDescriptor getDepartmentDescriptor() {
XMLDescriptor xmlDescriptor = new XMLDescriptor();
xmlDescriptor.setJavaClass(Department.class);
xmlDescriptor.setDefaultRootElement("ns3:department");
XMLDirectMapping nameMapping = new XMLDirectMapping();
nameMapping.setAttributeName("deptName");
nameMapping.setXPath("ns3:deptName/text()");
xmlDescriptor.addMapping(nameMapping);
XMLAnyCollectionMapping teamsMapping = new XMLAnyCollectionMapping();
teamsMapping.setAttributeName("teams");
teamsMapping.setXPath("ns3:teams");
teamsMapping.setUseXMLRoot(true);
xmlDescriptor.addMapping(teamsMapping);
NamespaceResolver nsResolver = new NamespaceResolver();
nsResolver.put("ns3", "http://www.example.com/ns3");
xmlDescriptor.setNamespaceResolver(nsResolver);
return xmlDescriptor;
}
private XMLDescriptor getTeamDescriptor() {
XMLDescriptor xmlDescriptor = new XMLDescriptor();
xmlDescriptor.setJavaClass(Team.class);
xmlDescriptor.setDefaultRootElement("ns4:team");
XMLDirectMapping nameMapping = new XMLDirectMapping();
nameMapping.setAttributeName("teamName");
nameMapping.setXPath("ns4:teamName/text()");
xmlDescriptor.addMapping(nameMapping);
XMLAnyObjectMapping teamLeaderMapping = new XMLAnyObjectMapping();
teamLeaderMapping.setAttributeName("teamLeader");
teamLeaderMapping.setXPath("ns5:leader");
xmlDescriptor.addMapping(teamLeaderMapping);
XMLCompositeCollectionMapping empsMapping = new XMLCompositeCollectionMapping();
empsMapping.setAttributeName("employees");
empsMapping.setXPath("ns6:emp");
//no reference class
xmlDescriptor.addMapping(empsMapping);
XMLSchemaClassPathReference ref = new XMLSchemaClassPathReference();
ref.setSchemaContext("/ns4:team");
ref.setType(XMLSchemaClassPathReference.COMPLEX_TYPE);
xmlDescriptor.setSchemaReference(ref);
NamespaceResolver nsResolver = new NamespaceResolver();
nsResolver.put("ns4", "http://www.example.com/ns4");
nsResolver.put("ns5", "http://www.example.com/ns5");
nsResolver.put("ns6", "http://www.example.com/ns6");
//nsResolver.put("ns2", "http://www.example.com/ns2");
xmlDescriptor.setNamespaceResolver(nsResolver);
return xmlDescriptor;
}
private XMLDescriptor getProjectDescriptor() {
XMLDescriptor xmlDescriptor = new XMLDescriptor();
xmlDescriptor.setJavaClass(org.eclipse.persistence.testing.oxm.mappings.namespaces.Project.class);
xmlDescriptor.setDefaultRootElement("ns6Other:project");
XMLDirectMapping nameMapping = new XMLDirectMapping();
nameMapping.setAttributeName("name");
nameMapping.setXPath("ns6Other:name/text()");
xmlDescriptor.addMapping(nameMapping);
XMLDirectMapping descMapping = new XMLDirectMapping();
descMapping.setAttributeName("description");
descMapping.setXPath("ns6Other:description/text()");
xmlDescriptor.addMapping(descMapping);
NamespaceResolver nsResolver = new NamespaceResolver();
nsResolver.put("ns6Other", "http://www.example.com/ns6");
XMLSchemaClassPathReference ref = new XMLSchemaClassPathReference();
ref.setSchemaContext("/ns6Other:project-type");
ref.setType(XMLSchemaClassPathReference.COMPLEX_TYPE);
xmlDescriptor.setSchemaReference(ref);
xmlDescriptor.setNamespaceResolver(nsResolver);
return xmlDescriptor;
}
}