use of org.eclipse.persistence.dbws.DBWSModelProject in project eclipselink by eclipse-ee4j.
the class DBWSTestSuite method setUp.
/**
* This method should be used when sessions xml is to be generated and written out
* to DBWS_SESSION_STREAM.
*
* @param stageDir sessions xml will be generated and written out if non-null
*/
public static void setUp(String stageDir, boolean useLogger) throws WSDLException {
comparer.setIgnoreOrder(true);
if (builder == null) {
builder = new DBWSBuilder();
}
DBWS_SERVICE_STREAM = new ByteArrayOutputStream();
DBWS_SCHEMA_STREAM = new ByteArrayOutputStream();
DBWS_SESSION_STREAM = new ByteArrayOutputStream();
DBWS_OR_STREAM = new ByteArrayOutputStream();
DBWS_OX_STREAM = new ByteArrayOutputStream();
DBWS_WSDL_STREAM = new ByteArrayOutputStream();
final String username = System.getProperty(DATABASE_USERNAME_KEY, DEFAULT_DATABASE_USERNAME);
final String password = System.getProperty(DATABASE_PASSWORD_KEY, DEFAULT_DATABASE_PASSWORD);
final String url = System.getProperty(DATABASE_URL_KEY, DEFAULT_DATABASE_URL);
String builderString = DBWS_BUILDER_XML_USERNAME + username + DBWS_BUILDER_XML_PASSWORD + password + DBWS_BUILDER_XML_URL + url + DBWS_BUILDER_XML_DRIVER + DATABASE_DRIVER + DBWS_BUILDER_XML_PLATFORM + DATABASE_PLATFORM + DBWS_BUILDER_XML_MAIN;
XMLContext context = new XMLContext(new DBWSBuilderModelProject());
XMLUnmarshaller unmarshaller = context.createUnmarshaller();
DBWSBuilderModel builderModel = (DBWSBuilderModel) unmarshaller.unmarshal(new StringReader(builderString));
builder.quiet = true;
builder.setPlatformClassname(DATABASE_PLATFORM);
builder.properties = builderModel.properties;
builder.operations = builderModel.operations;
XRPackager xrPackager = new JSR109WebServicePackager(null, "WebServiceTestPackager", noArchive) {
@Override
public void start() {
// do nothing - don't have to verify existence of 'stageDir' when
// all the streams are in-memory
}
};
xrPackager.setDBWSBuilder(builder);
builder.setPackager(xrPackager);
builder.setPackager(xrPackager);
dbwsLogger = null;
if (useLogger) {
dbwsLogger = new DBWSLogger("DBWSTestLogger", null);
}
if (stageDir == null) {
builder.getProperties().put(SESSIONS_FILENAME_KEY, NO_SESSIONS_FILENAME);
builder.build(DBWS_SCHEMA_STREAM, __nullStream, DBWS_SERVICE_STREAM, DBWS_OR_STREAM, DBWS_OX_STREAM, __nullStream, __nullStream, __nullStream, __nullStream, __nullStream, __nullStream, __nullStream, dbwsLogger);
} else {
xrPackager.setStageDir(new File(stageDir));
builder.build(DBWS_SCHEMA_STREAM, DBWS_SESSION_STREAM, DBWS_SERVICE_STREAM, DBWS_OR_STREAM, DBWS_OX_STREAM, __nullStream, __nullStream, DBWS_WSDL_STREAM, __nullStream, __nullStream, __nullStream, __nullStream, dbwsLogger);
}
XRServiceFactory factory = new XRServiceFactory() {
@Override
public XRServiceAdapter buildService(XRServiceModel xrServiceModel) {
parentClassLoader = this.getClass().getClassLoader();
xrSchemaStream = new ByteArrayInputStream(DBWS_SCHEMA_STREAM.toByteArray());
return super.buildService(xrServiceModel);
}
@Override
public void buildSessions() {
XRDynamicClassLoader xrdecl = new XRDynamicClassLoader(parentClassLoader);
DatasourceLogin login = new DatabaseLogin();
login.setUserName(username);
login.setPassword(password);
((DatabaseLogin) login).setConnectionString(url);
((DatabaseLogin) login).setDriverClassName(DATABASE_PLATFORM);
Platform platform = builder.getDatabasePlatform();
ConversionManager conversionManager = platform.getConversionManager();
if (conversionManager != null) {
conversionManager.setLoader(xrdecl);
}
login.setDatasourcePlatform(platform);
((DatabaseLogin) login).bindAllParameters();
Project orProject = null;
if (DBWS_OR_STREAM.size() != 0) {
MetadataProcessor processor = new MetadataProcessor(new XRPersistenceUnitInfo(xrdecl), new DatabaseSessionImpl(login), xrdecl, false, true, false, false, false, null, null);
processor.setMetadataSource(new JPAMetadataSource(xrdecl, new StringReader(DBWS_OR_STREAM.toString())));
PersistenceUnitProcessor.processORMetadata(processor, true, PersistenceUnitProcessor.Mode.ALL);
processor.addNamedQueries();
orProject = processor.getProject().getProject();
} else {
orProject = new Project();
}
orProject.setName(builder.getProjectName().concat(OR_PRJ_SUFFIX));
orProject.setDatasourceLogin(login);
DatabaseSession databaseSession = orProject.createDatabaseSession();
if ("off".equalsIgnoreCase(builder.getLogLevel())) {
databaseSession.dontLogMessages();
} else {
databaseSession.setLogLevel(AbstractSessionLog.translateStringToLoggingLevel(builder.getLogLevel()));
}
xrService.setORSession(databaseSession);
orProject.convertClassNamesToClasses(xrdecl);
Project oxProject = null;
if (DBWS_OX_STREAM.size() != 0) {
Map<String, OXMMetadataSource> metadataMap = new HashMap<String, OXMMetadataSource>();
StreamSource xml = new StreamSource(new StringReader(DBWS_OX_STREAM.toString()));
try {
JAXBContext jc = JAXBContext.newInstance(XmlBindingsModel.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
JAXBElement<XmlBindingsModel> jaxbElt = unmarshaller.unmarshal(xml, XmlBindingsModel.class);
XmlBindingsModel model = jaxbElt.getValue();
for (XmlBindings xmlBindings : model.getBindingsList()) {
metadataMap.put(xmlBindings.getPackageName(), new OXMMetadataSource(xmlBindings));
}
} catch (JAXBException jaxbex) {
jaxbex.printStackTrace();
}
Map<String, Map<String, OXMMetadataSource>> properties = new HashMap<String, Map<String, OXMMetadataSource>>();
properties.put(JAXBContextProperties.OXM_METADATA_SOURCE, metadataMap);
try {
org.eclipse.persistence.jaxb.dynamic.DynamicJAXBContext jCtx = org.eclipse.persistence.jaxb.dynamic.DynamicJAXBContextFactory.createContextFromOXM(xrdecl, properties);
oxProject = jCtx.getXMLContext().getSession(0).getProject();
} catch (JAXBException e) {
e.printStackTrace();
}
} else {
oxProject = new Project();
}
oxProject.setName(builder.getProjectName().concat(OX_PRJ_SUFFIX));
login = (DatasourceLogin) oxProject.getDatasourceLogin();
if (login != null) {
platform = login.getDatasourcePlatform();
if (platform != null) {
conversionManager = platform.getConversionManager();
if (conversionManager != null) {
conversionManager.setLoader(xrdecl);
}
}
}
prepareDescriptors(oxProject, orProject, xrdecl);
ProjectHelper.fixOROXAccessors(orProject, oxProject);
xrService.setORSession(orProject.createDatabaseSession());
xrService.getORSession().dontLogMessages();
xrService.setXMLContext(new XMLContext(oxProject));
xrService.setOXSession(xrService.getXMLContext().getSession(0));
}
};
context = new XMLContext(new DBWSModelProject());
unmarshaller = context.createUnmarshaller();
DBWSModel model = (DBWSModel) unmarshaller.unmarshal(new StringReader(DBWS_SERVICE_STREAM.toString()));
xrService = factory.buildService(model);
}
use of org.eclipse.persistence.dbws.DBWSModelProject in project eclipselink by eclipse-ee4j.
the class VeearrayTestSuite method setUp.
@BeforeClass
public static void setUp() {
final String ddlCreateProp = System.getProperty(DATABASE_DDL_CREATE_KEY, DEFAULT_DATABASE_DDL_CREATE);
if ("true".equalsIgnoreCase(ddlCreateProp)) {
ddlCreate = true;
}
final String ddlDropProp = System.getProperty(DATABASE_DDL_DROP_KEY, DEFAULT_DATABASE_DDL_DROP);
if ("true".equalsIgnoreCase(ddlDropProp)) {
ddlDrop = true;
}
final String ddlDebugProp = System.getProperty(DATABASE_DDL_DEBUG_KEY, DEFAULT_DATABASE_DDL_DEBUG);
if ("true".equalsIgnoreCase(ddlDebugProp)) {
ddlDebug = true;
}
String username = System.getProperty(DATABASE_USERNAME_KEY);
if (username == null) {
fail("error retrieving database username");
}
String password = System.getProperty(DATABASE_PASSWORD_KEY);
if (password == null) {
fail("error retrieving database password");
}
String url = System.getProperty(DATABASE_URL_KEY);
if (url == null) {
fail("error retrieving database url");
}
String driver = System.getProperty(DATABASE_DRIVER_KEY);
if (driver == null) {
fail("error retrieving database driver");
}
Project orProject = new Project();
orProject.setName("or-veearray");
DatabaseLogin login = new DatabaseLogin();
login.setUserName(username);
login.setPassword(password);
login.setConnectionString(url);
login.setDriverClassName(driver);
login.setDatasourcePlatform(new Oracle10Platform());
login.bindAllParameters();
orProject.setDatasourceLogin(login);
ObjectRelationalDataTypeDescriptor phoneORDescriptor = new ObjectRelationalDataTypeDescriptor();
phoneORDescriptor.setAlias("phone");
phoneORDescriptor.useSoftCacheWeakIdentityMap();
phoneORDescriptor.setJavaClass(Phone.class);
phoneORDescriptor.descriptorIsAggregate();
phoneORDescriptor.setStructureName("XR_VEE_ARRAY_PHONE");
phoneORDescriptor.addFieldOrdering("AREACODE");
phoneORDescriptor.addFieldOrdering("PHONENUMBER");
phoneORDescriptor.addFieldOrdering("PHONETYPE");
phoneORDescriptor.addDirectMapping("areaCode", "AREACODE");
phoneORDescriptor.addDirectMapping("phonenumber", "PHONENUMBER");
phoneORDescriptor.addDirectMapping("type", "PHONETYPE");
orProject.addDescriptor(phoneORDescriptor);
ObjectRelationalDataTypeDescriptor employeeORDescriptor = new ObjectRelationalDataTypeDescriptor();
employeeORDescriptor.useSoftCacheWeakIdentityMap();
employeeORDescriptor.getQueryManager().checkCacheForDoesExist();
employeeORDescriptor.setAlias("employee");
employeeORDescriptor.setJavaClass(Employee.class);
employeeORDescriptor.addTableName("XR_VEE_ARRAY_EMP");
employeeORDescriptor.addPrimaryKeyFieldName("XR_VEE_ARRAY_EMP.EMPNO");
orProject.addDescriptor(employeeORDescriptor);
DirectToFieldMapping idMapping = new DirectToFieldMapping();
idMapping.setAttributeName("id");
idMapping.setFieldName("XR_VEE_ARRAY_EMP.EMPNO");
employeeORDescriptor.addMapping(idMapping);
DirectToFieldMapping firstNameMapping = new DirectToFieldMapping();
firstNameMapping.setAttributeName("firstName");
firstNameMapping.setFieldName("XR_VEE_ARRAY_EMP.FNAME");
employeeORDescriptor.addMapping(firstNameMapping);
DirectToFieldMapping lastNameMapping = new DirectToFieldMapping();
lastNameMapping.setAttributeName("lastName");
lastNameMapping.setFieldName("XR_VEE_ARRAY_EMP.LNAME");
employeeORDescriptor.addMapping(lastNameMapping);
ObjectArrayMapping phonesMapping = new ObjectArrayMapping();
phonesMapping.setAttributeName("phones");
phonesMapping.setStructureName("XR_VEE_ARRAY_PHONES");
phonesMapping.setReferenceClass(Phone.class);
phonesMapping.setFieldName("PHONES");
employeeORDescriptor.addMapping(phonesMapping);
ReadAllQuery raq = new ReadAllQuery(Employee.class);
raq.setName("getVeeArrayEmployees");
raq.refreshIdentityMapResult();
StoredProcedureCall spCall = new StoredProcedureCall();
spCall.setProcedureName("GET_VEE_ARRAY_EMPS");
spCall.useNamedCursorOutputAsResultSet("X");
raq.setCall(spCall);
employeeORDescriptor.getQueryManager().addQuery("getVeeArrayEmployees", raq);
ReadObjectQuery roq = new ReadObjectQuery(Employee.class);
roq.setName("getVeeArrayEmployee");
roq.refreshIdentityMapResult();
roq.addArgument("X");
spCall = new StoredProcedureCall();
spCall.setProcedureName("GET_VEE_ARRAY_EMP");
spCall.addNamedArgument("X", "X", Types.INTEGER);
spCall.useNamedCursorOutputAsResultSet("Y");
roq.setCall(spCall);
employeeORDescriptor.getQueryManager().addQuery("getVeeArrayEmployee", roq);
ObjectRelationalDatabaseField ordf = new ObjectRelationalDatabaseField("");
ordf.setSqlType(Types.STRUCT);
ordf.setSqlTypeName("XR_VEE_ARRAY_PHONE");
ordf.setType(Phone.class);
DataModifyQuery dataModifyQuery = new DataModifyQuery();
dataModifyQuery.setName("updateVeeArrayPhones");
dataModifyQuery.addArgument("X");
dataModifyQuery.addArgument("Y");
spCall = new StoredProcedureCall();
spCall.setProcedureName("UPDATE_VEE_ARRAY_PHS");
spCall.addNamedArgument("X", "X", Types.INTEGER);
spCall.addNamedArgument("Y", "Y", Types.ARRAY, "XR_VEE_ARRAY_PHONES", ordf);
dataModifyQuery.setCall(spCall);
employeeORDescriptor.getQueryManager().addQuery("updateVeeArrayPhones", dataModifyQuery);
NamespaceResolver ns = new NamespaceResolver();
ns.setDefaultNamespaceURI("urn:veearray");
Project oxProject = new Project();
oxProject.setName("ox-veearray");
XMLLogin xmlLogin = new XMLLogin();
xmlLogin.getProperties().remove("user");
xmlLogin.getProperties().remove("password");
oxProject.setLogin(xmlLogin);
XMLDescriptor employeeOXDescriptor = new XMLDescriptor();
employeeOXDescriptor.setAlias("employee");
employeeOXDescriptor.setJavaClass(Employee.class);
employeeOXDescriptor.setDefaultRootElement("employee");
employeeOXDescriptor.setNamespaceResolver(ns);
XMLSchemaURLReference schemaReference = new XMLSchemaURLReference();
schemaReference.setSchemaContext("/employeeType");
schemaReference.setType(XMLSchemaReference.COMPLEX_TYPE);
employeeOXDescriptor.setSchemaReference(schemaReference);
XMLDirectMapping xmlIdMapping = new XMLDirectMapping();
xmlIdMapping.setAttributeName("id");
XMLField idField = new XMLField();
idField.setName("@id/text()");
idField.setSchemaType(INT_QNAME);
xmlIdMapping.setField(idField);
employeeOXDescriptor.addMapping(xmlIdMapping);
XMLDirectMapping xmlFirstNameMapping = new XMLDirectMapping();
xmlFirstNameMapping.setAttributeName("firstName");
XMLField firstNameField = new XMLField();
firstNameField.setName("first-name/text()");
firstNameField.setSchemaType(STRING_QNAME);
xmlFirstNameMapping.setField(firstNameField);
employeeOXDescriptor.addMapping(xmlFirstNameMapping);
XMLDirectMapping xmlLastNameMapping = new XMLDirectMapping();
xmlLastNameMapping.setAttributeName("lastName");
XMLField lastNameField = new XMLField();
lastNameField.setName("last-name/text()");
lastNameField.setSchemaType(STRING_QNAME);
xmlLastNameMapping.setField(lastNameField);
employeeOXDescriptor.addMapping(xmlLastNameMapping);
XMLCompositeCollectionMapping xmlPhonesMapping = new XMLCompositeCollectionMapping();
xmlPhonesMapping.setAttributeName("phones");
xmlPhonesMapping.setReferenceClass(Phone.class);
xmlPhonesMapping.setXPath("phones/phone");
employeeOXDescriptor.addMapping(xmlPhonesMapping);
oxProject.addDescriptor(employeeOXDescriptor);
XMLDescriptor phoneOXDescriptor = new XMLDescriptor();
phoneOXDescriptor.setAlias("phone");
phoneOXDescriptor.setJavaClass(Phone.class);
phoneOXDescriptor.setDefaultRootElement("phone");
phoneOXDescriptor.setNamespaceResolver(ns);
schemaReference = new XMLSchemaURLReference();
schemaReference.setSchemaContext("/phoneType");
schemaReference.setType(XMLSchemaReference.COMPLEX_TYPE);
phoneOXDescriptor.setSchemaReference(schemaReference);
XMLDirectMapping areaCodeMapping = new XMLDirectMapping();
areaCodeMapping.setAttributeName("areaCode");
XMLField areaCodeField = new XMLField();
areaCodeField.setName("area-code/text()");
areaCodeField.setSchemaType(STRING_QNAME);
areaCodeMapping.setField(areaCodeField);
phoneOXDescriptor.addMapping(areaCodeMapping);
XMLDirectMapping phonenumberMapping = new XMLDirectMapping();
phonenumberMapping.setAttributeName("phonenumber");
XMLField phonenumberField = new XMLField();
phonenumberField.setName("phonenumber/text()");
phonenumberField.setSchemaType(STRING_QNAME);
phonenumberMapping.setField(phonenumberField);
phoneOXDescriptor.addMapping(phonenumberMapping);
XMLDirectMapping typeMapping = new XMLDirectMapping();
typeMapping.setAttributeName("type");
XMLField typeField = new XMLField();
typeField.setName("type/text()");
typeField.setSchemaType(STRING_QNAME);
typeMapping.setField(typeField);
phoneOXDescriptor.addMapping(typeMapping);
oxProject.addDescriptor(phoneOXDescriptor);
XRServiceFactory factory = new XRServiceFactory() {
Project orProject;
Project oxProject;
XRServiceFactory setProject(Project orProject, Project oxProject) {
this.orProject = orProject;
this.oxProject = oxProject;
parentClassLoader = ClassLoader.getSystemClassLoader();
xrSchemaStream = new ByteArrayInputStream(VEEARRAY_SCHEMA.getBytes());
return this;
}
@Override
public void buildSessions() {
DatabaseSession ds = orProject.createDatabaseSession();
ds.dontLogMessages();
xrService.setORSession(ds);
xrService.setXMLContext(new XMLContext(oxProject));
xrService.setOXSession(xrService.getXMLContext().getSession(0));
}
}.setProject(orProject, oxProject);
XMLContext context = new XMLContext(new DBWSModelProject());
XMLUnmarshaller unmarshaller = context.createUnmarshaller();
DBWSModel model = (DBWSModel) unmarshaller.unmarshal(new StringReader(VEEARRAY_XRMODEL));
xrService = factory.buildService(model);
if (ddlCreate) {
try {
AllTests.runDdl(CREATE_DDL, ddlDebug);
} catch (Exception e) {
// e.printStackTrace();
}
}
}
use of org.eclipse.persistence.dbws.DBWSModelProject in project eclipselink by eclipse-ee4j.
the class OracleObjecttypeTestSuite method setUp.
@BeforeClass
public static void setUp() throws SecurityException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException {
final String ddlCreateProp = System.getProperty(DATABASE_DDL_CREATE_KEY, DEFAULT_DATABASE_DDL_CREATE);
if ("true".equalsIgnoreCase(ddlCreateProp)) {
ddlCreate = true;
}
final String ddlDropProp = System.getProperty(DATABASE_DDL_DROP_KEY, DEFAULT_DATABASE_DDL_DROP);
if ("true".equalsIgnoreCase(ddlDropProp)) {
ddlDrop = true;
}
final String ddlDebugProp = System.getProperty(DATABASE_DDL_DEBUG_KEY, DEFAULT_DATABASE_DDL_DEBUG);
if ("true".equalsIgnoreCase(ddlDebugProp)) {
ddlDebug = true;
}
final String username = System.getProperty(DATABASE_USERNAME_KEY);
if (username == null) {
fail("error retrieving database username");
}
final String password = System.getProperty(DATABASE_PASSWORD_KEY);
if (password == null) {
fail("error retrieving database password");
}
final String url = System.getProperty(DATABASE_URL_KEY);
if (url == null) {
fail("error retrieving database url");
}
final String driver = System.getProperty(DATABASE_DRIVER_KEY);
if (driver == null) {
fail("error retrieving database driver");
}
Project orProject = new Project();
orProject.setName("or-oracleobjecttype");
ObjectRelationalDataTypeDescriptor addressORDescriptor = new ObjectRelationalDataTypeDescriptor();
addressORDescriptor.setAlias("address");
addressORDescriptor.useSoftCacheWeakIdentityMap();
addressORDescriptor.setJavaClass(Address.class);
addressORDescriptor.descriptorIsAggregate();
addressORDescriptor.setStructureName("XR_ADDRESS_TYPE");
addressORDescriptor.addFieldOrdering("STREET");
addressORDescriptor.addFieldOrdering("CITY");
addressORDescriptor.addFieldOrdering("PROV");
addressORDescriptor.addDirectMapping("street", "STREET");
addressORDescriptor.addDirectMapping("city", "CITY");
addressORDescriptor.addDirectMapping("province", "PROV");
orProject.addDescriptor(addressORDescriptor);
ObjectRelationalDataTypeDescriptor employeeORDescriptor = new ObjectRelationalDataTypeDescriptor();
employeeORDescriptor.useSoftCacheWeakIdentityMap();
employeeORDescriptor.getQueryManager().checkCacheForDoesExist();
employeeORDescriptor.setAlias("employee");
employeeORDescriptor.setJavaClass(EmployeeWithAddress.class);
employeeORDescriptor.addTableName("XR_EMP_ADDR");
employeeORDescriptor.addPrimaryKeyFieldName("XR_EMP_ADDR.EMPNO");
orProject.addDescriptor(employeeORDescriptor);
DirectToFieldMapping idMapping = new DirectToFieldMapping();
idMapping.setAttributeName("id");
idMapping.setFieldName("XR_EMP_ADDR.EMPNO");
employeeORDescriptor.addMapping(idMapping);
DirectToFieldMapping firstNameMapping = new DirectToFieldMapping();
firstNameMapping.setAttributeName("firstName");
firstNameMapping.setFieldName("XR_EMP_ADDR.FNAME");
employeeORDescriptor.addMapping(firstNameMapping);
DirectToFieldMapping lastNameMapping = new DirectToFieldMapping();
lastNameMapping.setAttributeName("lastName");
lastNameMapping.setFieldName("XR_EMP_ADDR.LNAME");
employeeORDescriptor.addMapping(lastNameMapping);
StructureMapping addressMapping = new StructureMapping();
addressMapping.setAttributeName("address");
addressMapping.setReferenceClass(Address.class);
addressMapping.setFieldName("ADDRESS");
employeeORDescriptor.addMapping(addressMapping);
ReadAllQuery readQuery = new ReadAllQuery(EmployeeWithAddress.class);
readQuery.setName("getEmployeesByProv");
readQuery.addArgument("X");
StoredProcedureCall spCall = new StoredProcedureCall();
spCall.setProcedureName("GET_EMPLOYEES_BY_PROV");
spCall.addNamedArgument("X", "X", Types.STRUCT, "XR_ADDRESS_TYPE");
spCall.useNamedCursorOutputAsResultSet("Y");
readQuery.setCall(spCall);
employeeORDescriptor.getQueryManager().addQuery("getEmployeesByProv", readQuery);
ObjectPersistenceWorkbenchXMLProject runtimeProject = new ObjectPersistenceWorkbenchXMLProject();
XMLTransformationMapping versionMapping = (XMLTransformationMapping) runtimeProject.getDescriptor(Project.class).getMappings().firstElement();
TransformerBasedFieldTransformation versionTransformer = (TransformerBasedFieldTransformation) versionMapping.getFieldTransformations().get(0);
Field transformerField = TransformerBasedFieldTransformation.class.getDeclaredField("transformer");
transformerField.setAccessible(true);
ConstantTransformer constantTransformer = (ConstantTransformer) transformerField.get(versionTransformer);
constantTransformer.setValue(CONSTANT_PROJECT_BUILD_VERSION);
XMLContext context = new XMLContext(runtimeProject);
XMLMarshaller marshaller = context.createMarshaller();
Document orProjectDoc = xmlPlatform.createDocument();
marshaller.marshal(orProject, orProjectDoc);
Document orProjectXMLDoc = xmlParser.parse(new StringReader(OBJECTTYPE_OR_PROJECT));
assertTrue("OracleObjecttype java-built OR project not same as XML-built OR project. Expected:\n" + documentToString(orProjectXMLDoc) + "\nActual:\n" + documentToString(orProjectDoc), comparer.isNodeEqual(orProjectXMLDoc, orProjectDoc));
NamespaceResolver ns = new NamespaceResolver();
ns.setDefaultNamespaceURI("urn:oracleobjecttype");
Project oxProject = new Project();
oxProject.setName("ox-oracleobjecttype");
XMLLogin xmlLogin = new XMLLogin();
xmlLogin.setPlatform(new DOMPlatform());
xmlLogin.getProperties().remove("user");
xmlLogin.getProperties().remove("password");
oxProject.setLogin(xmlLogin);
XMLDescriptor addressOXDescriptor = new XMLDescriptor();
addressOXDescriptor.setAlias("address");
addressOXDescriptor.setJavaClass(Address.class);
addressOXDescriptor.setDefaultRootElement("address");
addressOXDescriptor.setNamespaceResolver(ns);
XMLSchemaURLReference schemaReference = new XMLSchemaURLReference();
schemaReference.setSchemaContext("/addressType");
schemaReference.setType(XMLSchemaReference.COMPLEX_TYPE);
addressOXDescriptor.setSchemaReference(schemaReference);
XMLDirectMapping streetMapping = new XMLDirectMapping();
streetMapping.setAttributeName("street");
XMLField streetField = new XMLField();
streetField.setName("street/text()");
streetField.setSchemaType(STRING_QNAME);
streetMapping.setField(streetField);
addressOXDescriptor.addMapping(streetMapping);
XMLDirectMapping cityMapping = new XMLDirectMapping();
cityMapping.setAttributeName("city");
XMLField cityField = new XMLField();
cityField.setName("city/text()");
cityField.setSchemaType(STRING_QNAME);
cityMapping.setField(cityField);
addressOXDescriptor.addMapping(cityMapping);
XMLDirectMapping provinceMapping = new XMLDirectMapping();
provinceMapping.setAttributeName("province");
XMLField provinceField = new XMLField();
provinceField.setName("province/text()");
provinceField.setSchemaType(STRING_QNAME);
provinceMapping.setField(provinceField);
addressOXDescriptor.addMapping(provinceMapping);
oxProject.addDescriptor(addressOXDescriptor);
XMLDescriptor employeeOXDescriptor = new XMLDescriptor();
employeeOXDescriptor.setAlias("employee");
employeeOXDescriptor.setJavaClass(EmployeeWithAddress.class);
employeeOXDescriptor.setDefaultRootElement("employee");
employeeOXDescriptor.setNamespaceResolver(ns);
schemaReference = new XMLSchemaURLReference();
schemaReference.setSchemaContext("/employeeType");
schemaReference.setType(XMLSchemaReference.COMPLEX_TYPE);
employeeOXDescriptor.setSchemaReference(schemaReference);
XMLDirectMapping xmlIdMapping = new XMLDirectMapping();
xmlIdMapping.setAttributeName("id");
XMLField idField = new XMLField();
idField.setName("id/text()");
idField.setSchemaType(INT_QNAME);
xmlIdMapping.setField(idField);
employeeOXDescriptor.addMapping(xmlIdMapping);
XMLDirectMapping xmlFirstNameMapping = new XMLDirectMapping();
xmlFirstNameMapping.setAttributeName("firstName");
XMLField firstNameField = new XMLField();
firstNameField.setName("first-name/text()");
firstNameField.setSchemaType(STRING_QNAME);
xmlFirstNameMapping.setField(firstNameField);
employeeOXDescriptor.addMapping(xmlFirstNameMapping);
XMLDirectMapping xmlLastNameMapping = new XMLDirectMapping();
xmlLastNameMapping.setAttributeName("lastName");
XMLField lastNameField = new XMLField();
lastNameField.setName("last-name/text()");
lastNameField.setSchemaType(STRING_QNAME);
xmlLastNameMapping.setField(lastNameField);
employeeOXDescriptor.addMapping(xmlLastNameMapping);
XMLCompositeObjectMapping xmlAddressMapping = new XMLCompositeObjectMapping();
xmlAddressMapping.setAttributeName("address");
xmlAddressMapping.setReferenceClass(Address.class);
xmlAddressMapping.setXPath("address");
employeeOXDescriptor.addMapping(xmlAddressMapping);
oxProject.addDescriptor(employeeOXDescriptor);
Document oxProjectDoc = xmlPlatform.createDocument();
marshaller.marshal(oxProject, oxProjectDoc);
Document oxProjectXMLDoc = xmlParser.parse(new StringReader(OBJECTTYPE_OX_PROJECT));
assertTrue("OracleObjecttype java-built OX project not same as XML-built OX project. Expected:\n" + documentToString(oxProjectXMLDoc) + "\nActual:\n" + documentToString(oxProjectDoc), comparer.isNodeEqual(oxProjectXMLDoc, oxProjectDoc));
XRServiceFactory factory = new XRServiceFactory() {
XRServiceFactory init() {
parentClassLoader = ClassLoader.getSystemClassLoader();
xrSchemaStream = new ByteArrayInputStream(OBJECTTYPE_SCHEMA.getBytes());
return this;
}
@Override
public void buildSessions() {
Project orProject = XMLProjectReader.read(new StringReader(OBJECTTYPE_OR_PROJECT), parentClassLoader);
DatabaseLogin login = new DatabaseLogin();
login.setUserName(username);
login.setPassword(password);
login.setConnectionString(url);
login.setDriverClassName(driver);
login.setDatasourcePlatform(new Oracle11Platform());
login.bindAllParameters();
orProject.setDatasourceLogin(login);
DatabaseSession ds = orProject.createDatabaseSession();
ds.dontLogMessages();
xrService.setORSession(ds);
Project oxProject = XMLProjectReader.read(new StringReader(OBJECTTYPE_OX_PROJECT), parentClassLoader);
xrService.setXMLContext(new XMLContext(oxProject));
xrService.setOXSession(xrService.getXMLContext().getSession(0));
}
}.init();
context = new XMLContext(new DBWSModelProject());
XMLUnmarshaller unmarshaller = context.createUnmarshaller();
DBWSModel model = (DBWSModel) unmarshaller.unmarshal(new StringReader(OBJECTTYPE_XRMODEL));
xrService = factory.buildService(model);
if (ddlCreate) {
try {
AllTests.runDdl(CREATE_DDL, ddlDebug);
} catch (Exception e) {
// e.printStackTrace();
}
}
}
use of org.eclipse.persistence.dbws.DBWSModelProject in project eclipselink by eclipse-ee4j.
the class ProviderHelper method init.
@SuppressWarnings("unchecked")
public void init(ClassLoader parentClassLoader, ServletContext sc, boolean mtomEnabled) {
this.parentClassLoader = parentClassLoader;
this.mtomEnabled = mtomEnabled;
InputStream xrServiceStream = initXRServiceStream(parentClassLoader, sc);
DBWSModelProject xrServiceModelProject = new DBWSModelProject();
XMLContext xmlContext = new XMLContext(xrServiceModelProject);
XMLUnmarshaller unmarshaller = xmlContext.createUnmarshaller();
XRServiceModel xrServiceModel;
try {
xrServiceModel = (XRServiceModel) unmarshaller.unmarshal(xrServiceStream);
} catch (XMLMarshalException e) {
// something went wrong parsing the eclipselink-dbws.xml - can't recover from that
throw new WebServiceException(DBWSException.couldNotParseDBWSFile());
} finally {
try {
xrServiceStream.close();
} catch (IOException e) {
// ignore
}
}
xrSchemaStream = initXRSchemaStream(parentClassLoader, sc);
try {
// inherit xrService processing from XRServiceFactory
buildService(xrServiceModel);
} catch (Exception e) {
// something went wrong building the service
throw new WebServiceException(e);
}
// the xrService built by 'buildService' above is overridden to produce an
// instance of DBWSAdapter (a sub-class of XRService)
DBWSAdapter dbwsAdapter = (DBWSAdapter) xrService;
// get inline schema from WSDL - has additional types for the operations
try (InputStream wsdlInputStream = initWSDLInputStream(parentClassLoader, sc)) {
StringWriter sw = new StringWriter();
StreamSource wsdlStreamSource = new StreamSource(wsdlInputStream);
Transformer t = TransformerFactory.newInstance().newTransformer(new StreamSource(new StringReader(MATCH_SCHEMA)));
StreamResult streamResult = new StreamResult(sw);
t.transform(wsdlStreamSource, streamResult);
SchemaModelProject schemaProject = new SchemaModelProject();
XMLContext xmlContext2 = new XMLContext(schemaProject);
unmarshaller = xmlContext2.createUnmarshaller();
Schema extendedSchema = (Schema) unmarshaller.unmarshal(new StringReader(sw.toString()));
dbwsAdapter.setExtendedSchema(extendedSchema);
} catch (IOException | TransformerException e) {
// that's Ok, WSDL may not contain inline schema
xmlContext.getSession().getSessionLog().log(SessionLog.FINE, SessionLog.DBWS, "dbws_no_wsdl_inline_schema", e.getLocalizedMessage());
}
// an Invocation needs a mapping for its parameters - use XMLAnyCollectionMapping +
// custom AttributeAccessor
// NB - this code is NOt in it own initNNN method, cannot be overridden
String tns = dbwsAdapter.getExtendedSchema().getTargetNamespace();
Project oxProject = dbwsAdapter.getOXSession().getProject();
XMLDescriptor invocationDescriptor = new XMLDescriptor();
invocationDescriptor.setJavaClass(Invocation.class);
NamespaceResolver nr = new NamespaceResolver();
invocationDescriptor.setNamespaceResolver(nr);
nr.put(SERVICE_NAMESPACE_PREFIX, tns);
nr.setDefaultNamespaceURI(tns);
XMLAnyCollectionMapping parametersMapping = new XMLAnyCollectionMapping();
parametersMapping.setAttributeName("parameters");
parametersMapping.setAttributeAccessor(new AttributeAccessor() {
Project oxProject;
DBWSAdapter dbwsAdapter;
@Override
public Object getAttributeValueFromObject(Object object) {
return ((Invocation) object).getParameters();
}
@Override
public void setAttributeValueInObject(Object object, Object value) {
Invocation invocation = (Invocation) object;
Vector<Object> values = (Vector<Object>) value;
for (Iterator<Object> i = values.iterator(); i.hasNext(); ) {
/* scan through values:
* if XML conforms to something mapped, it an object; else it is a DOM Element
* (probably a scalar). Walk through operations for the types, converting
* as required. The 'key' is the local name of the element - for mapped objects,
* have to get the element name from the schema context for the object
*/
Object o = i.next();
if (o instanceof Element) {
Element e = (Element) o;
String key = e.getLocalName();
if ("theInstance".equals(key)) {
NodeList nl = e.getChildNodes();
for (int j = 0; j < nl.getLength(); j++) {
Node n = nl.item(j);
if (n.getNodeType() == Node.ELEMENT_NODE) {
try {
Object theInstance = dbwsAdapter.getXMLContext().createUnmarshaller().unmarshal(n);
if (theInstance instanceof XMLRoot) {
theInstance = ((XMLRoot) theInstance).getObject();
}
invocation.setParameter(key, theInstance);
break;
} catch (XMLMarshalException xmlMarshallException) {
throw new WebServiceException(xmlMarshallException);
}
}
}
} else {
ClassDescriptor desc = null;
for (ClassDescriptor xdesc : oxProject.getOrderedDescriptors()) {
XMLSchemaReference schemaReference = xdesc instanceof XMLDescriptor ? ((XMLDescriptor) xdesc).getSchemaReference() : null;
if (schemaReference != null && schemaReference.getSchemaContext().equalsIgnoreCase(key)) {
desc = xdesc;
break;
}
}
if (desc != null) {
try {
Object theObject = dbwsAdapter.getXMLContext().createUnmarshaller().unmarshal(e, desc.getJavaClass());
if (theObject instanceof XMLRoot) {
theObject = ((XMLRoot) theObject).getObject();
}
invocation.setParameter(key, theObject);
} catch (XMLMarshalException xmlMarshallException) {
throw new WebServiceException(xmlMarshallException);
}
} else {
String serviceName = e.getParentNode().getLocalName();
boolean found = false;
for (Operation op : dbwsAdapter.getOperationsList()) {
if (op.getName().equals(serviceName)) {
for (Parameter p : op.getParameters()) {
if (p.getName().equals(key)) {
desc = dbwsAdapter.getDescriptorsByQName().get(p.getType());
if (desc != null) {
found = true;
}
break;
}
}
}
if (found) {
break;
}
}
if (found) {
Object theObject = dbwsAdapter.getXMLContext().createUnmarshaller().unmarshal(e, desc.getJavaClass());
if (theObject instanceof XMLRoot) {
theObject = ((XMLRoot) theObject).getObject();
}
invocation.setParameter(key, theObject);
} else {
// cant use e.getTextContent() - some DOM impls dont support it :-(
// String val = e.getTextContent();
StringBuilder sb = new StringBuilder();
NodeList childNodes = e.getChildNodes();
for (int idx = 0; idx < childNodes.getLength(); idx++) {
if (childNodes.item(idx).getNodeType() == Node.TEXT_NODE) {
sb.append(childNodes.item(idx).getNodeValue());
}
}
invocation.setParameter(key, sb.toString());
}
}
}
} else {
XMLDescriptor descriptor = (XMLDescriptor) oxProject.getDescriptor(o.getClass());
String key = descriptor.getDefaultRootElement();
int idx = key.indexOf(':');
if (idx != -1) {
key = key.substring(idx + 1);
}
invocation.setParameter(key, o);
}
}
}
public AttributeAccessor setProjectAndAdapter(Project oxProject, DBWSAdapter dbwsAdapter) {
this.oxProject = oxProject;
this.dbwsAdapter = dbwsAdapter;
return this;
}
}.setProjectAndAdapter(oxProject, dbwsAdapter));
parametersMapping.setKeepAsElementPolicy(KEEP_UNKNOWN_AS_ELEMENT);
invocationDescriptor.addMapping(parametersMapping);
oxProject.addDescriptor(invocationDescriptor);
((DatabaseSessionImpl) dbwsAdapter.getOXSession()).initializeDescriptorIfSessionAlive(invocationDescriptor);
dbwsAdapter.getXMLContext().storeXMLDescriptorByQName(invocationDescriptor);
// create SOAP message response handler of appropriate version
responseWriter = new SOAPResponseWriter(dbwsAdapter);
responseWriter.initialize();
}
use of org.eclipse.persistence.dbws.DBWSModelProject in project eclipselink by eclipse-ee4j.
the class KeyMappingsTestSuite method setUp.
@BeforeClass
public static void setUp() {
final String ddlCreateProp = System.getProperty(DATABASE_DDL_CREATE_KEY, DEFAULT_DATABASE_DDL_CREATE);
if ("true".equalsIgnoreCase(ddlCreateProp)) {
ddlCreate = true;
}
final String ddlDropProp = System.getProperty(DATABASE_DDL_DROP_KEY, DEFAULT_DATABASE_DDL_DROP);
if ("true".equalsIgnoreCase(ddlDropProp)) {
ddlDrop = true;
}
final String ddlDebugProp = System.getProperty(DATABASE_DDL_DEBUG_KEY, DEFAULT_DATABASE_DDL_DEBUG);
if ("true".equalsIgnoreCase(ddlDebugProp)) {
ddlDebug = true;
}
final String username = System.getProperty(DATABASE_USERNAME_KEY);
if (username == null) {
fail("error retrieving database username");
}
final String password = System.getProperty(DATABASE_PASSWORD_KEY);
if (password == null) {
fail("error retrieving database password");
}
final String url = System.getProperty(DATABASE_URL_KEY);
if (url == null) {
fail("error retrieving database url");
}
final String driver = System.getProperty(DATABASE_DRIVER_KEY);
if (driver == null) {
fail("error retrieving database driver");
}
XRServiceFactory factory = new XRServiceFactory() {
@Override
public XRServiceAdapter buildService(XRServiceModel xrServiceModel) {
parentClassLoader = this.getClass().getClassLoader();
xrSchemaStream = new ByteArrayInputStream(KEYMAPPINGS_SCHEMA.getBytes());
return super.buildService(xrServiceModel);
}
@Override
public void buildSessions() {
XRDynamicClassLoader xrdecl = new XRDynamicClassLoader(parentClassLoader);
XMLContext context = new XMLContext(new EclipseLinkObjectPersistenceRuntimeXMLProject(), xrdecl);
XMLUnmarshaller unmarshaller = context.createUnmarshaller();
Project orProject = (Project) unmarshaller.unmarshal(new StringReader(KEYMAPPINGS_OR_PROJECT));
DatasourceLogin login = new DatabaseLogin();
login.setUserName(username);
login.setPassword(password);
((DatabaseLogin) login).setConnectionString(url);
((DatabaseLogin) login).setDriverClassName(driver);
Platform platform = new MySQLPlatform();
ConversionManager conversionManager = platform.getConversionManager();
if (conversionManager != null) {
conversionManager.setLoader(xrdecl);
}
login.setDatasourcePlatform(platform);
((DatabaseLogin) login).bindAllParameters();
orProject.setDatasourceLogin(login);
Project oxProject = (Project) unmarshaller.unmarshal(new StringReader(KEYMAPPINGS_OX_PROJECT));
login = (DatasourceLogin) oxProject.getDatasourceLogin();
if (login != null) {
platform = login.getDatasourcePlatform();
if (platform != null) {
conversionManager = platform.getConversionManager();
if (conversionManager != null) {
conversionManager.setLoader(xrdecl);
}
}
}
ProjectHelper.fixOROXAccessors(orProject, oxProject);
xrService.setORSession(orProject.createDatabaseSession());
xrService.getORSession().dontLogMessages();
xrService.setXMLContext(new XMLContext(oxProject));
xrService.setOXSession(xrService.getXMLContext().getSession(0));
}
};
XMLContext context = new XMLContext(new DBWSModelProject());
XMLUnmarshaller unmarshaller = context.createUnmarshaller();
DBWSModel model = (DBWSModel) unmarshaller.unmarshal(new StringReader(KEYMAPPINGS_DBWS));
xrService = factory.buildService(model);
if (ddlCreate) {
try {
AllTests.runDdl(CREATE_DDL, ddlDebug);
} catch (Exception e) {
// e.printStackTrace();
}
}
}
Aggregations