diff --git a/utils/eclipselink.dbws.builder.test.oracle/src/it/java/dbws/testing/plsqlrecord/PLSQLTypeReturnTestSuite.java b/utils/eclipselink.dbws.builder.test.oracle/src/it/java/dbws/testing/plsqlrecord/PLSQLTypeReturnTestSuite.java index 3f9719ec75f..f87873910f3 100644 --- a/utils/eclipselink.dbws.builder.test.oracle/src/it/java/dbws/testing/plsqlrecord/PLSQLTypeReturnTestSuite.java +++ b/utils/eclipselink.dbws.builder.test.oracle/src/it/java/dbws/testing/plsqlrecord/PLSQLTypeReturnTestSuite.java @@ -40,30 +40,37 @@ public class PLSQLTypeReturnTestSuite extends DBWSTestSuite { static final String EMPREC_TYPE = "TYPE EMP_RECORD_PACKAGE_EMPREC"; - static final String CREATE_EMPTYPE_TABLE = "CREATE TABLE EMPTYPEX (" + "\nEMPNO NUMERIC(4) NOT NULL," + static final String CREATE_EMPTYPE_TABLE = "CREATE TABLE EMPTYPEX1 (" + "\nEMPNO NUMERIC(4) NOT NULL," + "\nENAME VARCHAR(25)," + "\nPRIMARY KEY (EMPNO)" + "\n)"; static final String[] POPULATE_EMPTYPE_TABLE = new String[] { - "INSERT INTO EMPTYPEX (EMPNO, ENAME) VALUES (69, 'Holly')", - "INSERT INTO EMPTYPEX (EMPNO, ENAME) VALUES (70, 'Brooke')", - "INSERT INTO EMPTYPEX (EMPNO, ENAME) VALUES (71, 'Patty')" }; - static final String DROP_EMPTYPE_TABLE = "DROP TABLE EMPTYPEX"; - - static final String CREATE_EMP_RECORD_PACKAGE = "create or replace PACKAGE EMP_RECORD_PACKAGE IS \r\n" - + "function get_emp_record (l_empno EMPTYPEX.EMPNO%TYPE) return EMPTYPEX.ENAME%TYPE;\r\n" - + "END EMP_RECORD_PACKAGE;"; + "INSERT INTO EMPTYPEX1 (EMPNO, ENAME) VALUES (69, 'Holly')", + "INSERT INTO EMPTYPEX1 (EMPNO, ENAME) VALUES (70, 'Brooke')", + "INSERT INTO EMPTYPEX1 (EMPNO, ENAME) VALUES (71, 'Patty')" }; + static final String DROP_EMPTYPE_TABLE = "DROP TABLE EMPTYPEX1"; + + static final String CREATE_EMP_RECORD_PACKAGE = "CREATE PACKAGE EMP_RECORD_PACKAGE IS\r\n" + + "FUNCTION get_emp_record(l_empno in number) return EMPTYPEX1.ENAME%TYPE;\r\n" + + "END EMP_RECORD_PACKAGE;"; static final String DROP_EMP_RECORD_PACKAGE = "DROP PACKAGE EMP_RECORD_PACKAGE"; static final String DROP_EMP_RECORD_PACKAGE_BODY = "DROP PACKAGE BODY EMP_RECORD_PACKAGE"; - static final String CREATE_EMP_RECORD_PACKAGE_BODY = "create or replace PACKAGE BODY EMP_RECORD_PACKAGE IS\r\n" - + "function get_emp_record (l_empno EMPTYPEX.EMPNO%TYPE) return EMPTYPEX.ENAME%TYPE\r\n" + "is\r\n" - + "ename_result EMPTYPEX.ENAME%TYPE;\r\n" + "BEGIN\r\n" + "SELECT ENAME into ename_result\r\n" - + "FROM EMPTYPEX\r\n" + "WHERE \r\n" + "EMPNO = l_empno;\r\n" + "return ename_result;\r\n" + "END;\r\n" - + "END EMP_RECORD_PACKAGE;"; - - static boolean ddlCreate = false; - static boolean ddlDrop = false; - static boolean ddlDebug = false; + static final String CREATE_EMP_RECORD_PACKAGE_BODY = "create or replace PACKAGE BODY EMP_RECORD_PACKAGE IS\r\n" + + "function get_emp_record(l_empno in number) return EMPTYPEX1.ENAME%TYPE\r\n" + + "is\r\n" + + "ename_result EMPTYPEX1.ENAME%TYPE;\r\n" + + "BEGIN\r\n" + + "SELECT ENAME into ename_result\r\n" + + "FROM EMPTYPEX1\r\n" + + "WHERE \r\n" + + "EMPNO = l_empno;\r\n" + + "return ename_result;\r\n" + + "END;\r\n" + + "END EMP_RECORD_PACKAGE;\r\n"; + + static boolean ddlCreate = true; + static boolean ddlDrop = true; + static boolean ddlDebug = true; @BeforeClass public static void setUp() throws WSDLException { @@ -87,6 +94,8 @@ public static void setUp() throws WSDLException { ddlDebug = true; } if (ddlCreate) { + runDdl(conn, CREATE_EMP_RECORD_PACKAGE, ddlDebug); + runDdl(conn, CREATE_EMP_RECORD_PACKAGE_BODY, ddlDebug); runDdl(conn, CREATE_EMPTYPE_TABLE, ddlDebug); try { Statement stmt = conn.createStatement(); @@ -99,15 +108,13 @@ public static void setUp() throws WSDLException { e.printStackTrace(); } } - runDdl(conn, CREATE_EMP_RECORD_PACKAGE, ddlDebug); - runDdl(conn, CREATE_EMP_RECORD_PACKAGE_BODY, ddlDebug); } DBWS_BUILDER_XML_USERNAME = "" + "" + "" + "PLSQLRecord" + - "off" + + "on" + ""; DBWS_BUILDER_XML_PASSWORD = ""; @@ -176,10 +183,13 @@ public static void tearDown() { } @Test - public void testRecordWithPercentTypeField() { + public void testRecWithPercentTypeField() { Invocation invocation = new Invocation("TestRecWithPercentTypeField"); - invocation.setParameter("EMPNO", 69); + invocation.setParameter("l_empno", 69); Operation op = xrService.getOperation(invocation.getName()); + System.out.println("XRSERVICE " + xrService); + System.out.println("invocation " + invocation.getName()); + System.out.println("op " + invocation.getName()); Object result = op.invoke(xrService, invocation); assertNotNull("result is null", result); Document doc = xmlPlatform.createDocument(); diff --git a/utils/org.eclipse.persistence.dbws.builder/src/main/java/org/eclipse/persistence/tools/dbws/BaseDBWSBuilderHelper.java b/utils/org.eclipse.persistence.dbws.builder/src/main/java/org/eclipse/persistence/tools/dbws/BaseDBWSBuilderHelper.java index f42b1700057..5515f782b18 100644 --- a/utils/org.eclipse.persistence.dbws.builder/src/main/java/org/eclipse/persistence/tools/dbws/BaseDBWSBuilderHelper.java +++ b/utils/org.eclipse.persistence.dbws.builder/src/main/java/org/eclipse/persistence/tools/dbws/BaseDBWSBuilderHelper.java @@ -76,7 +76,7 @@ import static org.eclipse.persistence.tools.dbws.Util.isNullStream; import static org.eclipse.persistence.tools.dbws.Util.requiresSimpleXMLFormat; import static org.eclipse.persistence.tools.dbws.Util.sqlMatch; - +import org.eclipse.persistence.tools.oracleddl.metadata.DatabaseTypeCompositeTestable; import java.io.BufferedOutputStream; import java.io.IOException; import java.io.OutputStream; @@ -1313,6 +1313,16 @@ protected org.eclipse.persistence.internal.helper.DatabaseType buildDatabaseType plsqlCollection.setNestedType(buildDatabaseTypeFromMetadataType(((PLSQLCollectionType) dType).getEnclosedType(), catalog)); return plsqlCollection; } + + if(dType.isTYPEType()) { + OracleArrayType typeType = new OracleArrayType(); + typeType.setTypeName(typeName); + typeType.setCompatibleType(compatibleType); + typeType.setJavaTypeName(getGeneratedWrapperClassName(javaTypeName, dbwsBuilder.getProjectName())); + typeType.setNestedType(buildDatabaseTypeFromMetadataType(((TYPEType) dType).getEnclosedType(), null)); + System.out.println(">>RETURNING >>>>>>>>>>>>>> " + typeType); + return typeType; + } // handle advanced Oracle types if (dType.isVArrayType()) { OracleArrayType varray = new OracleArrayType();