/******************************************************************************* * Copyright (c) 2011, 2015 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: * David McCann - October 24, 2011 - 2.4 - Initial implementation ******************************************************************************/ package dbws.testing.objecttabletype; //javase imports import java.io.StringReader; import java.sql.SQLException; import java.sql.Statement; import org.w3c.dom.Document; //java eXtension imports import javax.wsdl.WSDLException; //JUnit4 imports import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; //EclipseLink imports import org.eclipse.persistence.descriptors.ClassDescriptor; import org.eclipse.persistence.internal.xr.Invocation; import org.eclipse.persistence.internal.xr.Operation; import org.eclipse.persistence.oxm.XMLMarshaller; import org.eclipse.persistence.oxm.XMLUnmarshaller; import org.eclipse.persistence.sessions.Project; //test imports import dbws.testing.DBWSTestSuite; /** * Tests Oracle Object Table types. * */ public class ObjectTableTypeTestSuite extends DBWSTestSuite { static final String PERSON_TYPE_ALIAS = "Dbws_persontype"; static final String PERSON_TYPE_CLASSNAME = "objecttabletypetests.Dbws_persontype"; static final String PERSON_TYPE_TABLE_ALIAS = "Dbws_persontype_table"; static final String PERSON_TYPE_TABLE_CLASSNAME = "objecttabletypetests.Dbws_persontype_table_CollectionWrapper"; static final String CREATE_PERSONTYPE = "CREATE OR REPLACE TYPE DBWS_PERSONTYPE AS OBJECT (" + "\nNAME VARCHAR2(20)," + "\nAGE NUMBER," + "\nGENDER VARCHAR2(1)," + "\nINCARCERATED DATE" + "\n)"; static final String CREATE_PERSONTYPE_TABLE = "CREATE OR REPLACE TYPE DBWS_PERSONTYPE_TABLE AS TABLE OF DBWS_PERSONTYPE"; static final String CREATE_MYEMPOBJECT = "CREATE OR REPLACE TYPE DBWS_MYEMPOBJECT AS OBJECT (" + "\nEMPNO NUMBER(4)," + "\nENAME VARCHAR2(10)" + "\n)"; static final String CREATE_MYEMPOBJECT_TABLE = "CREATE OR REPLACE TYPE DBWS_MYEMPOBJECT_TABLE AS TABLE OF DBWS_MYEMPOBJECT"; static final String CREATE_GROUPTYPE = "CREATE OR REPLACE TYPE DBWS_GROUPTYPE AS OBJECT (" + "\nNAME VARCHAR2(20)," + "\nECOUNT NUMBER," + "\nETABLE DBWS_MYEMPOBJECT_TABLE" + "\n)"; static final String CREATE_GET_PERSONTYPE_PROC = "CREATE OR REPLACE PROCEDURE GET_PERSONTYPE_TABLE(PTABLE OUT DBWS_PERSONTYPE_TABLE) AS" + "\nBEGIN" + "\nPTABLE := DBWS_PERSONTYPE_TABLE();" + "\nPTABLE.EXTEND;" + "\nPTABLE(PTABLE.COUNT) := DBWS_PERSONTYPE('BUBBLES', 32, 'M', " + "TO_DATE('1990-11-19 00:00:00','YYYY-MM-DD HH24:MI:SS'));" + "\nPTABLE.EXTEND;" + "\nPTABLE(PTABLE.COUNT) := DBWS_PERSONTYPE('RICKY', 33, 'M', " + "TO_DATE('1985-10-01 00:00:00','YYYY-MM-DD HH24:MI:SS'));" + "\nPTABLE.EXTEND;" + "\nPTABLE(PTABLE.COUNT) := DBWS_PERSONTYPE('JULIAN', 35, 'M', " + "TO_DATE('1988-02-07 00:00:00','YYYY-MM-DD HH24:MI:SS'));" + "\nPTABLE.EXTEND;" + "\nPTABLE(PTABLE.COUNT) := DBWS_PERSONTYPE('SARAH', 25, 'F', " + "TO_DATE('2002-05-12 00:00:00','YYYY-MM-DD HH24:MI:SS'));" + "\nPTABLE.EXTEND;" + "\nPTABLE(PTABLE.COUNT) := DBWS_PERSONTYPE('J-ROC', 27, 'M', " + "TO_DATE('1998-12-17 00:00:00','YYYY-MM-DD HH24:MI:SS'));" + "\nEND GET_PERSONTYPE_TABLE;"; static final String CREATE_GET_PERSONTYPE_TABLE_PROC2 = "CREATE OR REPLACE PROCEDURE GET_PERSONTYPE_TABLE_PROC2(PTABLE IN OUT DBWS_PERSONTYPE_TABLE) AS" + "\nBEGIN" + "\nPTABLE.EXTEND;" + "\nPTABLE(PTABLE.COUNT) := DBWS_PERSONTYPE('COREY', 20, 'M', " + "TO_DATE('1997-12-09 00:00:00','YYYY-MM-DD HH24:MI:SS'));" + "\nEND GET_PERSONTYPE_TABLE_PROC2;"; static final String CREATE_GET_PERSONTYPE2_FUNC = "CREATE OR REPLACE FUNCTION GET_PERSONTYPE_TABLE2 RETURN DBWS_PERSONTYPE_TABLE AS" + "\nL_DATA DBWS_PERSONTYPE_TABLE;" + "\nBEGIN" + "\nGET_PERSONTYPE_TABLE(L_DATA);" + "\nRETURN L_DATA;" + "\nEND GET_PERSONTYPE_TABLE2;"; static final String CREATE_GROUPTYPE_PROC = "CREATE OR REPLACE PROCEDURE CREATE_GROUPTYPE(GNAME IN VARCHAR2, NEWGROUP OUT DBWS_GROUPTYPE) AS" + "\nETABLE DBWS_MYEMPOBJECT_TABLE;" + "\nBEGIN" + "\nETABLE := DBWS_MYEMPOBJECT_TABLE();" + "\nETABLE.EXTEND;" + "\nETABLE(ETABLE.COUNT) := DBWS_MYEMPOBJECT(20, 'COREY');" + "\nETABLE.EXTEND;" + "\nETABLE(ETABLE.COUNT) := DBWS_MYEMPOBJECT(33, 'RICKY');" + "\nETABLE.EXTEND;" + "\nETABLE(ETABLE.COUNT) := DBWS_MYEMPOBJECT(32, 'BUBBLES');" + "\nNEWGROUP := DBWS_GROUPTYPE(GNAME, 3, ETABLE);" + "\nEND CREATE_GROUPTYPE;"; static final String CREATE_ADD_PERSONTYPE_TO_TABLE_PROC = "CREATE OR REPLACE PROCEDURE ADD_PERSONTYPE_TO_TABLE(PTYPETOADD IN DBWS_PERSONTYPE, OLDTABLE IN DBWS_PERSONTYPE_TABLE, NEWTABLE OUT DBWS_PERSONTYPE_TABLE) AS" + "\nBEGIN" + "\nNEWTABLE := OLDTABLE;" + "\nNEWTABLE.EXTEND;" + "\nNEWTABLE(NEWTABLE.COUNT) := PTYPETOADD;" + "\nEND ADD_PERSONTYPE_TO_TABLE;"; static final String CREATE_ADD_PERSONTYPE_TO_TABLE2_FUNC = "CREATE OR REPLACE FUNCTION ADD_PERSONTYPE_TO_TABLE2(PTYPETOADD IN DBWS_PERSONTYPE, OLDTABLE IN DBWS_PERSONTYPE_TABLE) RETURN DBWS_PERSONTYPE_TABLE AS" + "\nNEWTABLE DBWS_PERSONTYPE_TABLE;" + "\nBEGIN" + "\nADD_PERSONTYPE_TO_TABLE(PTYPETOADD, OLDTABLE, NEWTABLE);" + "\nRETURN NEWTABLE;" + "\nEND ADD_PERSONTYPE_TO_TABLE2;"; static final String DROP_GET_PERSONTYPE_TABLE = "DROP PROCEDURE GET_PERSONTYPE_TABLE"; static final String DROP_GET_PERSONTYPE_TABLE_PROC2 = "DROP PROCEDURE GET_PERSONTYPE_TABLE_PROC2"; static final String DROP_GET_PERSONTYPE2_FUNC = "DROP FUNCTION GET_PERSONTYPE_TABLE2"; static final String DROP_ADD_PERSONTYPE_TO_TABLE_PROC = "DROP PROCEDURE ADD_PERSONTYPE_TO_TABLE"; static final String DROP_ADD_PERSONTYPE_TO_TABLE2_FUNC = "DROP FUNCTION ADD_PERSONTYPE_TO_TABLE2"; static final String DROP_GROUPTYPE_PROC = "DROP PROCEDURE CREATE_GROUPTYPE"; static final String DROP_GROUPTYPE = "DROP TYPE DBWS_GROUPTYPE"; static final String DROP_MYEMPOBJECT_TABLE = "DROP TYPE DBWS_MYEMPOBJECT_TABLE"; static final String DROP_MYEMPOBJECT = "DROP TYPE DBWS_MYEMPOBJECT"; static final String DROP_PERSONTYPE_TABLE = "DROP TYPE DBWS_PERSONTYPE_TABLE"; static final String DROP_PERSONTYPE = "DROP TYPE DBWS_PERSONTYPE"; // ====================================================================== static final String CREATE_EMP_TABLE = "CREATE TABLE DBWS_EMP (" + "\nEMPNO VARCHAR2(10) NOT NULL," + "\nENAME VARCHAR2(35)," + "\nSAL NUMBER(6,0)," + "\nPRIMARY KEY (EMPNO)" + "\n)"; static final String[] POPULATE_EMP_TABLE = new String[] { "INSERT INTO DBWS_EMP (EMPNO, ENAME, SAL) VALUES ('1', 'THEIF', 99000)", "INSERT INTO DBWS_EMP (EMPNO, ENAME, SAL) VALUES ('2', 'BULLY', 0)", "INSERT INTO DBWS_EMP (EMPNO, ENAME, SAL) VALUES ('3', 'CON', 4255)", "INSERT INTO DBWS_EMP (EMPNO, ENAME, SAL) VALUES ('4', 'CON', 4000)", "INSERT INTO DBWS_EMP (EMPNO, ENAME, SAL) VALUES ('5', 'COP', 25000)", }; static final String CREATE_TJOBS = "create or replace TYPE T_JOBS AS OBJECT (" + "JOB_ID VARCHAR2(10)," + "JOB_TITLE VARCHAR2(35)," + "MAX_SALARY NUMBER(6,0)," + "CONSTRUCTOR FUNCTION T_JOBS(JOB_ID VARCHAR2, JOB_TITLE VARCHAR2, MAX_SALARY NUMBER) " + "RETURN SELF AS RESULT" + ");"; static final String CREATE_TJOBS_BODY = "CREATE OR REPLACE TYPE BODY T_JOBS AS " + "CONSTRUCTOR FUNCTION T_JOBS(JOB_ID VARCHAR2, JOB_TITLE VARCHAR2, MAX_SALARY NUMBER) " + "RETURN SELF AS RESULT IS " + "BEGIN " + "SELF.JOB_ID := JOB_ID;" + "SELF.JOB_TITLE := JOB_TITLE;" + "SELF.MAX_SALARY := MAX_SALARY;" + "RETURN;" + "END;" + "END;"; static final String CREATE_TJOBS_TABLE = "create or replace TYPE COL_JOBS AS TABLE OF T_JOBS;"; static final String CREATE_TEST_CUSTOM_TYPE_RECORD_PKG = "create or replace PACKAGE TEST_CUSTOM_TYPE_RECORD as " + "\nFUNCTION GET_JOB(p_job_id IN VARCHAR2) RETURN T_JOBS;" + "\nFUNCTION GET_JOBS RETURN COL_JOBS;" + "\nend;"; static final String CREATE_TEST_CUSTOM_TYPE_RECORD_PKG_BODY = "create or replace PACKAGE BODY TEST_CUSTOM_TYPE_RECORD as " + "\nFUNCTION GET_JOB(p_job_id IN VARCHAR2) RETURN T_JOBS IS " + "\nresult T_JOBS;" + "\nl_JOB_ID VARCHAR2(10);" + "\nl_JOB_TITLE VARCHAR2(35);" + "\nl_MAX_SALARY NUMBER(6,0);" + "\nBEGIN" + "\nSELECT EMPNO, ENAME, SAL INTO l_JOB_ID, l_JOB_TITLE, l_MAX_SALARY FROM DBWS_EMP WHERE EMPNO = p_job_id;" + "\nresult := T_JOBS(l_JOB_ID, l_JOB_TITLE, l_MAX_SALARY);" + "\nRETURN result;" + "\nEND;" + "\nfunction GET_JOBS return COL_JOBS is " + "\nCURSOR cur IS select EMPNO, ENAME, SAL from DBWS_EMP;" + "\ncol_result COL_JOBS;" + "\nt_result T_JOBS;" + "\nl_JOB_ID VARCHAR2(10);" + "\nl_JOB_TITLE VARCHAR2(35);" + "\nl_MAX_SALARY NUMBER(6,0);" + "\nbegin" + "\ncol_result := COL_JOBS(NULL);" + "\ncol_result.DELETE;" + "\nfor rec in cur LOOP" + "\nt_result := T_JOBS(rec.EMPNO, rec.ENAME, rec.SAL);" + "\ncol_result.EXTEND(1);" + "\ncol_result(col_result.COUNT) := t_result;" + "\nend loop;" + "\nreturn col_result;" + "\nend;" + "\nend;"; static final String DROP_TEST_CUSTOM_TYPE_RECORD_PKG_BODY = "DROP PACKAGE BODY TEST_CUSTOM_TYPE_RECORD"; static final String DROP_TEST_CUSTOM_TYPE_RECORD_PKG = "DROP PACKAGE TEST_CUSTOM_TYPE_RECORD"; static final String DROP_TJOBS_TABLE = "DROP TYPE COL_JOBS"; static final String DROP_TJOBS_BODY = "DROP TYPE BODY T_JOBS"; static final String DROP_TJOBS = "DROP TYPE T_JOBS"; static final String DROP_EMP_TABLE = "DROP TABLE DBWS_EMP"; // ====================================================================== static boolean ddlCreate = false; static boolean ddlDrop = false; static boolean ddlDebug = false; @BeforeClass public static void setUp() throws WSDLException { if (conn == null) { try { conn = buildConnection(); } catch (Exception e) { e.printStackTrace(); } } String ddlCreateProp = System.getProperty(DATABASE_DDL_CREATE_KEY, DEFAULT_DATABASE_DDL_CREATE); if ("true".equalsIgnoreCase(ddlCreateProp)) { ddlCreate = true; } String ddlDropProp = System.getProperty(DATABASE_DDL_DROP_KEY, DEFAULT_DATABASE_DDL_DROP); if ("true".equalsIgnoreCase(ddlDropProp)) { ddlDrop = true; } String ddlDebugProp = System.getProperty(DATABASE_DDL_DEBUG_KEY, DEFAULT_DATABASE_DDL_DEBUG); if ("true".equalsIgnoreCase(ddlDebugProp)) { ddlDebug = true; } if (ddlCreate) { runDdl(conn, CREATE_PERSONTYPE, ddlDebug); runDdl(conn, CREATE_PERSONTYPE_TABLE, ddlDebug); runDdl(conn, CREATE_MYEMPOBJECT, ddlDebug); runDdl(conn, CREATE_MYEMPOBJECT_TABLE, ddlDebug); runDdl(conn, CREATE_GROUPTYPE, ddlDebug); runDdl(conn, CREATE_GROUPTYPE_PROC, ddlDebug); runDdl(conn, CREATE_GET_PERSONTYPE_PROC, ddlDebug); runDdl(conn, CREATE_GET_PERSONTYPE_TABLE_PROC2, ddlDebug); runDdl(conn, CREATE_GET_PERSONTYPE2_FUNC, ddlDebug); runDdl(conn, CREATE_ADD_PERSONTYPE_TO_TABLE_PROC, ddlDebug); runDdl(conn, CREATE_ADD_PERSONTYPE_TO_TABLE2_FUNC, ddlDebug); runDdl(conn, CREATE_EMP_TABLE, ddlDebug); try { Statement stmt = conn.createStatement(); for (int i = 0; i < POPULATE_EMP_TABLE.length; i++) { stmt.addBatch(POPULATE_EMP_TABLE[i]); } stmt.executeBatch(); } catch (SQLException e) { //e.printStackTrace(); } runDdl(conn, CREATE_TJOBS, ddlDebug); runDdl(conn, CREATE_TJOBS_BODY, ddlDebug); runDdl(conn, CREATE_TJOBS_TABLE, ddlDebug); runDdl(conn, CREATE_TEST_CUSTOM_TYPE_RECORD_PKG, ddlDebug); runDdl(conn, CREATE_TEST_CUSTOM_TYPE_RECORD_PKG_BODY, ddlDebug); } DBWS_BUILDER_XML_USERNAME = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + "<dbws-builder xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">" + "<properties>" + "<property name=\"projectName\">ObjectTableTypeTests</property>" + "<property name=\"logLevel\">off</property>" + "<property name=\"username\">"; DBWS_BUILDER_XML_PASSWORD = "</property><property name=\"password\">"; DBWS_BUILDER_XML_URL = "</property><property name=\"url\">"; DBWS_BUILDER_XML_DRIVER = "</property><property name=\"driver\">"; DBWS_BUILDER_XML_PLATFORM = "</property><property name=\"platformClassname\">"; DBWS_BUILDER_XML_MAIN = "</property>" + "</properties>" + "<procedure " + "name=\"GetPersonTypeTable\" " + "catalogPattern=\"TOPLEVEL\" " + "procedurePattern=\"GET_PERSONTYPE_TABLE\" " + "isAdvancedJDBC=\"true\" " + "returnType=\"dbws_persontype_tableType\" " + "/>" + "<procedure " + "name=\"GetPersonTypeTableProc2\" " + "catalogPattern=\"TOPLEVEL\" " + "procedurePattern=\"GET_PERSONTYPE_TABLE_PROC2\" " + "returnType=\"dbws_persontype_tableType\" " + "/>" + "<procedure " + "name=\"GetPersonTypeTable2\" " + "catalogPattern=\"TOPLEVEL\" " + "procedurePattern=\"GET_PERSONTYPE_TABLE2\" " + "isAdvancedJDBC=\"true\" " + "returnType=\"dbws_persontype_tableType\" " + "/>" + "<procedure " + "name=\"AddPersonTypeToTable\" " + "catalogPattern=\"TOPLEVEL\" " + "procedurePattern=\"ADD_PERSONTYPE_TO_TABLE\" " + "isAdvancedJDBC=\"true\" " + "returnType=\"dbws_persontype_tableType\" " + "/>" + "<procedure " + "name=\"AddPersonTypeToTable2\" " + "catalogPattern=\"TOPLEVEL\" " + "procedurePattern=\"ADD_PERSONTYPE_TO_TABLE2\" " + "isAdvancedJDBC=\"true\" " + "returnType=\"dbws_persontype_tableType\" " + "/>" + "<procedure " + "name=\"CreateGroupType\" " + "catalogPattern=\"TOPLEVEL\" " + "procedurePattern=\"CREATE_GROUPTYPE\" " + "isAdvancedJDBC=\"true\" " + "returnType=\"dbws_grouptypeType\" " + "/>" + "<plsql-procedure " + "name=\"GetJobTest\" " + "catalogPattern=\"TEST_CUSTOM_TYPE_RECORD\" " + "procedurePattern=\"GET_JOB\" " + "/>" + "<plsql-procedure " + "name=\"GetJobsTest\" " + "catalogPattern=\"TEST_CUSTOM_TYPE_RECORD\" " + "procedurePattern=\"GET_JOBS\" " + "/>" + "</dbws-builder>"; builder = null; DBWSTestSuite.setUp("."); } @AfterClass public static void tearDown() { if (ddlDrop) { runDdl(conn, DROP_ADD_PERSONTYPE_TO_TABLE2_FUNC, ddlDebug); runDdl(conn, DROP_ADD_PERSONTYPE_TO_TABLE_PROC, ddlDebug); runDdl(conn, DROP_GET_PERSONTYPE2_FUNC, ddlDebug); runDdl(conn, DROP_GET_PERSONTYPE_TABLE_PROC2, ddlDebug); runDdl(conn, DROP_GET_PERSONTYPE_TABLE, ddlDebug); runDdl(conn, DROP_GROUPTYPE_PROC, ddlDebug); runDdl(conn, DROP_GROUPTYPE, ddlDebug); runDdl(conn, DROP_MYEMPOBJECT_TABLE, ddlDebug); runDdl(conn, DROP_MYEMPOBJECT, ddlDebug); runDdl(conn, DROP_PERSONTYPE_TABLE, ddlDebug); runDdl(conn, DROP_PERSONTYPE, ddlDebug); runDdl(conn, DROP_TEST_CUSTOM_TYPE_RECORD_PKG_BODY, ddlDebug); runDdl(conn, DROP_TEST_CUSTOM_TYPE_RECORD_PKG, ddlDebug); runDdl(conn, DROP_TJOBS_TABLE, ddlDebug); runDdl(conn, DROP_TJOBS_BODY, ddlDebug); runDdl(conn, DROP_TJOBS, ddlDebug); runDdl(conn, DROP_EMP_TABLE, ddlDebug); } } @Test public void getPersonTypeTable() { Invocation invocation = new Invocation("GetPersonTypeTable"); Operation op = xrService.getOperation(invocation.getName()); Object result = op.invoke(xrService, invocation); assertNotNull("result is null", result); Document doc = xmlPlatform.createDocument(); XMLMarshaller marshaller = xrService.getXMLContext().createMarshaller(); marshaller.marshal(result, doc); Document controlDoc = xmlParser.parse(new StringReader(RESULT_XML)); assertTrue("Expected:\n" + documentToString(controlDoc) + "\nActual:\n" + documentToString(doc), comparer.isNodeEqual(controlDoc, doc)); } @Test public void getPersonTypeTableProc2() { XMLUnmarshaller unmarshaller = xrService.getXMLContext().createUnmarshaller(); Object tableType = unmarshaller.unmarshal(new StringReader(PTABLE_INPUT_XML)); Invocation invocation = new Invocation("GetPersonTypeTableProc2"); invocation.setParameter("PTABLE", tableType); Operation op = xrService.getOperation(invocation.getName()); Object result = op.invoke(xrService, invocation); assertNotNull("result is null", result); Document doc = xmlPlatform.createDocument(); XMLMarshaller marshaller = xrService.getXMLContext().createMarshaller(); marshaller.marshal(result, doc); Document controlDoc = xmlParser.parse(new StringReader(NEW_PTABLE_OUTPUT_XML)); assertTrue("Expected:\n" + documentToString(controlDoc) + "\nActual:\n" + documentToString(doc), comparer.isNodeEqual(controlDoc, doc)); } @Test public void getPersonTypeTable2() { Invocation invocation = new Invocation("GetPersonTypeTable2"); Operation op = xrService.getOperation(invocation.getName()); Object result = op.invoke(xrService, invocation); assertNotNull("result is null", result); Document doc = xmlPlatform.createDocument(); XMLMarshaller marshaller = xrService.getXMLContext().createMarshaller(); marshaller.marshal(result, doc); Document controlDoc = xmlParser.parse(new StringReader(RESULT_XML)); assertTrue("Expected:\n" + documentToString(controlDoc) + "\nActual:\n" + documentToString(doc), comparer.isNodeEqual(controlDoc, doc)); } static String RESULT_XML = REGULAR_XML_HEADER + "<dbws_persontype_tableType xmlns=\"urn:ObjectTableTypeTests\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">" + "<item>" + "<name>BUBBLES</name>" + "<age>32</age>" + "<gender>M</gender>" + "<incarcerated>1990-11-19</incarcerated>" + "</item>" + "<item>" + "<name>RICKY</name>" + "<age>33</age>" + "<gender>M</gender>" + "<incarcerated>1985-10-01</incarcerated>" + "</item>" + "<item>" + "<name>JULIAN</name>" + "<age>35</age>" + "<gender>M</gender>" + "<incarcerated>1988-02-07</incarcerated>" + "</item>" + "<item>" + "<name>SARAH</name>" + "<age>25</age>" + "<gender>F</gender>" + "<incarcerated>2002-05-12</incarcerated>" + "</item>" + "<item>" + "<name>J-ROC</name>" + "<age>27</age>" + "<gender>M</gender>" + "<incarcerated>1998-12-17</incarcerated>" + "</item>" + "</dbws_persontype_tableType>"; @Test public void addPersonTypeToTable() { XMLUnmarshaller unmarshaller = xrService.getXMLContext().createUnmarshaller(); Object personType = unmarshaller.unmarshal(new StringReader(PTYPE_INPUT_XML)); Object tableType = unmarshaller.unmarshal(new StringReader(PTABLE_INPUT_XML)); Invocation invocation = new Invocation("AddPersonTypeToTable"); invocation.setParameter("PTYPETOADD", personType); invocation.setParameter("OLDTABLE", tableType); Operation op = xrService.getOperation(invocation.getName()); Object result = op.invoke(xrService, invocation); assertNotNull("result is null", result); Document doc = xmlPlatform.createDocument(); XMLMarshaller marshaller = xrService.getXMLContext().createMarshaller(); marshaller.marshal(result, doc); Document controlDoc = xmlParser.parse(new StringReader(NEW_PTABLE_OUTPUT_XML)); assertTrue("Expected:\n" + documentToString(controlDoc) + "\nActual:\n" + documentToString(doc), comparer.isNodeEqual(controlDoc, doc)); } @Test public void addPersonTypeToTable2() { XMLUnmarshaller unmarshaller = xrService.getXMLContext().createUnmarshaller(); Object personType = unmarshaller.unmarshal(new StringReader(PTYPE_INPUT_XML)); Object tableType = unmarshaller.unmarshal(new StringReader(PTABLE_INPUT_XML)); Invocation invocation = new Invocation("AddPersonTypeToTable2"); invocation.setParameter("PTYPETOADD", personType); invocation.setParameter("OLDTABLE", tableType); Operation op = xrService.getOperation(invocation.getName()); Object result = op.invoke(xrService, invocation); assertNotNull("result is null", result); Document doc = xmlPlatform.createDocument(); XMLMarshaller marshaller = xrService.getXMLContext().createMarshaller(); marshaller.marshal(result, doc); Document controlDoc = xmlParser.parse(new StringReader(NEW_PTABLE_OUTPUT_XML)); assertTrue("Expected:\n" + documentToString(controlDoc) + "\nActual:\n" + documentToString(doc), comparer.isNodeEqual(controlDoc, doc)); } static String PTYPE_INPUT_XML = REGULAR_XML_HEADER + "<dbws_persontypeType xmlns=\"urn:ObjectTableTypeTests\">" + "<name>COREY</name>" + "<age>20</age>" + "<gender>M</gender>" + "<incarcerated>1997-12-09</incarcerated>" + "</dbws_persontypeType>"; static String PTYPE_INPUT2_XML = REGULAR_XML_HEADER + "<dbws_persontypeType xmlns=\"urn:ObjectTableTypeTests\">" + "<name>RICKY</name>" + "<age>33</age>" + "<gender>M</gender>" + "<incarcerated>1985-10-01</incarcerated>" + "</dbws_persontypeType>"; static String PTYPE_INPUT3_XML = REGULAR_XML_HEADER + "<dbws_persontypeType xmlns=\"urn:ObjectTableTypeTests\">" + "<name>BUBBLES</name>" + "<age>32</age>" + "<gender>M</gender>" + "<incarcerated>1990-11-19</incarcerated>" + "</dbws_persontypeType>"; static String PTABLE_INPUT_XML = REGULAR_XML_HEADER + "<dbws_persontype_tableType xmlns=\"urn:ObjectTableTypeTests\">" + "<item>" + "<name>BUBBLES</name>" + "<age>32</age>" + "<gender>M</gender>" + "<incarcerated>1990-11-19</incarcerated>" + "</item>" + "<item>" + "<name>RICKY</name>" + "<age>33</age>" + "<gender>M</gender>" + "<incarcerated>1985-10-01</incarcerated>" + "</item>" + "<item>" + "<name>JULIAN</name>" + "<age>35</age>" + "<gender>M</gender>" + "<incarcerated>1988-02-07</incarcerated>" + "</item>" + "<item>" + "<name>SARAH</name>" + "<age>25</age>" + "<gender>F</gender>" + "<incarcerated>2002-05-12</incarcerated>" + "</item>" + "<item>" + "<name>J-ROC</name>" + "<age>27</age>" + "<gender>M</gender>" + "<incarcerated>1998-12-17</incarcerated>" + "</item>" + "</dbws_persontype_tableType>"; static String NEW_PTABLE_OUTPUT_XML = REGULAR_XML_HEADER + "<dbws_persontype_tableType xmlns=\"urn:ObjectTableTypeTests\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">" + "<item>" + "<name>BUBBLES</name>" + "<age>32</age>" + "<gender>M</gender>" + "<incarcerated>1990-11-19</incarcerated>" + "</item>" + "<item>" + "<name>RICKY</name>" + "<age>33</age>" + "<gender>M</gender>" + "<incarcerated>1985-10-01</incarcerated>" + "</item>" + "<item>" + "<name>JULIAN</name>" + "<age>35</age>" + "<gender>M</gender>" + "<incarcerated>1988-02-07</incarcerated>" + "</item>" + "<item>" + "<name>SARAH</name>" + "<age>25</age>" + "<gender>F</gender>" + "<incarcerated>2002-05-12</incarcerated>" + "</item>" + "<item>" + "<name>J-ROC</name>" + "<age>27</age>" + "<gender>M</gender>" + "<incarcerated>1998-12-17</incarcerated>" + "</item>" + "<item>" + "<name>COREY</name>" + "<age>20</age>" + "<gender>M</gender>" + "<incarcerated>1997-12-09</incarcerated>" + "</item>" + "</dbws_persontype_tableType>"; @Test public void validateJavaClassName() { Project orProject = builder.getOrProject(); ClassDescriptor personTypeORDesc = orProject.getDescriptorForAlias(PERSON_TYPE_ALIAS); assertNotNull("No OR descriptor found for alias [" + PERSON_TYPE_ALIAS + "]", personTypeORDesc); assertEquals("Expected class name [" + PERSON_TYPE_CLASSNAME + "] but was [" + personTypeORDesc.getJavaClassName() + "]", personTypeORDesc.getJavaClassName(), PERSON_TYPE_CLASSNAME); ClassDescriptor personTypeTableORDesc = orProject.getDescriptorForAlias(PERSON_TYPE_TABLE_ALIAS); assertNotNull("No OR descriptor found for alias [" + PERSON_TYPE_TABLE_ALIAS + "]", personTypeTableORDesc); assertEquals("Expected class name [" + PERSON_TYPE_TABLE_CLASSNAME + "] but was [" + personTypeTableORDesc.getJavaClassName() + "]", personTypeTableORDesc.getJavaClassName(), PERSON_TYPE_TABLE_CLASSNAME); Project oxProject = builder.getOxProject(); ClassDescriptor personTypeOXDesc = oxProject.getDescriptorForAlias(PERSON_TYPE_ALIAS); assertNotNull("No OX descriptor found for alias [" + PERSON_TYPE_ALIAS + "]", personTypeOXDesc); assertEquals("Expected class name [" + PERSON_TYPE_CLASSNAME + "] but was [" + personTypeOXDesc.getJavaClassName() + "]", personTypeOXDesc.getJavaClassName(), PERSON_TYPE_CLASSNAME); ClassDescriptor personTypeTableOXDesc = oxProject.getDescriptorForAlias(PERSON_TYPE_TABLE_ALIAS); assertNotNull("No OX descriptor found for alias [" + PERSON_TYPE_TABLE_ALIAS + "]", personTypeTableOXDesc); assertEquals("Expected class name [" + PERSON_TYPE_TABLE_CLASSNAME + "] but was [" + personTypeTableOXDesc.getJavaClassName() + "]", personTypeTableOXDesc.getJavaClassName(), PERSON_TYPE_TABLE_CLASSNAME); } @Test public void createGroupTypeTest() { Invocation invocation = new Invocation("CreateGroupType"); invocation.setParameter("GNAME", "MyNewGroup"); Operation op = xrService.getOperation(invocation.getName()); Object result = op.invoke(xrService, invocation); assertNotNull("result is null", result); Document doc = xmlPlatform.createDocument(); XMLMarshaller marshaller = xrService.getXMLContext().createMarshaller(); marshaller.marshal(result, doc); Document controlDoc = xmlParser.parse(new StringReader(NEW_ETABLE_OUTPUT2_XML)); assertTrue("Expected:\n" + documentToString(controlDoc) + "\nActual:\n" + documentToString(doc), comparer.isNodeEqual(controlDoc, doc)); } static String ETYPE_INPUT_XML = REGULAR_XML_HEADER + "<dbws_myempobjectType xmlns=\"urn:ObjectTableTypeTests\">" + "<empno>20</empno>" + "<ename>COREY</ename>" + "</dbws_myempobjectType>"; static String ETYPE_INPUT2_XML = REGULAR_XML_HEADER + "<dbws_myempobjectType xmlns=\"urn:ObjectTableTypeTests\">" + "<empno>33</empno>" + "<ename>RICKY</ename>" + "</dbws_myempobjectType>"; static String ETYPE_INPUT3_XML = REGULAR_XML_HEADER + "<dbws_myempobjectType xmlns=\"urn:ObjectTableTypeTests\">" + "<empno>32</empno>" + "<ename>BUBBLES</ename>" + "</dbws_myempobjectType>"; static String NEW_ETABLE_OUTPUT2_XML = REGULAR_XML_HEADER + "<dbws_grouptypeType xmlns=\"urn:ObjectTableTypeTests\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">" + "<name>MyNewGroup</name>" + "<ecount>3</ecount>" + "<etable>" + "<item>" + "<empno>20</empno>" + "<ename>COREY</ename>" + "</item>" + "<item>" + "<empno>33</empno>" + "<ename>RICKY</ename>" + "</item>" + "<item>" + "<empno>32</empno>" + "<ename>BUBBLES</ename>" + "</item>" + "</etable>" + "</dbws_grouptypeType>"; @Test public void getJobTest() { Invocation invocation = new Invocation("GetJobTest"); invocation.setParameter("p_job_id", "3"); Operation op = xrService.getOperation(invocation.getName()); Object result = op.invoke(xrService, invocation); assertNotNull("result is null", result); Document doc = xmlPlatform.createDocument(); XMLMarshaller marshaller = xrService.getXMLContext().createMarshaller(); marshaller.marshal(result, doc); Document controlDoc = xmlParser.parse(new StringReader(TJOBS_XML)); assertTrue("Expected:\n" + documentToString(controlDoc) + "\nActual:\n" + documentToString(doc), comparer.isNodeEqual(controlDoc, doc)); } static String TJOBS_XML = REGULAR_XML_HEADER + "<t_jobsType xmlns=\"urn:ObjectTableTypeTests\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">" + "<job_id>3</job_id>" + "<job_title>CON</job_title>" + "<max_salary>4255</max_salary>" + "</t_jobsType>"; @Test public void getJobsTest() { Invocation invocation = new Invocation("GetJobsTest"); Operation op = xrService.getOperation(invocation.getName()); Object result = op.invoke(xrService, invocation); assertNotNull("result is null", result); Document doc = xmlPlatform.createDocument(); XMLMarshaller marshaller = xrService.getXMLContext().createMarshaller(); marshaller.marshal(result, doc); Document controlDoc = xmlParser.parse(new StringReader(COLJOBS_XML)); assertTrue("Expected:\n" + documentToString(controlDoc) + "\nActual:\n" + documentToString(doc), comparer.isNodeEqual(controlDoc, doc)); } static String COLJOBS_XML = REGULAR_XML_HEADER + "<col_jobsType xmlns=\"urn:ObjectTableTypeTests\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">" + "<item>" + "<job_id>1</job_id>" + "<job_title>THEIF</job_title>" + "<max_salary>99000</max_salary>" + "</item>" + "<item>" + "<job_id>2</job_id>" + "<job_title>BULLY</job_title>" + "<max_salary>0</max_salary>" + "</item>" + "<item>" + "<job_id>3</job_id>" + "<job_title>CON</job_title>" + "<max_salary>4255</max_salary>" + "</item>" + "<item>" + "<job_id>4</job_id>" + "<job_title>CON</job_title>" + "<max_salary>4000</max_salary>" + "</item>" + "<item>" + "<job_id>5</job_id>" + "<job_title>COP</job_title>" + "<max_salary>25000</max_salary>" + "</item>" + "</col_jobsType>"; }