/******************************************************************************* | |
* Copyright (c) 1998, 2013 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: | |
* dmccann - Jan 30/2009 - 1.1 - Initial implementation | |
******************************************************************************/ | |
package org.eclipse.persistence.testing.sdo.helper.helpercontext; | |
import java.io.FileInputStream; | |
import java.io.FileOutputStream; | |
import java.io.ObjectOutputStream; | |
import junit.textui.TestRunner; | |
import org.eclipse.persistence.sdo.SDODataObject; | |
import org.eclipse.persistence.sdo.helper.DataObjectInputStream; | |
import org.eclipse.persistence.sdo.helper.SDOHelperContext; | |
import org.eclipse.persistence.sdo.helper.SDOTypeHelper; | |
import org.eclipse.persistence.sdo.helper.SDOXMLHelper; | |
import org.eclipse.persistence.sdo.helper.SDOXSDHelper; | |
import commonj.sdo.DataObject; | |
import commonj.sdo.helper.HelperContext; | |
import commonj.sdo.impl.HelperProviderImpl; | |
public class UserSetContextMapTestCases extends SDOHelperContextTestCases { | |
protected final String FILE_NAME = tempFileDir + "/serialized_dataobject"; | |
protected String implClassname; | |
protected HelperContext localCtx; | |
protected SDODataObject localDObj; | |
protected HelperContext globalCtx; | |
public UserSetContextMapTestCases(String name) { | |
super(name); | |
} | |
protected void resetGlobalContext() { | |
((SDOTypeHelper)globalCtx.getTypeHelper()).reset(); | |
((SDOXSDHelper)globalCtx.getXSDHelper()).reset(); | |
((SDOXMLHelper)globalCtx.getXMLHelper()).reset(); | |
} | |
public void setUp() { | |
FileInputStream inStream = null; | |
// Clear defined schemas | |
super.setUp(); | |
// Load the schema | |
String xsdString = getXSDString(CONTEXT1_DATAOBJECT_XSD_PATH); | |
// Define Types | |
localCtx = new SDOHelperContext(); | |
localCtx.getXSDHelper().define(xsdString); | |
localDObj = load(CONTEXT1_DATAOBJECT_XML_PATH, localCtx); | |
implClassname = localDObj.getType().getInstanceClassName(); | |
globalCtx = HelperProviderImpl.getDefaultContext(); | |
} | |
public static void main(String[] args) { | |
String[] arguments = { "-c", "org.eclipse.persistence.testing.sdo.helper.helpercontext.UserSetContextMapTestCases" }; | |
TestRunner.main(arguments); | |
} | |
/** | |
* Test should serialize/deserialize successfully/ | |
*/ | |
public void testResolveWithHelperContextSetInUserMap() { | |
//First overwrite the existing context with an empty one | |
SDOHelperContext.putHelperContext(Thread.currentThread().getContextClassLoader(), new SDOHelperContext()); | |
String xsdString = getXSDString(CONTEXT1_DATAOBJECT_XSD_PATH); | |
localCtx = new SDOHelperContext("customId"); | |
localCtx.getXSDHelper().define(xsdString); | |
localDObj = load(CONTEXT1_DATAOBJECT_XML_PATH, localCtx); | |
SDOHelperContext.putHelperContext(Thread.currentThread().getContextClassLoader(), localCtx); | |
serialize(localDObj, FILE_NAME); | |
SDODataObject dobj = (SDODataObject) deserialize(FILE_NAME); | |
String dobjImplClassName = dobj.getType().getInstanceClassName(); | |
assertTrue("Expected ["+implClassname+"] but was ["+dobjImplClassName+"]", dobjImplClassName.equals(implClassname)); | |
SDOHelperContext.removeHelperContext(Thread.currentThread().getContextClassLoader()); | |
} | |
public void testResolveWithLocalHelperContextSetInUserMap() { | |
SDOHelperContext.putHelperContext(Thread.currentThread().getContextClassLoader(), localCtx); | |
serialize(localDObj, FILE_NAME); | |
SDODataObject dobj = (SDODataObject) deserialize(FILE_NAME); | |
String dobjImplClassName = dobj.getType().getInstanceClassName(); | |
assertTrue("Expected ["+implClassname+"] but was ["+dobjImplClassName+"]", dobjImplClassName.equals(implClassname)); | |
SDOHelperContext.removeHelperContext(Thread.currentThread().getContextClassLoader()); | |
} | |
/** | |
* We do not set the loader/helper context pair in the SDOHelperContext | |
* user-set map, so we expect an error upon deserialization. We will | |
* get back org.eclipse.persistence.sdo.dataobjects.OpenSequencedTypeImpl, | |
* instead of org.example.EmployeeTypeImpl. | |
*/ | |
public void testResolveWithoutHelperContextSetInUserMap() { | |
serialize(localDObj, FILE_NAME); | |
resetGlobalContext(); | |
DataObject dobj = deserialize(FILE_NAME); | |
String dobjImplClassName = dobj.getType().getInstanceClass().getName(); | |
assertFalse("Expected [org.eclipse.persistence.sdo.dataobjects.OpenSequencedType] but was ["+dobjImplClassName+"]", dobjImplClassName.equals(implClassname)); | |
} | |
public void serialize(DataObject anObject, String filename) { | |
FileOutputStream aFileOutputStream = null; | |
ObjectOutputStream anObjectInputStream = null; | |
try { | |
aFileOutputStream = new FileOutputStream(filename); | |
anObjectInputStream = new ObjectOutputStream(aFileOutputStream); | |
anObjectInputStream.writeObject(anObject); | |
anObjectInputStream.flush(); | |
aFileOutputStream.close(); | |
anObjectInputStream.close(); | |
} catch (Exception e) { | |
e.printStackTrace(); | |
fail("An exception occurred during serialize"); | |
} | |
} | |
public DataObject deserialize(String filename) { | |
FileInputStream aFileInputStream = null; | |
DataObjectInputStream aDataObjectInputStream = null; | |
DataObject anObject = null; | |
try { | |
aFileInputStream = new FileInputStream(filename); | |
aDataObjectInputStream = new DataObjectInputStream(aFileInputStream, globalCtx); | |
anObject = (DataObject)aDataObjectInputStream.readObject(); | |
aDataObjectInputStream.close(); | |
aFileInputStream.close(); | |
} catch (Exception e) { | |
e.printStackTrace(); | |
fail("An exception occurred during deserialize"); | |
} | |
return anObject; | |
} | |
public void testPutGetNamedHelperContextByClassLoader() { | |
ClassLoader classLoader = this.getClass().getClassLoader(); | |
SDOHelperContext controlHelperContext = new SDOHelperContext("testPutGetNamedHelperContextByClassLoader"); | |
SDOHelperContext.putHelperContext(classLoader, controlHelperContext); | |
HelperContext testHelperContext = SDOHelperContext.getHelperContext(controlHelperContext.getIdentifier(), classLoader); | |
assertSame(controlHelperContext, testHelperContext); | |
SDOHelperContext.removeHelperContext(controlHelperContext.getIdentifier(), classLoader); | |
} | |
} |