blob: ad36dd16148ae61348573ac171c0bb2311566ee4 [file] [log] [blame]
/*
* Copyright (c) 1998, 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:
// Oracle - initial API and implementation from Oracle TopLink
package org.eclipse.persistence.testing.jaxb.xmlmarshaller;
import java.net.URL;
import org.eclipse.persistence.oxm.NamespaceResolver;
import org.eclipse.persistence.oxm.XMLDescriptor;
import org.eclipse.persistence.oxm.XMLField;
import org.eclipse.persistence.oxm.mappings.XMLCompositeObjectMapping;
import org.eclipse.persistence.oxm.mappings.XMLDirectMapping;
import org.eclipse.persistence.oxm.schema.XMLSchemaReference;
import org.eclipse.persistence.oxm.schema.XMLSchemaURLReference;
import org.eclipse.persistence.oxm.schema.XMLSchemaFileReference;
import org.eclipse.persistence.sessions.Project;
public class EmployeeProject extends Project {
private NamespaceResolver namespaceResolver;
public EmployeeProject() {
namespaceResolver = new NamespaceResolver();
namespaceResolver.put("xsi", "http://www.w3.org/2001/XMLSchema-instance");
addDescriptor(getEmployeeDescriptor());
addDescriptor(getAddressDescriptor());
addDescriptor(getPOBoxAddressDescriptor());
addDescriptor(getPhoneDescriptor());
addDescriptor(getBadgeDescriptor());
addDescriptor(getJobDescriptor());
addDescriptor(getJob2Descriptor());
}
private XMLDescriptor getEmployeeDescriptor() {
XMLDescriptor descriptor = new XMLDescriptor();
descriptor.setJavaClass(Employee.class);
descriptor.setDefaultRootElement("employee");
XMLDirectMapping idMapping = new XMLDirectMapping();
idMapping.setAttributeName("id");
idMapping.setGetMethodName("getID");
idMapping.setSetMethodName("setID");
idMapping.setXPath("id/text()");
descriptor.addMapping(idMapping);
XMLDirectMapping nameMapping = new XMLDirectMapping();
nameMapping.setAttributeName("name");
nameMapping.setGetMethodName("getName");
nameMapping.setSetMethodName("setName");
nameMapping.setXPath("name/text()");
descriptor.addMapping(nameMapping);
XMLCompositeObjectMapping homeAddressMapping = new XMLCompositeObjectMapping();
homeAddressMapping.setReferenceClass(Address.class);
homeAddressMapping.setAttributeName("home-address");
homeAddressMapping.setGetMethodName("getHomeAddress");
homeAddressMapping.setSetMethodName("setHomeAddress");
homeAddressMapping.setXPath("home-address");
descriptor.addMapping(homeAddressMapping);
XMLCompositeObjectMapping workAddressMapping = new XMLCompositeObjectMapping();
workAddressMapping.setReferenceClass(Address.class);
workAddressMapping.setAttributeName("work-address");
workAddressMapping.setGetMethodName("getWorkAddress");
workAddressMapping.setSetMethodName("setWorkAddress");
workAddressMapping.setXPath("work-address");
descriptor.addMapping(workAddressMapping);
XMLCompositeObjectMapping phoneMapping = new XMLCompositeObjectMapping();
phoneMapping.setReferenceClass(Phone.class);
phoneMapping.setAttributeName("phone");
phoneMapping.setGetMethodName("getPhone");
phoneMapping.setSetMethodName("setPhone");
phoneMapping.setXPath("phone");
descriptor.addMapping(phoneMapping);
XMLCompositeObjectMapping badgeMapping = new XMLCompositeObjectMapping();
badgeMapping.setReferenceClass(Badge.class);
badgeMapping.setAttributeName("badge");
badgeMapping.setGetMethodName("getBadge");
badgeMapping.setSetMethodName("setBadge");
badgeMapping.setXPath("badge-id");
descriptor.addMapping(badgeMapping);
XMLDirectMapping empCodeMapping = new XMLDirectMapping();
empCodeMapping.setAttributeName("empCode");
empCodeMapping.setGetMethodName("getEmpCode");
empCodeMapping.setSetMethodName("setEmpCode");
empCodeMapping.setXPath("@empCode");
descriptor.addMapping(empCodeMapping);
URL schemaURL = ClassLoader.getSystemResource("org/eclipse/persistence/testing/jaxb/xmlmarshaller/Employee.xsd");
XMLSchemaURLReference schemaRef = new XMLSchemaURLReference(schemaURL);
schemaRef.setType(XMLSchemaReference.ELEMENT);
schemaRef.setSchemaContext("/employee");
descriptor.setSchemaReference(schemaRef);
return descriptor;
}
private XMLDescriptor getAddressDescriptor() {
XMLDescriptor descriptor = new XMLDescriptor();
descriptor.setJavaClass(Address.class);
descriptor.setNamespaceResolver(namespaceResolver);
XMLField classIndicatorField = new XMLField("@xsi:type");
descriptor.getInheritancePolicy().setClassIndicatorField(classIndicatorField);
descriptor.getInheritancePolicy().addClassIndicator(Address.class, "address-type");
descriptor.getInheritancePolicy().addClassIndicator(POBoxAddress.class, "po-box-address-type");
XMLDirectMapping streetMapping = new XMLDirectMapping();
streetMapping.setAttributeName("street");
streetMapping.setGetMethodName("getStreet");
streetMapping.setSetMethodName("setStreet");
streetMapping.setXPath("street/text()");
descriptor.addMapping(streetMapping);
XMLDirectMapping cityMapping = new XMLDirectMapping();
cityMapping.setAttributeName("city");
cityMapping.setGetMethodName("getCity");
cityMapping.setSetMethodName("setCity");
cityMapping.setXPath("city/text()");
descriptor.addMapping(cityMapping);
XMLDirectMapping stateMapping = new XMLDirectMapping();
stateMapping.setAttributeName("state");
stateMapping.setGetMethodName("getState");
stateMapping.setSetMethodName("setState");
stateMapping.setXPath("state/text()");
descriptor.addMapping(stateMapping);
XMLDirectMapping zipCodeMapping = new XMLDirectMapping();
zipCodeMapping.setAttributeName("zip-code");
zipCodeMapping.setGetMethodName("getZipCode");
zipCodeMapping.setSetMethodName("setZipCode");
zipCodeMapping.setXPath("zip-code/text()");
descriptor.addMapping(zipCodeMapping);
URL schemaURL = ClassLoader.getSystemResource("org/eclipse/persistence/testing/jaxb/xmlmarshaller/Employee.xsd");
XMLSchemaURLReference schemaRef = new XMLSchemaURLReference(schemaURL);
schemaRef.setType(XMLSchemaReference.COMPLEX_TYPE);
schemaRef.setSchemaContext("/address-type");
descriptor.setSchemaReference(schemaRef);
return descriptor;
}
private XMLDescriptor getPOBoxAddressDescriptor() {
XMLDescriptor descriptor = new XMLDescriptor();
descriptor.setJavaClass(POBoxAddress.class);
descriptor.setNamespaceResolver(namespaceResolver);
descriptor.getInheritancePolicy().setParentClass(Address.class);
XMLDirectMapping rrMapping = new XMLDirectMapping();
rrMapping.setAttributeName("rrnumber");
rrMapping.setGetMethodName("getRRNumber");
rrMapping.setSetMethodName("setRRNumber");
rrMapping.setXPath("rrnum/text()");
descriptor.addMapping(rrMapping);
XMLDirectMapping poboxMapping = new XMLDirectMapping();
poboxMapping.setAttributeName("pobox");
poboxMapping.setGetMethodName("getPOBox");
poboxMapping.setSetMethodName("setPOBox");
poboxMapping.setXPath("po-box/text()");
descriptor.addMapping(poboxMapping);
URL schemaURL = ClassLoader.getSystemResource("org/eclipse/persistence/testing/jaxb/xmlmarshaller/Employee.xsd");
XMLSchemaURLReference schemaRef = new XMLSchemaURLReference(schemaURL);
schemaRef.setType(XMLSchemaReference.COMPLEX_TYPE);
schemaRef.setSchemaContext("/po-box-address-type");
descriptor.setSchemaReference(schemaRef);
return descriptor;
}
private XMLDescriptor getPhoneDescriptor() {
XMLDescriptor descriptor = new XMLDescriptor();
descriptor.setJavaClass(Phone.class);
XMLDirectMapping numberMapping = new XMLDirectMapping();
numberMapping.setAttributeName("number");
numberMapping.setGetMethodName("getNumber");
numberMapping.setSetMethodName("setNumber");
numberMapping.setXPath("text()");
descriptor.addMapping(numberMapping);
URL schemaURL = ClassLoader.getSystemResource("org/eclipse/persistence/testing/jaxb/xmlmarshaller/Employee.xsd");
XMLSchemaURLReference schemaRef = new XMLSchemaURLReference(schemaURL);
schemaRef.setType(XMLSchemaReference.SIMPLE_TYPE);
schemaRef.setSchemaContext("/phone-type");
descriptor.setSchemaReference(schemaRef);
return descriptor;
}
private XMLDescriptor getBadgeDescriptor() {
XMLDescriptor descriptor = new XMLDescriptor();
descriptor.setDefaultRootElement("badge-id");
descriptor.setJavaClass(Badge.class);
XMLDirectMapping numberMapping = new XMLDirectMapping();
numberMapping.setAttributeName("number");
numberMapping.setGetMethodName("getNumber");
numberMapping.setSetMethodName("setNumber");
numberMapping.setXPath("text()");
descriptor.addMapping(numberMapping);
URL schemaURL = ClassLoader.getSystemResource("org/eclipse/persistence/testing/jaxb/xmlmarshaller/Employee.xsd");
XMLSchemaURLReference schemaRef = new XMLSchemaURLReference(schemaURL);
schemaRef.setType(XMLSchemaReference.ELEMENT);
schemaRef.setSchemaContext("/employee/badge-id");
descriptor.setSchemaReference(schemaRef);
return descriptor;
}
private XMLDescriptor getJobDescriptor() {
XMLDescriptor descriptor = new XMLDescriptor();
descriptor.setJavaClass(Job.class);
descriptor.setDefaultRootElement("job");
XMLDirectMapping titleMapping = new XMLDirectMapping();
titleMapping.setAttributeName("title");
titleMapping.setGetMethodName("getTitle");
titleMapping.setSetMethodName("setTitle");
titleMapping.setXPath("title/text()");
descriptor.addMapping(titleMapping);
URL schemaURL = ClassLoader.getSystemResource("org/eclipse/persistence/testing/jaxb/xmlmarshaller/Employee.xsd");
XMLSchemaURLReference schemaRef = new XMLSchemaURLReference(schemaURL);
schemaRef.setType(XMLSchemaReference.ELEMENT);
schemaRef.setSchemaContext("/employee/job");
descriptor.setSchemaReference(schemaRef);
return descriptor;
}
private XMLDescriptor getJob2Descriptor() {
XMLDescriptor descriptor = new XMLDescriptor();
descriptor.setJavaClass(Job2.class);
descriptor.setDefaultRootElement("job2");
XMLDirectMapping titleMapping = new XMLDirectMapping();
titleMapping.setAttributeName("title");
titleMapping.setGetMethodName("getTitle");
titleMapping.setSetMethodName("setTitle");
titleMapping.setXPath("title/text()");
descriptor.addMapping(titleMapping);
URL schemaURL = ClassLoader.getSystemResource("org/eclipse/persistence/testing/jaxb/xmlmarshaller/Employee.xsd");
XMLSchemaURLReference schemaRef = new XMLSchemaURLReference(schemaURL);
schemaRef.setType(XMLSchemaReference.ELEMENT);
schemaRef.setSchemaContext("/employee/job2");
descriptor.setSchemaReference(schemaRef);
return descriptor;
}
}