/*******************************************************************************
 * Copyright (c) 2011, 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:
 *     David McCann - September 23, 2011 - 2.4 - Initial implementation
 ******************************************************************************/
package dbws.testing.plsqlcollection;

//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.assertNotNull;
import static org.junit.Assert.assertTrue;

//EclipseLink imports
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;

//test imports
import dbws.testing.DBWSTestSuite;

/**
 * Tests PL/SQL collections with simple arguments.
 *
 */
public class PLSQLCollectionTestSuite extends DBWSTestSuite {

    static final String CREATE_PACKAGE2_PACKAGE =
        "CREATE OR REPLACE PACKAGE PACKAGE2 AS" +
            "\nTYPE tab1 IS TABLE OF VARCHAR2(111) INDEX BY BINARY_INTEGER;" +
            "\nTYPE ORECORD IS RECORD (" +
                "\nO1 VARCHAR2(10)," +
                "\nO2 DECIMAL(7,2)" +
            "\n);" +
            "\nTYPE TAB2 IS TABLE OF ORECORD INDEX BY BINARY_INTEGER;" +
            "\nTYPE TAB3 IS TABLE OF BOOLEAN INDEX BY BINARY_INTEGER;" +
            "\nPROCEDURE COPYTABLE(OLDTAB IN tab1, NEWTAB OUT tab1);" +
            "\nPROCEDURE SETRECORD(INREC IN ORECORD, NEWTAB OUT TAB2);" +
            "\nPROCEDURE COPYBOOLEANTABLE(OLDTAB IN TAB3, NEWTAB OUT TAB3);" +
            "\nPROCEDURE BOOLTOVARCHAR(OLDTAB IN TAB3, NEWTAB OUT tab1);" +
            "\nFUNCTION COPYTABLE2(OLDTAB IN tab1) RETURN tab1;" +
            "\nFUNCTION SETRECORD2(INREC IN ORECORD) RETURN TAB2;" +
        "\nEND PACKAGE2;";
    static final String CREATE_PACKAGE2_BODY =
        "CREATE OR REPLACE PACKAGE BODY PACKAGE2 AS" +
            "\nPROCEDURE COPYTABLE(OLDTAB IN tab1, NEWTAB OUT tab1) AS" +
            "\nBEGIN" +
                "\nNEWTAB := OLDTAB;" +
            "\nEND COPYTABLE;" +
            "\nPROCEDURE COPYBOOLEANTABLE(OLDTAB IN TAB3, NEWTAB OUT TAB3) AS" +
            "\nBEGIN" +
                "\nNEWTAB := OLDTAB;" +
            "\nEND COPYBOOLEANTABLE;" +
            "\nPROCEDURE BOOLTOVARCHAR(OLDTAB IN TAB3, NEWTAB OUT tab1) AS" +
            "\nBEGIN" +
                "\nIF OLDTAB.COUNT > 0 THEN" +
                    "\nFOR I IN OLDTAB.FIRST..OLDTAB.LAST LOOP" +
                        "\nIF OLDTAB(I) = TRUE THEN" +
                            "\nNEWTAB(I + 1 - OLDTAB.FIRST) := 'true';" +
                        "\nELSE" +
                            "\nNEWTAB(I + 1 - OLDTAB.FIRST) := 'false';" +
                        "\nEND IF;"+
                    "\nEND LOOP;" +
                "\nEND IF;" +
            "\nEND BOOLTOVARCHAR;" +
            "\nPROCEDURE SETRECORD(INREC IN ORECORD, NEWTAB OUT TAB2) AS" +
            "\nBEGIN" +
                "\nNEWTAB(0) := INREC;" +
            "\nEND SETRECORD;" +
            "\nFUNCTION COPYTABLE2(OLDTAB IN tab1) RETURN tab1 IS NEWTAB tab1;" +
            "\nBEGIN" +
                "\nNEWTAB := OLDTAB;" +
                "\nRETURN NEWTAB;" +
            "\nEND COPYTABLE2;" +
            "\nFUNCTION SETRECORD2(INREC IN ORECORD) RETURN TAB2 IS NEWTAB TAB2;" +
            "\nBEGIN" +
                "\nNEWTAB(0) := INREC;" +
                "\nRETURN NEWTAB;" +
            "\nEND SETRECORD2;" +
        "\nEND PACKAGE2;";
    static final String CREATE_PACKAGE2_TAB1_TYPE =
        "CREATE OR REPLACE TYPE PACKAGE2_tab1 AS TABLE OF VARCHAR2(111)";
    static final String CREATE_PACKAGE2_ORECORD_TYPE =
        "CREATE OR REPLACE TYPE PACKAGE2_ORECORD AS OBJECT (" +
            "\nO1 VARCHAR2(10)," +
            "\nO2 DECIMAL(7,2)" +
        "\n)";
    static final String CREATE_PACKAGE2_TAB2_TYPE =
        "CREATE OR REPLACE TYPE PACKAGE2_TAB2 AS TABLE OF PACKAGE2_ORECORD";
    static final String CREATE_PACKAGE2_TAB3_TYPE =
        "CREATE OR REPLACE TYPE PACKAGE2_TAB3 AS TABLE OF INTEGER";
    static final String DROP_PACKAGE2_PACKAGE =
        "DROP PACKAGE PACKAGE2";
    static final String DROP_PACKAGE2_TAB1_TYPE =
        "DROP TYPE PACKAGE2_tab1";
    static final String DROP_PACKAGE2_TAB2_TYPE =
        "DROP TYPE PACKAGE2_TAB2";
    static final String DROP_PACKAGE2_TAB3_TYPE =
        "DROP TYPE PACKAGE2_TAB3";
    static final String DROP_PACKAGE2_ORECORD_TYPE =
        "DROP TYPE PACKAGE2_ORECORD";

    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_PACKAGE2_PACKAGE, ddlDebug);
            runDdl(conn, CREATE_PACKAGE2_BODY, ddlDebug);
            runDdl(conn, CREATE_PACKAGE2_TAB1_TYPE, ddlDebug);
            runDdl(conn, CREATE_PACKAGE2_ORECORD_TYPE, ddlDebug);
            runDdl(conn, CREATE_PACKAGE2_TAB2_TYPE, ddlDebug);
            runDdl(conn, CREATE_PACKAGE2_TAB3_TYPE, 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\">PLSQLCollection</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>" +
              "<plsql-procedure " +
                  "name=\"CopyTableTest\" " +
                  "catalogPattern=\"PACKAGE2\" " +
                  "procedurePattern=\"COPYTABLE\" " +
              "/>" +
              "<plsql-procedure " +
                  "name=\"CopyTableTest2\" " +
                  "catalogPattern=\"PACKAGE2\" " +
                  "procedurePattern=\"COPYTABLE2\" " +
              "/>" +
              "<plsql-procedure " +
                  "name=\"CopyBoolTableTest\" " +
                  "catalogPattern=\"PACKAGE2\" " +
                  "procedurePattern=\"COPYBOOLEANTABLE\" " +
              "/>" +
              "<plsql-procedure " +
                  "name=\"BoolTabToVarcharTabTest\" " +
                  "catalogPattern=\"PACKAGE2\" " +
                  "procedurePattern=\"BOOLTOVARCHAR\" " +
              "/>" +
              "<plsql-procedure " +
                  "name=\"SetRecordTest\" " +
                  "catalogPattern=\"PACKAGE2\" " +
                  "procedurePattern=\"SETRECORD\" " +
              "/>" +
              "<plsql-procedure " +
                  "name=\"SetRecordTest2\" " +
                  "catalogPattern=\"PACKAGE2\" " +
                  "procedurePattern=\"SETRECORD2\" " +
                  "returnType=\"package2_tab2Type\" " +  // note that returnType is not required
              "/>" +
            "</dbws-builder>";
          builder = null;
          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_PACKAGE2_PACKAGE, ddlDebug);
            runDdl(conn, DROP_PACKAGE2_TAB1_TYPE, ddlDebug);
            runDdl(conn, DROP_PACKAGE2_TAB2_TYPE, ddlDebug);
            runDdl(conn, DROP_PACKAGE2_TAB3_TYPE, ddlDebug);
            runDdl(conn, DROP_PACKAGE2_ORECORD_TYPE, ddlDebug);
        }
    }

    @Test
    public void copyTableTest() {
        XMLUnmarshaller unmarshaller = xrService.getXMLContext().createUnmarshaller();
        Object inputTab1 = unmarshaller.unmarshal(new StringReader(TABLE_XML));
        Invocation invocation = new Invocation("CopyTableTest");
        invocation.setParameter("OLDTAB", inputTab1);
        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(TABLE_XML));
        assertTrue("Expected:\n" + documentToString(controlDoc) + "\nActual:\n" + documentToString(doc), comparer.isNodeEqual(controlDoc, doc));
    }
    public static final String TABLE_XML =
        STANDALONE_XML_HEADER +
        "<package2_tab1Type xmlns=\"urn:PLSQLCollection\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">" +
          "<item>BLAH</item>" +
        "</package2_tab1Type>";

    @Test
    public void copyTableTest2() {
        XMLUnmarshaller unmarshaller = xrService.getXMLContext().createUnmarshaller();
        Object inputTab1 = unmarshaller.unmarshal(new StringReader(TABLE_XML));
        Invocation invocation = new Invocation("CopyTableTest2");
        invocation.setParameter("OLDTAB", inputTab1);
        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(TABLE_XML));
        assertTrue("Expected:\n" + documentToString(controlDoc) + "\nActual:\n" + documentToString(doc), comparer.isNodeEqual(controlDoc, doc));
    }

    @Test
    public void copyBoolTableTest() {
        XMLUnmarshaller unmarshaller = xrService.getXMLContext().createUnmarshaller();
        Object inputTab = unmarshaller.unmarshal(new StringReader(TABLE3_XML));
        Invocation invocation = new Invocation("CopyBoolTableTest");
        invocation.setParameter("OLDTAB", inputTab);
        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(TABLE3_XML));
        assertTrue("Expected:\n" + documentToString(controlDoc) + "\nActual:\n" + documentToString(doc), comparer.isNodeEqual(controlDoc, doc));
    }
    public static final String TABLE3_XML =
        STANDALONE_XML_HEADER +
        "<package2_tab3Type xmlns=\"urn:PLSQLCollection\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">" +
          "<item>1</item>" +
          "<item>0</item>" +
          "<item>1</item>" +
          "<item>0</item>" +
        "</package2_tab3Type>";

    @Test
    public void boolTabToVarcharTabTest() {
        XMLUnmarshaller unmarshaller = xrService.getXMLContext().createUnmarshaller();
        Object inputTab = unmarshaller.unmarshal(new StringReader(TABLE3_XML));
        Invocation invocation = new Invocation("BoolTabToVarcharTabTest");
        invocation.setParameter("OLDTAB", inputTab);
        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(TABLE4_XML));
        assertTrue("Expected:\n" + documentToString(controlDoc) + "\nActual:\n" + documentToString(doc), comparer.isNodeEqual(controlDoc, doc));
    }
    public static final String TABLE4_XML =
        STANDALONE_XML_HEADER +
        "<package2_tab1Type xmlns=\"urn:PLSQLCollection\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">" +
          "<item>true</item>" +
          "<item>false</item>" +
          "<item>true</item>" +
          "<item>false</item>" +
        "</package2_tab1Type>";
    
    /**
     * StoredProcedure test.
     */
    @Test
    public void setRecordTest() {
        XMLUnmarshaller unmarshaller = xrService.getXMLContext().createUnmarshaller();
        Object inputORec = unmarshaller.unmarshal(new StringReader(INPUTORECORD_XML));
        Invocation invocation = new Invocation("SetRecordTest");
        invocation.setParameter("INREC", inputORec);
        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(OUTPUTTABLE_XML));
        assertTrue("Expected:\n" + documentToString(controlDoc) + "\nActual:\n" + documentToString(doc), comparer.isNodeEqual(controlDoc, doc));
    }
    public static final String INPUTORECORD_XML =
        STANDALONE_XML_HEADER +
        "<package2_orecordType xmlns=\"urn:PLSQLCollection\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">" +
          "<o1>somedata</o1>" +
          "<o2>66.6</o2>" +
        "</package2_orecordType>";
    public static final String OUTPUTTABLE_XML =
        STANDALONE_XML_HEADER +
        "<package2_tab2Type xmlns=\"urn:PLSQLCollection\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">" +
          "<item>" +
            "<o1>somedata</o1>" +
            "<o2>66.6</o2>" +
          "</item>" +
        "</package2_tab2Type>";

    /**
     * StoredFunction test.
     */
    @Test
    public void setRecordTest2() {
        XMLUnmarshaller unmarshaller = xrService.getXMLContext().createUnmarshaller();
        Object inputORec = unmarshaller.unmarshal(new StringReader(INPUTORECORD_XML));
        Invocation invocation = new Invocation("SetRecordTest2");
        invocation.setParameter("INREC", inputORec);
        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(OUTPUTTABLE_XML));
        assertTrue("Expected:\n" + documentToString(controlDoc) + "\nActual:\n" + documentToString(doc), comparer.isNodeEqual(controlDoc, doc));
    }

    /**
     * WSDL generation test.
     */
    @Test
    public void testWSDLGeneration() {
    	assertNotNull("No WSDL was generated", DBWS_WSDL_STREAM);
        Document doc = xmlParser.parse(new StringReader(DBWS_WSDL_STREAM.toString()));
        removeEmptyTextNodes(doc);
        Document controlDoc = xmlParser.parse(new StringReader(WSDL_XML));
        removeEmptyTextNodes(controlDoc);
        assertTrue("Expected:\n" + documentToString(controlDoc) + "\nActual:\n" + documentToString(doc), comparer.isNodeEqual(controlDoc, doc));
    }

    public static final String WSDL_XML =
        STANDALONE_XML_HEADER +
        "<wsdl:definitions name=\"PLSQLCollectionService\" targetNamespace=\"urn:PLSQLCollectionService\" xmlns:ns1=\"urn:PLSQLCollection\" xmlns:wsdl=\"http://schemas.xmlsoap.org/wsdl/\" xmlns:tns=\"urn:PLSQLCollectionService\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/wsdl/soap/\">" +
        "<wsdl:types>" +
          "<xsd:schema xmlns:tns=\"urn:PLSQLCollectionService\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" targetNamespace=\"urn:PLSQLCollectionService\" elementFormDefault=\"qualified\">" +
            "<xsd:import schemaLocation=\"eclipselink-dbws-schema.xsd\" namespace=\"urn:PLSQLCollection\"/>" +
            "<xsd:complexType name=\"SetRecordTestRequestType\"><xsd:sequence><xsd:element name=\"INREC\" type=\"ns1:package2_orecordType\"/></xsd:sequence></xsd:complexType>" +
            "<xsd:complexType name=\"CopyBoolTableTestResponseType\"><xsd:sequence><xsd:element name=\"result\"><xsd:complexType><xsd:sequence><xsd:element minOccurs=\"0\" ref=\"ns1:package2_tab3Type\"/></xsd:sequence></xsd:complexType></xsd:element></xsd:sequence></xsd:complexType>" +
            "<xsd:complexType name=\"CopyTableTestResponseType\"><xsd:sequence><xsd:element name=\"result\"><xsd:complexType><xsd:sequence><xsd:element ref=\"ns1:package2_tab1Type\" minOccurs=\"0\"/></xsd:sequence></xsd:complexType></xsd:element></xsd:sequence></xsd:complexType>" +
            "<xsd:complexType name=\"BoolTabToVarcharTabTestRequestType\"><xsd:sequence><xsd:element name=\"OLDTAB\" type=\"ns1:package2_tab3Type\"/></xsd:sequence></xsd:complexType>" +
            "<xsd:complexType name=\"CopyTableTest2ResponseType\"><xsd:sequence><xsd:element name=\"result\"><xsd:complexType><xsd:sequence><xsd:element ref=\"ns1:package2_tab1Type\" minOccurs=\"0\"/></xsd:sequence></xsd:complexType></xsd:element></xsd:sequence></xsd:complexType>" +
            "<xsd:complexType name=\"SetRecordTest2RequestType\"><xsd:sequence><xsd:element name=\"INREC\" type=\"ns1:package2_orecordType\"/></xsd:sequence></xsd:complexType>" +
            "<xsd:complexType name=\"CopyTableTestRequestType\"><xsd:sequence><xsd:element name=\"OLDTAB\" type=\"ns1:package2_tab1Type\"/></xsd:sequence></xsd:complexType>" +
            "<xsd:complexType name=\"BoolTabToVarcharTabTestResponseType\"><xsd:sequence><xsd:element name=\"result\"><xsd:complexType><xsd:sequence><xsd:element minOccurs=\"0\" ref=\"ns1:package2_tab1Type\"/></xsd:sequence></xsd:complexType></xsd:element></xsd:sequence></xsd:complexType>" +
            "<xsd:complexType name=\"SetRecordTestResponseType\"><xsd:sequence><xsd:element name=\"result\"><xsd:complexType><xsd:sequence><xsd:element ref=\"ns1:package2_tab2Type\" minOccurs=\"0\"/></xsd:sequence></xsd:complexType></xsd:element></xsd:sequence></xsd:complexType>" +
            "<xsd:complexType name=\"CopyTableTest2RequestType\"><xsd:sequence><xsd:element name=\"OLDTAB\" type=\"ns1:package2_tab1Type\"/></xsd:sequence></xsd:complexType>" +
            "<xsd:complexType name=\"SetRecordTest2ResponseType\"><xsd:sequence><xsd:element name=\"result\"><xsd:complexType><xsd:sequence><xsd:element ref=\"ns1:package2_tab2Type\" minOccurs=\"0\"/></xsd:sequence></xsd:complexType></xsd:element></xsd:sequence></xsd:complexType>" +
            "<xsd:complexType name=\"CopyBoolTableTestRequestType\"><xsd:sequence><xsd:element name=\"OLDTAB\" type=\"ns1:package2_tab3Type\"/></xsd:sequence></xsd:complexType>" +
            "<xsd:element name=\"CopyTableTestResponse\" type=\"tns:CopyTableTestResponseType\"/>" +
            "<xsd:element name=\"CopyBoolTableTestResponse\" type=\"tns:CopyBoolTableTestResponseType\"/>" +
            "<xsd:element name=\"CopyTableTest\" type=\"tns:CopyTableTestRequestType\"/>" +
            "<xsd:element name=\"SetRecordTest\" type=\"tns:SetRecordTestRequestType\"/>" +
            "<xsd:element name=\"CopyTableTest2Response\" type=\"tns:CopyTableTest2ResponseType\"/>" +
            "<xsd:element name=\"SetRecordTest2\" type=\"tns:SetRecordTest2RequestType\"/>" +
            "<xsd:element name=\"BoolTabToVarcharTabTestResponse\" type=\"tns:BoolTabToVarcharTabTestResponseType\"/>" +
            "<xsd:element name=\"SetRecordTest2Response\" type=\"tns:SetRecordTest2ResponseType\"/>" +
            "<xsd:element name=\"SetRecordTestResponse\" type=\"tns:SetRecordTestResponseType\"/>" +
            "<xsd:element name=\"BoolTabToVarcharTabTest\" type=\"tns:BoolTabToVarcharTabTestRequestType\"/>" +
            "<xsd:element name=\"CopyBoolTableTest\" type=\"tns:CopyBoolTableTestRequestType\"/>" +
            "<xsd:element name=\"CopyTableTest2\" type=\"tns:CopyTableTest2RequestType\"/>" +
          "</xsd:schema>" +
        "</wsdl:types>" +
        "<wsdl:message name=\"SetRecordTest2Response\">" +
          "<wsdl:part name=\"SetRecordTest2Response\" element=\"tns:SetRecordTest2Response\">" +
          "</wsdl:part>" +
        "</wsdl:message>" +
        "<wsdl:message name=\"BoolTabToVarcharTabTestResponse\">" +
          "<wsdl:part element=\"tns:BoolTabToVarcharTabTestResponse\" name=\"BoolTabToVarcharTabTestResponse\">" +
          "</wsdl:part>" +
        "</wsdl:message>" +
        "<wsdl:message name=\"SetRecordTestRequest\">" +
          "<wsdl:part name=\"SetRecordTestRequest\" element=\"tns:SetRecordTest\">" +
          "</wsdl:part>" +
        "</wsdl:message>" +
        "<wsdl:message name=\"BoolTabToVarcharTabTestRequest\">" +
          "<wsdl:part element=\"tns:BoolTabToVarcharTabTest\" name=\"BoolTabToVarcharTabTestRequest\">" +
          "</wsdl:part>" +
        "</wsdl:message>" +
        "<wsdl:message name=\"SetRecordTestResponse\">" +
          "<wsdl:part name=\"SetRecordTestResponse\" element=\"tns:SetRecordTestResponse\">" +
          "</wsdl:part>" +
        "</wsdl:message>" +
        "<wsdl:message name=\"CopyBoolTableTestResponse\">" +
          "<wsdl:part element=\"tns:CopyBoolTableTestResponse\" name=\"CopyBoolTableTestResponse\">" +
          "</wsdl:part>" +
        "</wsdl:message>" +
        "<wsdl:message name=\"CopyTableTestRequest\">" +
          "<wsdl:part name=\"CopyTableTestRequest\" element=\"tns:CopyTableTest\">" +
          "</wsdl:part>" +
        "</wsdl:message>" +
        "<wsdl:message name=\"CopyTableTestResponse\">" +
          "<wsdl:part name=\"CopyTableTestResponse\" element=\"tns:CopyTableTestResponse\">" +
          "</wsdl:part>" +
        "</wsdl:message>" +
        "<wsdl:message name=\"CopyTableTest2Response\">" +
          "<wsdl:part name=\"CopyTableTest2Response\" element=\"tns:CopyTableTest2Response\">" +
          "</wsdl:part>" +
        "</wsdl:message>" +
        "<wsdl:message name=\"CopyTableTest2Request\">" +
          "<wsdl:part name=\"CopyTableTest2Request\" element=\"tns:CopyTableTest2\">" +
          "</wsdl:part>" +
        "</wsdl:message>" +
        "<wsdl:message name=\"CopyBoolTableTestRequest\">" +
          "<wsdl:part element=\"tns:CopyBoolTableTest\" name=\"CopyBoolTableTestRequest\">" +
          "</wsdl:part>" +
        "</wsdl:message>" +
        "<wsdl:message name=\"SetRecordTest2Request\">" +
          "<wsdl:part name=\"SetRecordTest2Request\" element=\"tns:SetRecordTest2\">" +
          "</wsdl:part>" +
        "</wsdl:message>" +
        "<wsdl:portType name=\"PLSQLCollectionService_Interface\">" +
          "<wsdl:operation name=\"CopyTableTest\">" +
            "<wsdl:input message=\"tns:CopyTableTestRequest\">" +
          "</wsdl:input>" +
            "<wsdl:output message=\"tns:CopyTableTestResponse\">" +
          "</wsdl:output>" +
          "</wsdl:operation>" +
          "<wsdl:operation name=\"SetRecordTest\">" +
            "<wsdl:input message=\"tns:SetRecordTestRequest\">" +
          "</wsdl:input>" +
            "<wsdl:output message=\"tns:SetRecordTestResponse\">" +
          "</wsdl:output>" +
          "</wsdl:operation>" +
          "<wsdl:operation name=\"SetRecordTest2\">" +
            "<wsdl:input message=\"tns:SetRecordTest2Request\">" +
          "</wsdl:input>" +
            "<wsdl:output message=\"tns:SetRecordTest2Response\">" +
          "</wsdl:output>" +
          "</wsdl:operation>" +
          "<wsdl:operation name=\"BoolTabToVarcharTabTest\">" +
            "<wsdl:input message=\"tns:BoolTabToVarcharTabTestRequest\">" +
            "</wsdl:input>" +
            "<wsdl:output message=\"tns:BoolTabToVarcharTabTestResponse\">" +
            "</wsdl:output>" +
          "</wsdl:operation>" +
          "<wsdl:operation name=\"CopyBoolTableTest\">" +
            "<wsdl:input message=\"tns:CopyBoolTableTestRequest\">" +
            "</wsdl:input>" +
            "<wsdl:output message=\"tns:CopyBoolTableTestResponse\">" +
            "</wsdl:output>" +
          "</wsdl:operation>" +
          "<wsdl:operation name=\"CopyTableTest2\">" +
            "<wsdl:input message=\"tns:CopyTableTest2Request\">" +
          "</wsdl:input>" +
            "<wsdl:output message=\"tns:CopyTableTest2Response\">" +
          "</wsdl:output>" +
          "</wsdl:operation>" +
        "</wsdl:portType>" +
        "<wsdl:binding name=\"PLSQLCollectionService_SOAP_HTTP\" type=\"tns:PLSQLCollectionService_Interface\">" +
          "<soap:binding style=\"document\" transport=\"http://schemas.xmlsoap.org/soap/http\"/>" +
          "<wsdl:operation name=\"CopyTableTest\">" +
            "<soap:operation soapAction=\"urn:PLSQLCollectionService:CopyTableTest\"/>" +
            "<wsdl:input>" +
              "<soap:body use=\"literal\"/>" +
            "</wsdl:input>" +
            "<wsdl:output>" +
              "<soap:body use=\"literal\"/>" +
            "</wsdl:output>" +
          "</wsdl:operation>" +
          "<wsdl:operation name=\"SetRecordTest\">" +
            "<soap:operation soapAction=\"urn:PLSQLCollectionService:SetRecordTest\"/>" +
            "<wsdl:input>" +
              "<soap:body use=\"literal\"/>" +
            "</wsdl:input>" +
            "<wsdl:output>" +
              "<soap:body use=\"literal\"/>" +
            "</wsdl:output>" +
          "</wsdl:operation>" +
          "<wsdl:operation name=\"SetRecordTest2\">" +
            "<soap:operation soapAction=\"urn:PLSQLCollectionService:SetRecordTest2\"/>" +
            "<wsdl:input>" +
              "<soap:body use=\"literal\"/>" +
            "</wsdl:input>" +
            "<wsdl:output>" +
              "<soap:body use=\"literal\"/>" +
            "</wsdl:output>" +
          "</wsdl:operation>" +
          "<wsdl:operation name=\"BoolTabToVarcharTabTest\">" +
            "<soap:operation soapAction=\"urn:PLSQLCollectionService:BoolTabToVarcharTabTest\"/>" +
            "<wsdl:input>" +
              "<soap:body use=\"literal\"/>" +
            "</wsdl:input>" +
            "<wsdl:output>" +
              "<soap:body use=\"literal\"/>" +
            "</wsdl:output>" +
          "</wsdl:operation>" +
          "<wsdl:operation name=\"CopyBoolTableTest\">" +
            "<soap:operation soapAction=\"urn:PLSQLCollectionService:CopyBoolTableTest\"/>" +
            "<wsdl:input>" +
              "<soap:body use=\"literal\"/>" +
            "</wsdl:input>" +
            "<wsdl:output>" +
              "<soap:body use=\"literal\"/>" +
            "</wsdl:output>" +
          "</wsdl:operation>" +
          "<wsdl:operation name=\"CopyTableTest2\">" +
            "<soap:operation soapAction=\"urn:PLSQLCollectionService:CopyTableTest2\"/>" +
            "<wsdl:input>" +
              "<soap:body use=\"literal\"/>" +
            "</wsdl:input>" +
            "<wsdl:output>" +
              "<soap:body use=\"literal\"/>" +
            "</wsdl:output>" +
          "</wsdl:operation>" +
        "</wsdl:binding>" +
        "<wsdl:service name=\"PLSQLCollectionService\">" +
          "<wsdl:port name=\"PLSQLCollectionServicePort\" binding=\"tns:PLSQLCollectionService_SOAP_HTTP\">" +
            "<soap:address location=\"REPLACE_WITH_ENDPOINT_ADDRESS\"/>" +
          "</wsdl:port>" +
        "</wsdl:service>" +
      "</wsdl:definitions>";

    
}