blob: 470bdbf38d29bbc17c54e75630d9819681a138e8 [file] [log] [blame]
/*
* Copyright (c) 2011, 2020 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 v. 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0,
* or the Eclipse Distribution License v. 1.0 which is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
*/
// Contributors:
// David McCann - October 3, 2011 - 2.4 - Initial implementation
package dbws.testing.varray;
//javase imports
import java.io.StringReader;
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;
import org.eclipse.persistence.tools.dbws.DBWSBuilder;
//test imports
import dbws.testing.DBWSTestSuite;
/**
* Tests VARRAY types.
*
*/
public class VArrayTestSuite extends DBWSTestSuite {
static final String VCARRAY_ALIAS = "Vcarray";
static final String VCARRAY_CLASSNAME = "varraytests.Vcarray_CollectionWrapper";
static final String CREATE_VCARRAY_VARRAY =
"CREATE OR REPLACE TYPE VCARRAY AS VARRAY(4) OF VARCHAR2(20)";
static final String CREATE_GETVCARRAY_PROC =
"CREATE OR REPLACE PROCEDURE GETVCARRAY(T IN VARCHAR, U OUT VCARRAY) AS" +
"\nBEGIN" +
"\nU := VCARRAY();" +
"\nU.EXTEND;" +
"\nU(1) := CONCAT('entry1-', T);" +
"\nU.EXTEND;" +
"\nU(2) := CONCAT('entry2-', T);" +
"\nEND GETVCARRAY;";
static final String CREATE_GETVCARRAY_PROC2 =
"CREATE OR REPLACE PROCEDURE GETVCARRAY_PROC2(T IN VARCHAR, U IN OUT VCARRAY) AS" +
"\nBEGIN" +
"\nU(1) := CONCAT('entry1-', T);" +
"\nU(2) := CONCAT('entry2-', T);" +
"\nEND GETVCARRAY_PROC2;";
static final String CREATE_GETVCARRAY2_FUNC =
"CREATE OR REPLACE FUNCTION GETVCARRAY2(T IN VARCHAR) RETURN VCARRAY AS" +
"\nL_DATA VCARRAY := VCARRAY();" +
"\nBEGIN" +
"\nL_DATA.EXTEND;" +
"\nL_DATA(1) := CONCAT('entry1-', T);" +
"\nL_DATA.EXTEND;" +
"\nL_DATA(2) := CONCAT('entry2-', T);" +
"\nRETURN L_DATA;" +
"\nEND GETVCARRAY2;";
static final String CREATE_COPYVCARRAY_PROC =
"CREATE OR REPLACE PROCEDURE COPYVCARRAY(V IN VCARRAY, U OUT VCARRAY) AS" +
"\nBEGIN" +
"\nU := V;" +
"\nU.EXTEND;" +
"\nU(3) := 'copy';" +
"\nEND COPYVCARRAY;";
static final String CREATE_COPYVCARRAY2_FUNC =
"CREATE OR REPLACE FUNCTION COPYVCARRAY2(V IN VCARRAY) RETURN VCARRAY AS" +
"\nL_DATA VCARRAY := V;" +
"\nBEGIN" +
"\nL_DATA.EXTEND;" +
"\nL_DATA(3) := 'copy';" +
"\nRETURN L_DATA;" +
"\nEND COPYVCARRAY2;";
static final String CREATE_GETVALUEFROMVCARRAY_PROC =
"CREATE OR REPLACE PROCEDURE GETVALUEFROMVCARRAY(V IN VCARRAY, I IN INTEGER, U OUT VARCHAR2, O OUT VARCHAR2) AS" +
"\nBEGIN" +
"\nU := V(I);" +
"\nO := CONCAT('copy of ', V(I));" +
"\nEND GETVALUEFROMVCARRAY;";
static final String CREATE_GETVALUEFROMVCARRAY2_FUNC =
"CREATE OR REPLACE FUNCTION GETVALUEFROMVCARRAY2(V IN VCARRAY, I IN INTEGER) RETURN VARCHAR2 AS" +
"\nBEGIN" +
"\nRETURN V(I);" +
"\nEND GETVALUEFROMVCARRAY2;";
static final String DROP_VCARRAY_VARRAY =
"DROP TYPE VCARRAY";
static final String DROP_GETVCARRAY_PROC =
"DROP PROCEDURE GETVCARRAY";
static final String DROP_GETVCARRAY_PROC2 =
"DROP PROCEDURE GETVCARRAY_PROC2";
static final String DROP_GETVCARRAY2_FUNC =
"DROP FUNCTION GETVCARRAY2";
static final String DROP_COPYVCARRAY_PROC =
"DROP PROCEDURE COPYVCARRAY";
static final String DROP_COPYVCARRAY2_FUNC =
"DROP FUNCTION COPYVCARRAY2";
static final String DROP_GETVALUEFROMVCARRAY_PROC =
"DROP PROCEDURE GETVALUEFROMVCARRAY";
static final String DROP_GETVALUEFROMVCARRAY2_FUNC =
"DROP FUNCTION GETVALUEFROMVCARRAY2";
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_VCARRAY_VARRAY, ddlDebug);
runDdl(conn, CREATE_GETVCARRAY_PROC, ddlDebug);
runDdl(conn, CREATE_GETVCARRAY_PROC2, ddlDebug);
runDdl(conn, CREATE_GETVCARRAY2_FUNC, ddlDebug);
runDdl(conn, CREATE_COPYVCARRAY_PROC, ddlDebug);
runDdl(conn, CREATE_COPYVCARRAY2_FUNC, ddlDebug);
runDdl(conn, CREATE_GETVALUEFROMVCARRAY_PROC, ddlDebug);
runDdl(conn, CREATE_GETVALUEFROMVCARRAY2_FUNC, 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\">VArrayTests</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=\"GetVCArrayTest\" " +
"catalogPattern=\"TOPLEVEL\" " +
"procedurePattern=\"GETVCARRAY\" " +
"isAdvancedJDBC=\"true\" " +
"returnType=\"vcarrayType\" " +
"/>" +
"<procedure " +
"name=\"GetVCArrayProcTest2\" " +
"catalogPattern=\"TOPLEVEL\" " +
"procedurePattern=\"GETVCARRAY_PROC2\" " +
"isAdvancedJDBC=\"true\" " +
"returnType=\"vcarrayType\" " +
"/>" +
"<procedure " +
"name=\"GetVCArrayTest2\" " +
"catalogPattern=\"TOPLEVEL\" " +
"procedurePattern=\"GETVCARRAY2\" " +
"isAdvancedJDBC=\"true\" " +
"returnType=\"vcarrayType\" " +
"/>" +
"<procedure " +
"name=\"CopyVCArrayTest\" " +
"catalogPattern=\"TOPLEVEL\" " +
"procedurePattern=\"COPYVCARRAY\" " +
"isAdvancedJDBC=\"true\" " +
"returnType=\"vcarrayType\" " +
"/>" +
"<procedure " +
"name=\"CopyVCArrayTest2\" " +
"catalogPattern=\"TOPLEVEL\" " +
"procedurePattern=\"COPYVCARRAY2\" " +
"isAdvancedJDBC=\"true\" " +
"returnType=\"vcarrayType\" " +
"/>" +
"<procedure " +
"name=\"GetValueFromVCArrayTest\" " +
"catalogPattern=\"TOPLEVEL\" " +
"procedurePattern=\"GETVALUEFROMVCARRAY\" " +
"isAdvancedJDBC=\"true\" " +
"isSimpleXMLFormat=\"true\" " +
"isCollection=\"true\" " +
"returnType=\"xsd:string\" " +
"/>" +
"<procedure " +
"name=\"GetValueFromVCArrayTest2\" " +
"catalogPattern=\"TOPLEVEL\" " +
"procedurePattern=\"GETVALUEFROMVCARRAY2\" " +
"isAdvancedJDBC=\"true\" " +
"isSimpleXMLFormat=\"true\" " +
"/>" +
"</dbws-builder>";
builder = new DBWSBuilder();
DBWSTestSuite.setUp(".");
}
@AfterClass
public static void tearDown() {
String ddlDrop = System.getProperty(DATABASE_DDL_DROP_KEY, DEFAULT_DATABASE_DDL_DROP);
if ("true".equalsIgnoreCase(ddlDrop)) {
runDdl(conn, DROP_GETVCARRAY_PROC, ddlDebug);
runDdl(conn, DROP_GETVCARRAY_PROC2, ddlDebug);
runDdl(conn, DROP_GETVCARRAY2_FUNC, ddlDebug);
runDdl(conn, DROP_COPYVCARRAY_PROC, ddlDebug);
runDdl(conn, DROP_COPYVCARRAY2_FUNC, ddlDebug);
runDdl(conn, DROP_GETVALUEFROMVCARRAY_PROC, ddlDebug);
runDdl(conn, DROP_GETVALUEFROMVCARRAY2_FUNC, ddlDebug);
runDdl(conn, DROP_VCARRAY_VARRAY, ddlDebug);
}
}
@Test
public void getVCArrayTest() {
Invocation invocation = new Invocation("GetVCArrayTest");
invocation.setParameter("T", "xxx");
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(VARRAY_RESULT));
assertTrue("Expected:\n" + documentToString(controlDoc) + "\nActual:\n" + documentToString(doc), comparer.isNodeEqual(controlDoc, doc));
}
@Test
public void getVCArrayTest2() {
Invocation invocation = new Invocation("GetVCArrayTest2");
invocation.setParameter("T", "xxx");
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(VARRAY_RESULT));
assertTrue("Expected:\n" + documentToString(controlDoc) + "\nActual:\n" + documentToString(doc), comparer.isNodeEqual(controlDoc, doc));
}
static String VARRAY_RESULT =
REGULAR_XML_HEADER +
"<vcarrayType xmlns=\"urn:VArrayTests\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">" +
"<item>entry1-xxx</item>" +
"<item>entry2-xxx</item>" +
"</vcarrayType>";
@Test
public void copyVCArrayTest() {
XMLUnmarshaller unmarshaller = xrService.getXMLContext().createUnmarshaller();
Object input = unmarshaller.unmarshal(new StringReader(INPUT_XML));
Invocation invocation = new Invocation("CopyVCArrayTest");
invocation.setParameter("V", input);
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 copyVCArrayTest2() {
XMLUnmarshaller unmarshaller = xrService.getXMLContext().createUnmarshaller();
Object input = unmarshaller.unmarshal(new StringReader(INPUT_XML));
Invocation invocation = new Invocation("CopyVCArrayTest2");
invocation.setParameter("V", input);
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 getVCArrayProcTest2() {
XMLUnmarshaller unmarshaller = xrService.getXMLContext().createUnmarshaller();
Object input = unmarshaller.unmarshal(new StringReader(INPUT_XML));
Invocation invocation = new Invocation("GetVCArrayProcTest2");
invocation.setParameter("T", "xxx");
invocation.setParameter("U", input);
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(VARRAY_RESULT));
assertTrue("Expected:\n" + documentToString(controlDoc) + "\nActual:\n" + documentToString(doc), comparer.isNodeEqual(controlDoc, doc));
}
static String INPUT_XML =
REGULAR_XML_HEADER +
"<vcarrayType xmlns=\"urn:VArrayTests\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">" +
"<item>one</item>" +
"<item>two</item>" +
"</vcarrayType>";
static String RESULT_XML =
REGULAR_XML_HEADER +
"<vcarrayType xmlns=\"urn:VArrayTests\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">" +
"<item>one</item>" +
"<item>two</item>" +
"<item>copy</item>" +
"</vcarrayType>";
@Test
public void getValueFromVCArrayTest() {
XMLUnmarshaller unmarshaller = xrService.getXMLContext().createUnmarshaller();
Object input = unmarshaller.unmarshal(new StringReader(INPUT2_XML));
Invocation invocation = new Invocation("GetValueFromVCArrayTest");
invocation.setParameter("V", input);
invocation.setParameter("I", 2);
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(RESULT2_XML));
assertTrue("Expected:\n" + documentToString(controlDoc) + "\nActual:\n" + documentToString(doc), comparer.isNodeEqual(controlDoc, doc));
}
@Test
public void getValueFromVCArrayTest2() {
XMLUnmarshaller unmarshaller = xrService.getXMLContext().createUnmarshaller();
Object input = unmarshaller.unmarshal(new StringReader(INPUT2_XML));
Invocation invocation = new Invocation("GetValueFromVCArrayTest2");
invocation.setParameter("V", input);
invocation.setParameter("I", 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(RESULT3_XML));
assertTrue("Expected:\n" + documentToString(controlDoc) + "\nActual:\n" + documentToString(doc), comparer.isNodeEqual(controlDoc, doc));
}
static String INPUT2_XML =
REGULAR_XML_HEADER +
"<vcarrayType xmlns=\"urn:VArrayTests\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">" +
"<item>1-foo</item>" +
"<item>2-bar</item>" +
"<item>3-foobar</item>" +
"<item>4-blah</item>" +
"</vcarrayType>";
static String RESULT2_XML =
REGULAR_XML_HEADER +
"<simple-xml-format>" +
"<simple-xml>" +
"<U>2-bar</U>" +
"<O>copy of 2-bar</O>" +
"</simple-xml>" +
"</simple-xml-format>";
static String RESULT3_XML =
REGULAR_XML_HEADER +
"<simple-xml-format>" +
"<simple-xml>" +
"<result>3-foobar</result>" +
"</simple-xml>" +
"</simple-xml-format>";
@Test
public void validateJavaClassName() {
Project orProject = builder.getOrProject();
ClassDescriptor vcarrayORDesc = orProject.getDescriptorForAlias(VCARRAY_ALIAS);
assertNotNull("No OR descriptor found for alias [" + VCARRAY_ALIAS + "]", vcarrayORDesc);
assertEquals("Expected class name [" + VCARRAY_CLASSNAME + "] but was [" + vcarrayORDesc.getJavaClassName() + "]", vcarrayORDesc.getJavaClassName(), VCARRAY_CLASSNAME);
Project oxProject = builder.getOxProject();
ClassDescriptor vcarrayOXDesc = oxProject.getDescriptorForAlias(VCARRAY_ALIAS);
assertNotNull("No OX descriptor found for alias [" + VCARRAY_ALIAS + "]", vcarrayOXDesc);
assertEquals("Expected class name [" + VCARRAY_CLASSNAME + "] but was [" + vcarrayOXDesc.getJavaClassName() + "]", vcarrayOXDesc.getJavaClassName(), VCARRAY_CLASSNAME);
}
}