org.eclipse.persistence.dbws.DBWSModelProject Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of eclipselink Show documentation
Show all versions of eclipselink Show documentation
EclipseLink build based upon Git transaction 346465e
/*******************************************************************************
* Copyright (c) 1998, 2012 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 v1.0 and Eclipse Distribution License v. 1.0
* which accompanies this distribution.
* The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
* and the Eclipse Distribution License is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* Contributors:
* Oracle - initial API and implementation from Oracle TopLink
******************************************************************************/
package org.eclipse.persistence.dbws;
//javase imports
import java.util.Iterator;
import java.util.Map;
import java.util.Vector;
import org.xml.sax.Attributes;
// Java extension imports
import static javax.xml.XMLConstants.W3C_XML_SCHEMA_INSTANCE_NS_URI;
import static javax.xml.XMLConstants.W3C_XML_SCHEMA_NS_URI;
// EclipseLink imports
import org.eclipse.persistence.descriptors.ClassExtractor;
import org.eclipse.persistence.exceptions.DescriptorException;
import org.eclipse.persistence.internal.xr.Attachment;
import org.eclipse.persistence.internal.xr.BatchQueryOperation;
import org.eclipse.persistence.internal.xr.CollectionResult;
import org.eclipse.persistence.internal.xr.DeleteOperation;
import org.eclipse.persistence.internal.xr.InsertOperation;
import org.eclipse.persistence.internal.xr.JPQLQueryHandler;
import org.eclipse.persistence.internal.xr.NamedQueryHandler;
import org.eclipse.persistence.internal.xr.Operation;
import org.eclipse.persistence.internal.xr.Parameter;
import org.eclipse.persistence.internal.xr.ProcedureArgument;
import org.eclipse.persistence.internal.xr.ProcedureOutputArgument;
import org.eclipse.persistence.internal.xr.QueryOperation;
import org.eclipse.persistence.internal.xr.QNameTransformer;
import org.eclipse.persistence.internal.xr.Result;
import org.eclipse.persistence.internal.xr.SQLQueryHandler;
import org.eclipse.persistence.internal.xr.StoredFunctionQueryHandler;
import org.eclipse.persistence.internal.xr.StoredProcedureQueryHandler;
import org.eclipse.persistence.internal.xr.UpdateOperation;
import org.eclipse.persistence.internal.xr.XRServiceModel;
import org.eclipse.persistence.internal.xr.sxf.SimpleXMLFormat;
import org.eclipse.persistence.mappings.AttributeAccessor;
import org.eclipse.persistence.oxm.NamespaceResolver;
import org.eclipse.persistence.oxm.XMLDescriptor;
import org.eclipse.persistence.oxm.XMLField;
import org.eclipse.persistence.oxm.mappings.XMLChoiceCollectionMapping;
import org.eclipse.persistence.oxm.mappings.XMLChoiceObjectMapping;
import org.eclipse.persistence.oxm.mappings.XMLCompositeCollectionMapping;
import org.eclipse.persistence.oxm.mappings.XMLCompositeDirectCollectionMapping;
import org.eclipse.persistence.oxm.mappings.XMLCompositeObjectMapping;
import org.eclipse.persistence.oxm.mappings.XMLDirectMapping;
import org.eclipse.persistence.oxm.mappings.XMLTransformationMapping;
import org.eclipse.persistence.oxm.record.UnmarshalRecord;
import org.eclipse.persistence.sessions.Project;
import org.eclipse.persistence.sessions.Record;
import org.eclipse.persistence.sessions.Session;
import static org.eclipse.persistence.internal.xr.sxf.SimpleXMLFormat.DEFAULT_SIMPLE_XML_FORMAT_TAG;
import static org.eclipse.persistence.internal.xr.sxf.SimpleXMLFormat.DEFAULT_SIMPLE_XML_TAG;
import static org.eclipse.persistence.oxm.XMLConstants.BOOLEAN_QNAME;
@SuppressWarnings({"serial", "rawtypes"})
public class DBWSModelProject extends Project {
public NamespaceResolver ns;
public DBWSModelProject() {
setName("DBWSModelProject");
ns = new NamespaceResolver();
ns.put("xsi", W3C_XML_SCHEMA_INSTANCE_NS_URI);
ns.put("xsd", W3C_XML_SCHEMA_NS_URI);
addDescriptor(buildServiceDescriptor());
addDescriptor(buildAttachmentDescriptor());
addDescriptor(buildResultDescriptor());
addDescriptor(buildCollectionResultDescriptor());
addDescriptor(buildParameterDescriptor());
addDescriptor(buildSimpleXMLFormatDescriptor());
addDescriptor(buildNamedQueryDescriptor());
addDescriptor(buildSqlQueryDescriptor());
addDescriptor(buildJpqlQueryDescriptor());
addDescriptor(buildStoredProcedureQueryDescriptor());
addDescriptor(buildProcedureArgumentDescriptor());
addDescriptor(buildProcedureOutputArgumentDescriptor());
addDescriptor(buildStoredFunctionQueryDescriptor());
addDescriptor(buildQueryDescriptor());
addDescriptor(buildInsertDescriptor());
addDescriptor(buildDeleteDescriptor());
addDescriptor(buildUpdateDescriptor());
addDescriptor(buildBatchQueryDescriptor());
for (Iterator descriptors = getDescriptors().values().iterator(); descriptors.hasNext();) {
XMLDescriptor descriptor = (XMLDescriptor)descriptors.next();
descriptor.setNamespaceResolver(ns);
}
}
protected XMLDescriptor buildServiceDescriptor() {
XMLDescriptor descriptor = new XMLDescriptor();
descriptor.setJavaClass(DBWSModel.class);
descriptor.setDefaultRootElement("dbws");
XMLDirectMapping name = new XMLDirectMapping();
name.setAttributeName("name");
name.setXPath("name/text()");
descriptor.addMapping(name);
XMLDirectMapping sessionFile = new XMLDirectMapping();
sessionFile.setAttributeName("sessionsFile");
sessionFile.setXPath("sessions-file/text()");
descriptor.addMapping(sessionFile);
XMLChoiceCollectionMapping operationsMapping = new XMLChoiceCollectionMapping();
operationsMapping.setAttributeName("operations");
operationsMapping.setAttributeAccessor(new AttributeAccessor() {
public Object getAttributeValueFromObject(Object object) {
return ((XRServiceModel)object).getOperationsList();
}
public void setAttributeValueInObject(Object object, Object value) {
Vector v = (Vector)value;
XRServiceModel dbwsModel = (XRServiceModel)object;
Map operations = dbwsModel.getOperations();
for (Iterator i = v.iterator(); i.hasNext();) {
Object obj = i.next();
if (obj instanceof Operation) {
Operation op = (Operation)obj;
operations.put(op.getName(), op);
}
}
}
});
operationsMapping.addChoiceElement("insert", InsertOperation.class);
operationsMapping.addChoiceElement("query", QueryOperation.class);
operationsMapping.addChoiceElement("update", UpdateOperation.class);
operationsMapping.addChoiceElement("delete", DeleteOperation.class);
operationsMapping.addChoiceElement("batch-sql-query", BatchQueryOperation.class);
descriptor.addMapping(operationsMapping);
return descriptor;
}
// query
//
// name,parameter*,result,named-query|sql|jpql|stored-procedure|stored-function
protected XMLDescriptor buildQueryDescriptor() {
XMLDescriptor descriptor = new XMLDescriptor();
descriptor.setJavaClass(QueryOperation.class);
descriptor.setDefaultRootElement("query");
XMLDirectMapping name = new XMLDirectMapping();
name.setAttributeName("name");
name.setXPath("name/text()");
descriptor.addMapping(name);
XMLCompositeCollectionMapping parameters = new XMLCompositeCollectionMapping();
parameters.setAttributeName("parameters");
parameters.setReferenceClass(Parameter.class);
parameters.setXPath("parameter");
descriptor.addMapping(parameters);
XMLCompositeObjectMapping resultMapping = new XMLCompositeObjectMapping();
resultMapping.setAttributeName("result");
resultMapping.setReferenceClass(Result.class);
resultMapping.setXPath( "result");
descriptor.addMapping(resultMapping);
XMLChoiceObjectMapping queryHandlerMapping = new XMLChoiceObjectMapping();
queryHandlerMapping.setAttributeName("queryHandler");
queryHandlerMapping.addChoiceElement("jpql", JPQLQueryHandler.class);
queryHandlerMapping.addChoiceElement("named-query", NamedQueryHandler.class);
queryHandlerMapping.addChoiceElement("sql", SQLQueryHandler.class);
queryHandlerMapping.addChoiceElement("stored-procedure",
StoredProcedureQueryHandler.class);
queryHandlerMapping.addChoiceElement("stored-function",
StoredFunctionQueryHandler.class);
descriptor.addMapping(queryHandlerMapping);
return descriptor;
}
/**
* Build an XMLDescriptor for BatchQueryOperation.
*/
protected XMLDescriptor buildBatchQueryDescriptor() {
XMLDescriptor descriptor = new XMLDescriptor();
descriptor.setJavaClass(BatchQueryOperation.class);
descriptor.setDefaultRootElement("batch-sql-query");
XMLDirectMapping name = new XMLDirectMapping();
name.setAttributeName("name");
name.setXPath("name/text()");
descriptor.addMapping(name);
XMLCompositeDirectCollectionMapping statementsMapping = new XMLCompositeDirectCollectionMapping();
statementsMapping.setAttributeName("batchSql");
XMLField f1 = new XMLField("batch-statement/text()");
f1.setIsCDATA(true);
statementsMapping.setField(f1);
descriptor.addMapping(statementsMapping);
return descriptor;
}
// parameter
//
// name,type
protected XMLDescriptor buildParameterDescriptor() {
XMLDescriptor descriptor = new XMLDescriptor();
descriptor.setJavaClass(Parameter.class);
XMLDirectMapping name = new XMLDirectMapping();
name.setAttributeName("name");
name.setXPath("name/text()");
descriptor.addMapping(name);
XMLTransformationMapping type = new XMLTransformationMapping();
type.setAttributeName("type");
QNameTransformer qNameTransformer = new QNameTransformer("type/text()");
type.addFieldTransformer("type/text()", qNameTransformer);
type.setAttributeTransformer(qNameTransformer);
descriptor.addMapping(type);
XMLDirectMapping optional = new XMLDirectMapping();
optional.setAttributeName("optional");
optional.setXPath("@optional");
optional.setNullValue(false);
descriptor.addMapping(optional);
return descriptor;
}
// attachment
//
// mime-type
protected XMLDescriptor buildAttachmentDescriptor() {
XMLDescriptor descriptor = new XMLDescriptor();
descriptor.setJavaClass(Attachment.class);
XMLDirectMapping mimeType = new XMLDirectMapping();
mimeType.setAttributeName("mimeType");
mimeType.setXPath("mime-type/text()");
descriptor.addMapping(mimeType);
return descriptor;
}
// result
//
// type|attachment
protected XMLDescriptor buildResultDescriptor() {
XMLDescriptor descriptor = new XMLDescriptor();
descriptor.setJavaClass(Result.class);
descriptor.setDefaultRootElement("result");
XMLTransformationMapping type = new XMLTransformationMapping();
type.setAttributeName("type");
QNameTransformer qNameTransformer = new QNameTransformer("type/text()");
type.addFieldTransformer("type/text()", qNameTransformer);
type.setAttributeTransformer(qNameTransformer);
descriptor.addMapping(type);
XMLCompositeObjectMapping attachment = new XMLCompositeObjectMapping();
attachment.setAttributeName("attachment");
attachment.setXPath("attachment");
attachment.setReferenceClass(Attachment.class);
descriptor.addMapping(attachment);
XMLCompositeObjectMapping sxf = new XMLCompositeObjectMapping();
sxf.setAttributeName("simpleXMLFormat");
sxf.setXPath("simple-xml-format");
sxf.setReferenceClass(SimpleXMLFormat.class);
descriptor.addMapping(sxf);
XMLDirectMapping isCollection = new XMLDirectMapping();
isCollection.setAttributeAccessor(new AttributeAccessor() {
@Override
public String getAttributeName() {
return "isCollection";
}
@Override
public Object getAttributeValueFromObject(Object object) throws DescriptorException {
if (object instanceof CollectionResult) {
return Boolean.TRUE;
}
return null;
}
@Override
public void setAttributeValueInObject(Object object, Object value)
throws DescriptorException {
}
});
isCollection.setXPath("@isCollection");
descriptor.addMapping(isCollection);
XMLField isColl = new XMLField("@isCollection");
isColl.setSchemaType(BOOLEAN_QNAME);
descriptor.getInheritancePolicy().setClassIndicatorField(isColl);
descriptor.getInheritancePolicy().setClassExtractor(new ClassExtractor() {
@Override
public Class> extractClassFromRow(Record record, Session session) {
Class> clz = Result.class;
UnmarshalRecord uRecord = (UnmarshalRecord)record;
Attributes attrs = uRecord.getAttributes();
if (attrs != null) {
for (int i = 0, l = attrs.getLength(); i < l; i++) {
String attributeName = attrs.getQName(i);
if (attributeName.equals("isCollection")) {
String value = attrs.getValue(i);
if (value.equalsIgnoreCase("true")) {
clz = CollectionResult.class;
break;
}
}
}
}
return clz;
}
});
XMLDirectMapping jdbcTypeMapping = new XMLDirectMapping();
jdbcTypeMapping.setAttributeName("jdbcType");
jdbcTypeMapping.setXPath("@jdbcType");
descriptor.addMapping(jdbcTypeMapping);
return descriptor;
}
// result isCollection="true"
//
protected XMLDescriptor buildCollectionResultDescriptor() {
XMLDescriptor descriptor = new XMLDescriptor();
descriptor.setJavaClass(CollectionResult.class);
descriptor.getInheritancePolicy().setParentClass(Result.class);
descriptor.setDefaultRootElement("result");
return descriptor;
}
// simple-xml-format
//
// simple-xml-format-tag?,simple-xml-tag?
protected XMLDescriptor buildSimpleXMLFormatDescriptor() {
XMLDescriptor descriptor = new XMLDescriptor();
descriptor.setJavaClass(SimpleXMLFormat.class);
descriptor.setDefaultRootElement(DEFAULT_SIMPLE_XML_FORMAT_TAG);
XMLDirectMapping simpleXMLFormatTag = new XMLDirectMapping();
simpleXMLFormatTag.setAttributeName("simpleXMLFormatTag");
simpleXMLFormatTag.setXPath(DEFAULT_SIMPLE_XML_FORMAT_TAG + "-tag/text()");
descriptor.addMapping(simpleXMLFormatTag);
XMLDirectMapping xmlTag = new XMLDirectMapping();
xmlTag.setAttributeName("xmlTag");
xmlTag.setXPath(DEFAULT_SIMPLE_XML_TAG + "-tag/text()");
descriptor.addMapping(xmlTag);
return descriptor;
}
// named-query
//
// name,descriptor?
protected XMLDescriptor buildNamedQueryDescriptor() {
XMLDescriptor descriptor = new XMLDescriptor();
descriptor.setJavaClass(NamedQueryHandler.class);
descriptor.setDefaultRootElement("named-query");
XMLDirectMapping queryName = new XMLDirectMapping();
queryName.setAttributeName("name");
queryName.setXPath("name/text()");
descriptor.addMapping(queryName);
XMLDirectMapping alias = new XMLDirectMapping();
alias.setAttributeName("descriptor");
alias.setXPath("descriptor/text()");
descriptor.addMapping(alias);
return descriptor;
}
// sql
protected XMLDescriptor buildSqlQueryDescriptor() {
XMLDescriptor descriptor = new XMLDescriptor();
descriptor.setJavaClass(SQLQueryHandler.class);
descriptor.setDefaultRootElement("sql");
XMLDirectMapping queryName = new XMLDirectMapping();
queryName.setAttributeName("sqlString");
queryName.setXPath("text()");
queryName.setIsCDATA(true);
descriptor.addMapping(queryName);
return descriptor;
}
// jpql
protected XMLDescriptor buildJpqlQueryDescriptor() {
XMLDescriptor descriptor = new XMLDescriptor();
descriptor.setJavaClass(JPQLQueryHandler.class);
descriptor.setDefaultRootElement("jpql");
XMLDirectMapping queryName = new XMLDirectMapping();
queryName.setAttributeName("jpqlString");
queryName.setXPath("text()");
queryName.setIsCDATA(true);
descriptor.addMapping(queryName);
return descriptor;
}
// stored-procedure
//
// name, in-argument*, inout-argument*, out-argument*
protected XMLDescriptor buildStoredProcedureQueryDescriptor() {
XMLDescriptor descriptor = new XMLDescriptor();
descriptor.setJavaClass(StoredProcedureQueryHandler.class);
descriptor.setDefaultRootElement("stored-procedure");
XMLDirectMapping procedureName = new XMLDirectMapping();
procedureName.setAttributeName("name");
procedureName.setXPath("name/text()");
descriptor.addMapping(procedureName);
XMLCompositeCollectionMapping inArguments = new XMLCompositeCollectionMapping();
inArguments.setAttributeName("inArguments");
inArguments.setXPath("in-argument");
inArguments.setReferenceClass(ProcedureArgument.class);
descriptor.addMapping(inArguments);
XMLCompositeCollectionMapping inOutArguments = new XMLCompositeCollectionMapping();
inOutArguments.setAttributeName("inOutArguments");
inOutArguments.setXPath("inout-argument");
inOutArguments.setReferenceClass(ProcedureOutputArgument.class);
descriptor.addMapping(inOutArguments);
XMLCompositeCollectionMapping outArguments = new XMLCompositeCollectionMapping();
outArguments.setAttributeName("outArguments");
outArguments.setXPath("out-argument");
outArguments.setReferenceClass(ProcedureOutputArgument.class);
descriptor.addMapping(outArguments);
return descriptor;
}
protected XMLDescriptor buildStoredFunctionQueryDescriptor() {
XMLDescriptor descriptor = new XMLDescriptor();
descriptor.setJavaClass(StoredFunctionQueryHandler.class);
descriptor.setDefaultRootElement("stored-function");
XMLDirectMapping procedureName = new XMLDirectMapping();
procedureName.setAttributeName("name");
procedureName.setXPath("name/text()");
descriptor.addMapping(procedureName);
XMLCompositeCollectionMapping inArguments = new XMLCompositeCollectionMapping();
inArguments.setAttributeName("inArguments");
inArguments.setXPath("in-argument");
inArguments.setReferenceClass(ProcedureArgument.class);
descriptor.addMapping(inArguments);
XMLCompositeCollectionMapping inOutArguments = new XMLCompositeCollectionMapping();
inOutArguments.setAttributeName("inOutArguments");
inOutArguments.setXPath("inout-argument");
inOutArguments.setReferenceClass(ProcedureOutputArgument.class);
descriptor.addMapping(inOutArguments);
XMLCompositeCollectionMapping outArguments = new XMLCompositeCollectionMapping();
outArguments.setAttributeName("outArguments");
outArguments.setXPath("out-argument");
outArguments.setReferenceClass(ProcedureOutputArgument.class);
descriptor.addMapping(outArguments);
return descriptor;
}
// in-argument
//
// name, parameter?
protected XMLDescriptor buildProcedureArgumentDescriptor() {
XMLDescriptor descriptor = new XMLDescriptor();
descriptor.setJavaClass(ProcedureArgument.class);
XMLDirectMapping argumentName = new XMLDirectMapping();
argumentName.setAttributeName("name");
argumentName.setXPath("name");
descriptor.addMapping(argumentName);
XMLDirectMapping parameterName = new XMLDirectMapping();
parameterName.setAttributeName("parameterName");
parameterName.setXPath("parameter");
descriptor.addMapping(parameterName);
XMLDirectMapping complexTypeName = new XMLDirectMapping();
complexTypeName.setAttributeName("complexTypeName");
complexTypeName.setXPath("complex-type");
descriptor.addMapping(complexTypeName);
XMLDirectMapping jdbcTypeMapping = new XMLDirectMapping();
jdbcTypeMapping.setAttributeName("jdbcType");
jdbcTypeMapping.setXPath("@jdbcType");
descriptor.addMapping(jdbcTypeMapping);
return descriptor;
}
// inout-argument and out-argument
//
// name, parameter?, type?
protected XMLDescriptor buildProcedureOutputArgumentDescriptor() {
XMLDescriptor descriptor = buildProcedureArgumentDescriptor();
descriptor.setJavaClass(ProcedureOutputArgument.class);
XMLTransformationMapping resultType = new XMLTransformationMapping();
resultType.setAttributeName("resultType");
QNameTransformer qNameTransformer = new QNameTransformer("type/text()");
resultType.addFieldTransformer("type/text()", qNameTransformer);
resultType.setAttributeTransformer(qNameTransformer);
descriptor.addMapping(resultType);
return descriptor;
}
// insert
//
// name, parameter
protected XMLDescriptor buildInsertDescriptor() {
XMLDescriptor descriptor = new XMLDescriptor();
descriptor.setJavaClass(InsertOperation.class);
descriptor.setDefaultRootElement("insert");
XMLDirectMapping name = new XMLDirectMapping();
name.setAttributeName("name");
name.setXPath("name/text()");
descriptor.addMapping(name);
XMLCompositeCollectionMapping parameters = new XMLCompositeCollectionMapping();
parameters.setAttributeName("parameters");
parameters.setReferenceClass(Parameter.class);
parameters.setXPath("parameter");
descriptor.addMapping(parameters);
return descriptor;
}
// delete
//
// name, parameter
protected XMLDescriptor buildDeleteDescriptor() {
XMLDescriptor descriptor = new XMLDescriptor();
descriptor.setJavaClass(DeleteOperation.class);
descriptor.setDefaultRootElement("delete");
XMLDirectMapping name = new XMLDirectMapping();
name.setAttributeName("name");
name.setXPath("name/text()");
descriptor.addMapping(name);
XMLDirectMapping descriptorName = new XMLDirectMapping();
descriptorName.setAttributeName("descriptorName");
descriptorName.setXPath("descriptor-name/text()");
descriptor.addMapping(descriptorName);
XMLDirectMapping findByPKQuery = new XMLDirectMapping();
findByPKQuery.setAttributeName("findByPKQuery");
findByPKQuery.setXPath("find-by-pk-query/text()");
descriptor.addMapping(findByPKQuery);
XMLCompositeCollectionMapping parameters = new XMLCompositeCollectionMapping();
parameters.setAttributeName("parameters");
parameters.setReferenceClass(Parameter.class);
parameters.setXPath("parameter");
descriptor.addMapping(parameters);
return descriptor;
}
// update
//
// name, parameter
protected XMLDescriptor buildUpdateDescriptor() {
XMLDescriptor descriptor = new XMLDescriptor();
descriptor.setJavaClass(UpdateOperation.class);
descriptor.setDefaultRootElement("update");
XMLDirectMapping name = new XMLDirectMapping();
name.setAttributeName("name");
name.setXPath("name/text()");
descriptor.addMapping(name);
XMLCompositeCollectionMapping parameters = new XMLCompositeCollectionMapping();
parameters.setAttributeName("parameters");
parameters.setReferenceClass(Parameter.class);
parameters.setXPath("parameter");
descriptor.addMapping(parameters);
return descriptor;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy