/*
 * Copyright (c) 2011, 2021 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:
//     Mike Norman - June 10 2011, created DDL parser package
//     David McCann - July 2011, visit tests
package dbws.testing.tabletype;

//javase imports
import java.io.StringReader;
import java.lang.reflect.Field;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Vector;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.xml.sax.InputSource;

//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.assertNull;
import static org.junit.Assert.assertTrue;

//EclipseLink imports
import org.eclipse.persistence.internal.descriptors.TransformerBasedFieldTransformation;
import org.eclipse.persistence.internal.helper.DatabaseField;
import org.eclipse.persistence.internal.sessions.AbstractRecord;
import org.eclipse.persistence.internal.sessions.AbstractSession;
import org.eclipse.persistence.internal.sessions.factories.ObjectPersistenceWorkbenchXMLProject;
import org.eclipse.persistence.internal.xr.Invocation;
import org.eclipse.persistence.internal.xr.Operation;
import org.eclipse.persistence.internal.xr.XRDynamicEntity;
import org.eclipse.persistence.mappings.transformers.ConstantTransformer;
import org.eclipse.persistence.oxm.XMLMarshaller;
import org.eclipse.persistence.oxm.XMLUnmarshaller;
import org.eclipse.persistence.oxm.mappings.XMLTransformationMapping;
import org.eclipse.persistence.queries.Call;
import org.eclipse.persistence.queries.DataModifyQuery;
import org.eclipse.persistence.queries.DatabaseQuery;
import org.eclipse.persistence.queries.SQLCall;
import org.eclipse.persistence.sessions.Project;
import org.eclipse.persistence.tools.dbws.BaseDBWSBuilderHelper;
import org.eclipse.persistence.tools.dbws.DBWSBuilder;
import org.eclipse.persistence.tools.dbws.oracle.OracleHelper;

//test imports
import dbws.testing.DBWSTestSuite;

/**
 * Tests TableType where the database table contains all relevant scalar
 * types except UROWID, INTERVALDAYTOSECOND, and INTERVALYEARTOMINTH.
 *
 */
public class TableTypeTestSuite extends DBWSTestSuite {

    static final String CREATE_TABLETYPE_TABLE =
        "CREATE TABLE TABLETYPE (" +
            "\nID NUMERIC(4) NOT NULL," +
            "\nNAME VARCHAR(25)," +
            "\nDEPTNO DECIMAL(2,0)," +
            "\nDEPTNAME VARCHAR2(40)," +
            "\nSECTION CHAR(1)," +
            "\nSAL FLOAT," +
            "\nCOMMISSION REAL," +
            "\nSALES DOUBLE PRECISION," +
            "\nBINID BLOB," +
            "\nB BLOB," +
            "\nC CLOB," +
            "\nR RAW(3)," +
            "\nPRIMARY KEY (ID)" +
        "\n)";
    static final String[] POPULATE_TABLETYPE_TABLE = new String[] {
        "INSERT INTO TABLETYPE (ID, NAME, DEPTNO, DEPTNAME, SECTION, SAL, COMMISSION, SALES, BINID, B, C, R) VALUES (1, 'mike', 99, 'sales', 'a', 100000.80, 450.80, 10000.80, '1010', '010101010101010101010101010101', 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', '010101')",
        "INSERT INTO TABLETYPE (ID, NAME, DEPTNO, DEPTNAME, SECTION, SAL, COMMISSION, SALES, BINID, B, C, R) VALUES (2, 'merrick', 98, 'delivery', 'f', 20000, 0, 0, '0101', '020202020202020202020202020202', 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb', '020202')",
        "INSERT INTO TABLETYPE (ID, NAME, DEPTNO, DEPTNAME, SECTION, SAL, COMMISSION, SALES, BINID, B, C, R) VALUES (3, 'rick', 99, 'sales', 'b', 98000.20, 150.20, 2000.20, '1110', '030303030303030303030303030303', 'cccccccccccccccccccccccccccccc', '030303')"
    };
    static final String DROP_TABLETYPE_TABLE =
        "DROP TABLE TABLETYPE";

    static final String CREATE_TABLETYPE2_TABLE =
        "CREATE TABLE TABLETYPE2 (" +
            "\nID NUMERIC(4) NOT NULL," +
            "\nLR LONG RAW," +
            "\nPRIMARY KEY (ID)" +
        "\n)";
    static final String[] POPULATE_TABLETYPE2_TABLE = new String[] {
        "INSERT INTO TABLETYPE2 (ID, LR) VALUES (66, '010101010101010101')",
        "INSERT INTO TABLETYPE2 (ID, LR) VALUES (67, '020202020202020202')",
        "INSERT INTO TABLETYPE2 (ID, LR) VALUES (68, '030303030303030303')"
    };
    static final String DROP_TABLETYPE2_TABLE =
        "DROP TABLE TABLETYPE2";

    static boolean ddlCreate = false;
    static boolean ddlDrop = false;
    static boolean ddlDebug = false;

    @BeforeClass
    public static void setUp() throws WSDLException, SecurityException, NoSuchFieldException,
        IllegalArgumentException, IllegalAccessException {
        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_TABLETYPE_TABLE, ddlDebug);
            runDdl(conn, CREATE_TABLETYPE2_TABLE, ddlDebug);
            try {
                Statement stmt = conn.createStatement();
                for (int i = 0; i < POPULATE_TABLETYPE_TABLE.length; i++) {
                    stmt.addBatch(POPULATE_TABLETYPE_TABLE[i]);
                }
                stmt.executeBatch();
                stmt = conn.createStatement();
                for (int i = 0; i < POPULATE_TABLETYPE2_TABLE.length; i++) {
                    stmt.addBatch(POPULATE_TABLETYPE2_TABLE[i]);
                }
                stmt.executeBatch();
            }
            catch (SQLException e) {
                //e.printStackTrace();
            }
        }
        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\">tabletype</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>" +
            "<table " +
              "schemaPattern=\"%\" " +
              "tableNamePattern=\"TABLETYPE\" " +
            "/>" +
            "<table " +
              "schemaPattern=\"%\" " +
               "tableNamePattern=\"TABLETYPE2\" " +
            "/>" +
          "</dbws-builder>";
        builder = new DBWSBuilder();
        OracleHelper builderHelper = new OracleHelper(builder);
        builder.setBuilderHelper(builderHelper);
        Field workbenchProj_field = BaseDBWSBuilderHelper.class.getDeclaredField("workbenchXMLProject");
        workbenchProj_field.setAccessible(true);
        ObjectPersistenceWorkbenchXMLProject workbenchXMLProject =
            (ObjectPersistenceWorkbenchXMLProject)workbenchProj_field.get(builderHelper);
        XMLTransformationMapping versionMapping =
            (XMLTransformationMapping)workbenchXMLProject.getDescriptor(Project.class).
                getMappings().get(0);
        TransformerBasedFieldTransformation versionTransformer =
            (TransformerBasedFieldTransformation)versionMapping.getFieldTransformations().get(0);
        Field transformerField =
            TransformerBasedFieldTransformation.class.getDeclaredField("transformer");
        transformerField.setAccessible(true);
        ConstantTransformer constantTransformer =
            (ConstantTransformer)transformerField.get(versionTransformer);
        constantTransformer.setValue("Eclipse Persistence Services - " + releaseVersion);
        DBWSTestSuite.setUp(".");
    }

    @AfterClass
    public static void tearDown() {
        if (ddlDrop) {
            runDdl(conn, DROP_TABLETYPE_TABLE, ddlDebug);
            runDdl(conn, DROP_TABLETYPE2_TABLE, ddlDebug);
        }
    }

    @Test
    public void findByPrimaryKeyTest() {
        Invocation invocation = new Invocation("findByPrimaryKey_TabletypeType");
        invocation.setParameter("id", 1);
        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(ONE_PERSON_XML));
        assertTrue("Expected:\n" + documentToString(controlDoc) + "\nActual:\n" + documentToString(doc), comparer.isNodeEqual(controlDoc, doc));
    }

    @SuppressWarnings("rawtypes")
    @Test
    public void findAllTest() {
        Invocation invocation = new Invocation("findAll_TabletypeType");
        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();
        Element ec = doc.createElement("tabletype-collection");
        doc.appendChild(ec);
        for (Object r : (Vector)result) {
            marshaller.marshal(r, ec);
        }
        Document controlDoc = xmlParser.parse(new StringReader(ALL_PEOPLE_XML));
        assertTrue("Expected:\n" + documentToString(controlDoc) + "\nActual:\n" + documentToString(doc), comparer.isNodeEqual(controlDoc, doc));
    }

    @SuppressWarnings("rawtypes")
    @Test
    public void getLongRawTest() {
        Invocation invocation = new Invocation("findAll_Tabletype2Type");
        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();
        Element ec = doc.createElement("tabletype2-collection");
        doc.appendChild(ec);
        for (Object r : (Vector)result) {
            marshaller.marshal(r, ec);
        }
        Document controlDoc = xmlParser.parse(new StringReader(LONG_RAW_XML));
        assertTrue("Expected:\n" + documentToString(controlDoc) + "\nActual:\n" + documentToString(doc), comparer.isNodeEqual(controlDoc, doc));
    }

    @Test
    public void updateTest() {
        XMLUnmarshaller unmarshaller = xrService.getXMLContext().createUnmarshaller();
        InputSource inputSource = new InputSource(new StringReader(ONE_PERSON_XML));
        XRDynamicEntity firstPerson = (XRDynamicEntity)unmarshaller.unmarshal(inputSource);
        firstPerson.set("sal", 112000.99);
        firstPerson.set("c", "ababababababababababababababab");
        // TODO: don't update binary data until we figure out how to round trip
        //firstPerson.set("b", "101010101010101010101010101011");
        Invocation invocation = new Invocation("update_TabletypeType");
        invocation.setParameter("theInstance", firstPerson);
        Operation op = xrService.getOperation(invocation.getName());
        op.invoke(xrService, invocation);

        invocation = new Invocation("findByPrimaryKey_TabletypeType");
        invocation.setParameter("id", 1);
        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(UPDATED_PERSON_XML));
        assertTrue("Expected:\n" + documentToString(controlDoc) + "but was:\n" + documentToString(doc), comparer.isNodeEqual(controlDoc, doc));
        // reset person
        firstPerson.set("sal", 100000.8);
        firstPerson.set("c", "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
        //firstPerson.set("b", "010101010101010101010101010101");
        invocation = new Invocation("update_TabletypeType");
        invocation.setParameter("theInstance", firstPerson);
        op = xrService.getOperation(invocation.getName());
        op.invoke(xrService, invocation);
        xrService.getORSession().getIdentityMapAccessor().initializeIdentityMaps();
    }

    @Test
    public void createAndDeleteTest() {
        // create a new person
        XMLUnmarshaller unmarshaller = xrService.getXMLContext().createUnmarshaller();
        InputSource inputSource = new InputSource(new StringReader(NEW_PERSON_XML));
        XRDynamicEntity newPerson = (XRDynamicEntity)unmarshaller.unmarshal(inputSource);
        newPerson.set("id", 99);
        newPerson.set("name", "Joe Black");
        newPerson.set("deptno", "22");
        newPerson.set("deptname", "Janitor");
        newPerson.set("section", "q");
        newPerson.set("sal", 19000);
        newPerson.set("commission", 333);
        newPerson.set("sales", 1.00);
        // TODO: don't update binary data until we figure out how to round trip
        //newPerson.set("binid", new String("1001").getBytes());
        //newPerson.set("b", new String("111101010101010101010101010101").getBytes());
        newPerson.set("c", "adadadadadadadadadadadadadadad");
        // TODO: don't update binary data until we figure out how to round trip
        //newPerson.set("r", new String("110").getBytes());
        //newPerson.set("lr", new String("111111010101010101").getBytes());

        Invocation invocation = new Invocation("create_TabletypeType");
        invocation.setParameter("theInstance", newPerson);
        Operation op = xrService.getOperation(invocation.getName());
        op.invoke(xrService, invocation);
        // verify create call succeeded
        invocation = new Invocation("findByPrimaryKey_TabletypeType");
        invocation.setParameter("id", 99);
        op = xrService.getOperation(invocation.getName());
        Object result = op.invoke(xrService, invocation);
        assertNotNull("Result is null after create call", result);
        Document doc = xmlPlatform.createDocument();
        XMLMarshaller marshaller = xrService.getXMLContext().createMarshaller();
        marshaller.marshal(result, doc);
        Document controlDoc = xmlParser.parse(new StringReader(NEW_PERSON_XML));
        assertTrue("Expected:\n" + documentToString(controlDoc) + "but was:\n" + documentToString(doc), comparer.isNodeEqual(controlDoc, doc));

        // delete newly created person
        invocation = new Invocation("delete_TabletypeType");
        invocation.setParameter("id", 99);
        op = xrService.getOperation(invocation.getName());
        op.invoke(xrService, invocation);
        // verify delete succeeded
        invocation = new Invocation("findByPrimaryKey_TabletypeType");
        invocation.setParameter("id", 99);
        op = xrService.getOperation(invocation.getName());
        result = op.invoke(xrService, invocation);
        assertNull("Result is not null after delete call", result);
    }

    @SuppressWarnings("rawtypes")
    @Test
    public void testUpdateSQL() {
        xrService.getORSession().getActiveSession().getIdentityMapAccessor().initializeIdentityMaps();

        XMLUnmarshaller unmarshaller = xrService.getXMLContext().createUnmarshaller();
        InputSource inputSource = new InputSource(new StringReader(ONE_PERSON_XML));
        XRDynamicEntity firstPerson = (XRDynamicEntity) unmarshaller.unmarshal(inputSource);
        Float originalSal = firstPerson.get("sal");
        String originalC = firstPerson.get("c");
        firstPerson.set("sal", 112000.99);
        firstPerson.set("c", "ababababababababababababababab");

        DatabaseQuery updateQuery = xrService.getORSession().getQuery("update_TabletypeType");

        // map property names to parameter binding values
        Map<String, Integer> propOrder = new HashMap<String, Integer>();
        propOrder.put("id", 1);
        propOrder.put("name", 2);
        propOrder.put("deptno", 3);
        propOrder.put("deptname", 4);
        propOrder.put("section", 5);
        propOrder.put("sal", 6);
        propOrder.put("commission", 7);
        propOrder.put("sales", 8);
        propOrder.put("binid", 9);
        propOrder.put("b", 10);
        propOrder.put("c", 11);
        propOrder.put("r", 12);

        List<String> args = new ArrayList<String>();
        Vector<DatabaseField> fieldVector = new Vector<DatabaseField>(12);
        List<Object> argVals = new ArrayList<Object>();

        for (String prop : firstPerson.getPropertiesMap().keySet()) {
            args.add(propOrder.get(prop).toString());
            argVals.add(firstPerson.get(prop));
            fieldVector.add(new DatabaseField(prop.toUpperCase(), "TABLETYPE"));
        }

        // by default, JPA will create a DataReadQuery, but we want a DataModifyQuery
        DataModifyQuery query = new DataModifyQuery();
        query.setIsUserDefined(updateQuery.isUserDefined());
        query.copyFromQuery(updateQuery);
        // Need to clone call, in case was executed as read.
        query.setDatasourceCall((Call) updateQuery.getDatasourceCall().clone());

        query.setArguments(args);
        query.setArgumentValues(argVals);
        ((SQLCall) query.getDatasourceCall()).setFields(fieldVector);

        // need to create/set a translation row
        AbstractRecord row = query.rowFromArguments(argVals, (AbstractSession) xrService.getORSession());
        query.setTranslationRow(row);
        query.prepareCall(xrService.getORSession().getActiveSession(), row);
        query.setSession((AbstractSession) xrService.getORSession().getActiveSession());

        // execute the update
        query.executeDatabaseQuery();

        // verify update operation
        DatabaseQuery findQuery = xrService.getORSession().getActiveSession().getQuery("findByPrimaryKey_TabletypeType");
        findQuery.setIsPrepared(false);
        args = new ArrayList<String>();
        fieldVector = new Vector<DatabaseField>(12);
        argVals = new ArrayList<Object>();

        argVals.add(1);
        args.add("1");
        fieldVector.add(new DatabaseField("ID", "TABLETYPE"));

        findQuery.setArguments(args);
        findQuery.setArgumentValues(argVals);
        ((SQLCall) findQuery.getDatasourceCall()).setFields(fieldVector);

        // need to create/set a translation row
        row = findQuery.rowFromArguments(argVals, (AbstractSession) xrService.getORSession().getActiveSession());
        findQuery.setTranslationRow(row);
        findQuery.prepareCall(xrService.getORSession().getActiveSession(), row);
        findQuery.setSession((AbstractSession) xrService.getORSession().getActiveSession());
        xrService.getORSession().getActiveSession().getIdentityMapAccessor().initializeIdentityMaps();

        // execute the FindByPk
        Object result = findQuery.executeDatabaseQuery();

        assertTrue("Expected Vector, but result was " + result.getClass().getName(), result instanceof Vector);
        Vector resultVector = (Vector) result;
        assertTrue("Expected vector of size 1, but was " + resultVector.size(), resultVector.size() == 1);
        result = resultVector.get(0);
        assertTrue("Expected TableType (XRDynamicEntity) but was " + result.getClass().getName(), result instanceof XRDynamicEntity);

        // verify that 'sal' and 'c' fields were updated successfully
        XRDynamicEntity tableTypeEntity = (XRDynamicEntity) result;
        assertTrue("Expected [sal] '112000.99' but was '" + tableTypeEntity.get("sal") + "'", Float.compare(tableTypeEntity.get("sal"), 112000.99f) == 0);

        Character[] chars = tableTypeEntity.get("c");
        StringBuilder sb = new StringBuilder(chars.length);
        for (Character c : chars) {
            sb.append(c.charValue());
        }
        String charStr = sb.toString();
        assertTrue("Expected [c] 'ababababababababababababababab' but was '" + tableTypeEntity.get("c") + "'", charStr.equals("ababababababababababababababab"));

        // reset original value
        firstPerson.set("sal", originalSal);
        firstPerson.set("c", originalC);
        Invocation invocation = new Invocation("update_TabletypeType");
        invocation.setParameter("theInstance", firstPerson);
        Operation op = xrService.getOperation(invocation.getName());
        op.invoke(xrService, invocation);
    }

    @Test
    public void testCreateAndDeleteSQL() {
        xrService.getORSession().getActiveSession().getIdentityMapAccessor().initializeIdentityMaps();
        DatabaseQuery createQuery = xrService.getORSession().getQuery("create_TabletypeType");

        // by default, JPA will create a DataReadQuery, but we want a DataModifyQuery
        DataModifyQuery query = new DataModifyQuery();
        query.setIsUserDefined(createQuery.isUserDefined());
        query.copyFromQuery(createQuery);
        // Need to clone call, in case was executed as read.
        query.setDatasourceCall((Call) createQuery.getDatasourceCall().clone());

        List<String> args = new ArrayList<String>();
        Vector<DatabaseField> fieldVector = new Vector<DatabaseField>(12);
        List<Object> argVals = new ArrayList<Object>();

        argVals.add(99);
        argVals.add("Joe Black");
        argVals.add("22");
        argVals.add("Janitor");
        argVals.add("q");
        argVals.add(19000);
        argVals.add(333);
        argVals.add(1.00);
        argVals.add("1111");
        argVals.add("040404040404040404040404040404");
        argVals.add("dddddddddddddddddddddddddddddd");
        argVals.add("040404");

        fieldVector.add(new DatabaseField("ID", "TABLETYPE"));
        fieldVector.add(new DatabaseField("NAME", "TABLETYPE"));
        fieldVector.add(new DatabaseField("DEPTNO", "TABLETYPE"));
        fieldVector.add(new DatabaseField("DEPTNAME", "TABLETYPE"));
        fieldVector.add(new DatabaseField("SECTION", "TABLETYPE"));
        fieldVector.add(new DatabaseField("SAL", "TABLETYPE"));
        fieldVector.add(new DatabaseField("COMMISSION", "TABLETYPE"));
        fieldVector.add(new DatabaseField("SALES", "TABLETYPE"));
        fieldVector.add(new DatabaseField("BINID", "TABLETYPE"));
        fieldVector.add(new DatabaseField("B", "TABLETYPE"));
        fieldVector.add(new DatabaseField("C", "TABLETYPE"));
        fieldVector.add(new DatabaseField("R", "TABLETYPE"));

        for (int i=1; i<=argVals.size(); i++) {
            args.add(String.valueOf(i));
        }

        query.setArguments(args);
        query.setArgumentValues(argVals);
        ((SQLCall) query.getDatasourceCall()).setFields(fieldVector);

        // need to create/set a translation row
        AbstractRecord row = query.rowFromArguments(argVals, (AbstractSession) xrService.getORSession());
        query.setTranslationRow(row);
        query.prepareCall(xrService.getORSession(), query.getTranslationRow());
        query.setSession((AbstractSession) xrService.getORSession());
        query.executeDatabaseQuery();

        // verify create call succeeded
        Invocation invocation = new Invocation("findByPrimaryKey_TabletypeType");
        invocation.setParameter("id", 99);
        Operation op = xrService.getOperation(invocation.getName());
        Object result = op.invoke(xrService, invocation);
        assertNotNull("Result is null after create call", result);
        Document doc = xmlPlatform.createDocument();
        XMLMarshaller marshaller = xrService.getXMLContext().createMarshaller();
        marshaller.marshal(result, doc);
        Document controlDoc = xmlParser.parse(new StringReader(NEW_PERSON2_XML));
        assertTrue("Expected:\n" + documentToString(controlDoc) + "but was:\n" + documentToString(doc), comparer.isNodeEqual(controlDoc, doc));

        // delete
        DatabaseQuery deleteQuery = xrService.getORSession().getQuery("delete_TabletypeType");

        // by default, JPA will create a DataReadQuery, but we want a DataModifyQuery
        query = new DataModifyQuery();
        query.setIsUserDefined(deleteQuery.isUserDefined());
        query.copyFromQuery(deleteQuery);
        // Need to clone call, in case was executed as read.
        query.setDatasourceCall((Call) deleteQuery.getDatasourceCall().clone());

        args = new ArrayList<String>();
        fieldVector = new Vector<DatabaseField>(12);
        argVals = new ArrayList<Object>();

        argVals.add(99);
        args.add("1");
        fieldVector.add(new DatabaseField("ID", "TABLETYPE"));

        query.setArguments(args);
        query.setArgumentValues(argVals);
        ((SQLCall) query.getDatasourceCall()).setFields(fieldVector);

        // need to create/set a translation row
        row = query.rowFromArguments(argVals, (AbstractSession) xrService.getORSession());
        query.setTranslationRow(row);
        query.prepareCall(xrService.getORSession(), query.getTranslationRow());
        query.setSession((AbstractSession) xrService.getORSession());
        query.executeDatabaseQuery();

        // verify delete call succeeded
        result = op.invoke(xrService, invocation);
        assertNull("Result not null after delete call", result);
    }

    @Test
    public void validateSchema() {
        Document testDoc = xmlParser.parse(new StringReader(DBWS_SCHEMA_STREAM.toString()));
        Document controlDoc = xmlParser.parse(new StringReader(XSD));
        removeEmptyTextNodes(testDoc);
        removeEmptyTextNodes(controlDoc);
        assertTrue("Schema validation failed:\nExpected:" + documentToString(controlDoc) + "\nbut was:\n" + documentToString(testDoc), comparer.isNodeEqual(controlDoc, testDoc));
    }

    @Test
    public void validateWSDL() {
        Document testDoc = xmlParser.parse(new StringReader(DBWS_WSDL_STREAM.toString()));
        Document controlDoc = xmlParser.parse(new StringReader(WSDL));
        removeEmptyTextNodes(testDoc);
        removeEmptyTextNodes(controlDoc);
        assertTrue("WSDL validation failed:\nExpected:" + documentToString(controlDoc) + "\nbut was:\n" + documentToString(testDoc), comparer.isNodeEqual(controlDoc, testDoc));
    }

    @Test
    public void validateORProject() {
        Document testDoc = xmlParser.parse(new StringReader(DBWS_OR_STREAM.toString()));
        Document controlDoc = xmlParser.parse(new StringReader(OR_PROJECT));
        removeEmptyTextNodes(testDoc);
        removeEmptyTextNodes(controlDoc);
        assertTrue("OR Project validation failed:\nExpected:" + documentToString(controlDoc) + "\nbut was:\n" + documentToString(testDoc), comparer.isNodeEqual(controlDoc, testDoc));
    }

    @Test
    public void validateOXProject() {
        Document testDoc = xmlParser.parse(new StringReader(DBWS_OX_STREAM.toString()));
        Document controlDoc = xmlParser.parse(new StringReader(OX_PROJECT));
        removeEmptyTextNodes(testDoc);
        removeEmptyTextNodes(controlDoc);
        assertTrue("OX Project validation failed:\nExpected:" + documentToString(controlDoc) + "\nbut was:\n" + documentToString(testDoc), comparer.isNodeEqual(controlDoc, testDoc));
    }

    protected static final String XSD =
        "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
        "<xsd:schema xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xmime=\"http://www.w3.org/2005/05/xmlmime\" targetNamespace=\"urn:tabletype\" xmlns=\"urn:tabletype\" elementFormDefault=\"qualified\">\n" +
           "<xsd:complexType name=\"tabletype2Type\">\n" +
              "<xsd:sequence>\n" +
                "<xsd:element name=\"id\" type=\"xsd:decimal\"/>\n" +
                "<xsd:element name=\"lr\" type=\"xsd:base64Binary\" minOccurs=\"0\" nillable=\"true\" xmime:expectedContentTypes=\"application/octet-stream\"/>\n" +
              "</xsd:sequence>\n" +
           "</xsd:complexType>\n" +
           "<xsd:complexType name=\"tabletypeType\">\n" +
              "<xsd:sequence>\n" +
                 "<xsd:element name=\"id\" type=\"xsd:decimal\"/>\n" +
                 "<xsd:element name=\"name\" type=\"xsd:string\" minOccurs=\"0\" nillable=\"true\"/>\n" +
                 "<xsd:element name=\"deptno\" type=\"xsd:decimal\" minOccurs=\"0\" nillable=\"true\"/>\n" +
                 "<xsd:element name=\"deptname\" type=\"xsd:string\" minOccurs=\"0\" nillable=\"true\"/>\n" +
                 "<xsd:element name=\"section\" type=\"xsd:string\" minOccurs=\"0\" nillable=\"true\"/>\n" +
                 "<xsd:element name=\"sal\" type=\"xsd:double\" minOccurs=\"0\" nillable=\"true\"/>\n" +
                 "<xsd:element name=\"commission\" type=\"xsd:double\" minOccurs=\"0\" nillable=\"true\"/>\n" +
                 "<xsd:element name=\"sales\" type=\"xsd:double\" minOccurs=\"0\" nillable=\"true\"/>\n" +
                 "<xsd:element name=\"binid\" type=\"xsd:base64Binary\" minOccurs=\"0\" nillable=\"true\" xmime:expectedContentTypes=\"application/octet-stream\"/>\n" +
                 "<xsd:element name=\"b\" type=\"xsd:base64Binary\" minOccurs=\"0\" nillable=\"true\" xmime:expectedContentTypes=\"application/octet-stream\"/>\n" +
                 "<xsd:element name=\"c\" type=\"xsd:string\" minOccurs=\"0\" nillable=\"true\"/>\n" +
                 "<xsd:element name=\"r\" type=\"xsd:base64Binary\" minOccurs=\"0\" nillable=\"true\" xmime:expectedContentTypes=\"application/octet-stream\"/>\n" +
              "</xsd:sequence>\n" +
           "</xsd:complexType>\n" +
           "<xsd:element name=\"tabletype2Type\" type=\"tabletype2Type\"/>\n" +
           "<xsd:element name=\"tabletypeType\" type=\"tabletypeType\"/>\n" +
        "</xsd:schema>";

    protected static final String WSDL =
        "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
        "<wsdl:definitions\n" +
             "name=\"tabletypeService\"\n" +
             "targetNamespace=\"urn:tabletypeService\"\n" +
             "xmlns:ns1=\"urn:tabletype\"\n" +
             "xmlns:wsdl=\"http://schemas.xmlsoap.org/wsdl/\"\n" +
             "xmlns:tns=\"urn:tabletypeService\"\n" +
             "xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"\n" +
             "xmlns:soap=\"http://schemas.xmlsoap.org/wsdl/soap/\"\n" +
             ">\n" +
             "<wsdl:types>\n" +
                "<xsd:schema elementFormDefault=\"qualified\" targetNamespace=\"urn:tabletypeService\" xmlns:tns=\"urn:tabletypeService\"\n" +
                "xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\n" +
                "<xsd:import namespace=\"urn:tabletype\" schemaLocation=\"eclipselink-dbws-schema.xsd\"/>\n" +
                "<xsd:complexType name=\"findByPrimaryKey_Tabletype2TypeResponseType\">\n" +
                   "<xsd:sequence>\n" +
                      "<xsd:element name=\"result\">\n" +
                         "<xsd:complexType>\n" +
                            "<xsd:sequence>\n" +
                               "<xsd:element ref=\"ns1:tabletype2Type\" minOccurs=\"0\"/>\n" +
                            "</xsd:sequence>\n" +
                         "</xsd:complexType>\n" +
                      "</xsd:element>\n" +
                   "</xsd:sequence>\n" +
                "</xsd:complexType>\n" +
                "<xsd:complexType name=\"create_Tabletype2TypeRequestType\">\n" +
                   "<xsd:sequence>\n" +
                      "<xsd:element name=\"theInstance\">\n" +
                         "<xsd:complexType>\n" +
                            "<xsd:sequence>\n" +
                               "<xsd:element ref=\"ns1:tabletype2Type\"/>\n" +
                            "</xsd:sequence>\n" +
                         "</xsd:complexType>\n" +
                      "</xsd:element>\n" +
                   "</xsd:sequence>\n" +
                "</xsd:complexType>\n" +
                "<xsd:complexType name=\"findByPrimaryKey_Tabletype2TypeRequestType\">\n" +
                   "<xsd:sequence>\n" +
                      "<xsd:element name=\"id\" type=\"xsd:decimal\"/>\n" +
                   "</xsd:sequence>\n" +
                "</xsd:complexType>\n" +
                "<xsd:complexType name=\"findAll_TabletypeTypeRequestType\"/>\n" +
                "<xsd:complexType name=\"findAll_Tabletype2TypeRequestType\"/>\n" +
                "<xsd:complexType name=\"delete_Tabletype2TypeRequestType\">\n" +
                   "<xsd:sequence>\n" +
                      "<xsd:element name=\"id\" type=\"xsd:decimal\"/>\n" +
                   "</xsd:sequence>\n" +
                "</xsd:complexType>\n" +
                "<xsd:complexType name=\"update_TabletypeTypeRequestType\">\n" +
                   "<xsd:sequence>\n" +
                      "<xsd:element name=\"theInstance\">\n" +
                         "<xsd:complexType>\n" +
                            "<xsd:sequence>\n" +
                               "<xsd:element ref=\"ns1:tabletypeType\"/>\n" +
                            "</xsd:sequence>\n" +
                         "</xsd:complexType>\n" +
                      "</xsd:element>\n" +
                   "</xsd:sequence>\n" +
                "</xsd:complexType>\n" +
                "<xsd:complexType name=\"findAll_TabletypeTypeResponseType\">\n" +
                   "<xsd:sequence>\n" +
                      "<xsd:element name=\"result\">\n" +
                         "<xsd:complexType>\n" +
                            "<xsd:sequence>\n" +
                               "<xsd:element maxOccurs=\"unbounded\" minOccurs=\"0\" ref=\"ns1:tabletypeType\"/>\n" +
                            "</xsd:sequence>\n" +
                         "</xsd:complexType>\n" +
                      "</xsd:element>\n" +
                   "</xsd:sequence>\n" +
                "</xsd:complexType>\n" +
                "<xsd:complexType name=\"delete_TabletypeTypeRequestType\">\n" +
                   "<xsd:sequence>\n" +
                      "<xsd:element name=\"id\" type=\"xsd:decimal\"/>\n" +
                   "</xsd:sequence>\n" +
                "</xsd:complexType>\n" +
                "<xsd:complexType name=\"findByPrimaryKey_TabletypeTypeResponseType\">\n" +
                   "<xsd:sequence>\n" +
                      "<xsd:element name=\"result\">\n" +
                         "<xsd:complexType>\n" +
                            "<xsd:sequence>\n" +
                               "<xsd:element minOccurs=\"0\" ref=\"ns1:tabletypeType\"/>\n" +
                            "</xsd:sequence>\n" +
                         "</xsd:complexType>\n" +
                      "</xsd:element>\n" +
                   "</xsd:sequence>\n" +
                "</xsd:complexType>\n" +
                "<xsd:complexType name=\"findAll_Tabletype2TypeResponseType\">\n" +
                   "<xsd:sequence>\n" +
                      "<xsd:element name=\"result\">\n" +
                         "<xsd:complexType>\n" +
                            "<xsd:sequence>\n" +
                               "<xsd:element ref=\"ns1:tabletype2Type\" minOccurs=\"0\" maxOccurs=\"unbounded\"/>\n" +
                            "</xsd:sequence>\n" +
                         "</xsd:complexType>\n" +
                      "</xsd:element>\n" +
                   "</xsd:sequence>\n" +
                "</xsd:complexType>\n" +
                "<xsd:complexType name=\"update_Tabletype2TypeRequestType\">\n" +
                   "<xsd:sequence>\n" +
                      "<xsd:element name=\"theInstance\">\n" +
                         "<xsd:complexType>\n" +
                            "<xsd:sequence>\n" +
                               "<xsd:element ref=\"ns1:tabletype2Type\"/>\n" +
                            "</xsd:sequence>\n" +
                         "</xsd:complexType>\n" +
                      "</xsd:element>\n" +
                   "</xsd:sequence>\n" +
                "</xsd:complexType>\n" +
                "<xsd:complexType name=\"findByPrimaryKey_TabletypeTypeRequestType\">\n" +
                   "<xsd:sequence>\n" +
                      "<xsd:element name=\"id\" type=\"xsd:decimal\"/>\n" +
                   "</xsd:sequence>\n" +
                "</xsd:complexType>\n" +
                "<xsd:complexType name=\"create_TabletypeTypeRequestType\">\n" +
                   "<xsd:sequence>\n" +
                      "<xsd:element name=\"theInstance\">\n" +
                         "<xsd:complexType>\n" +
                            "<xsd:sequence>\n" +
                               "<xsd:element ref=\"ns1:tabletypeType\"/>\n" +
                            "</xsd:sequence>\n" +
                         "</xsd:complexType>\n" +
                      "</xsd:element>\n" +
                   "</xsd:sequence>\n" +
                "</xsd:complexType>\n" +
                "<xsd:element name=\"update_TabletypeType\" type=\"tns:update_TabletypeTypeRequestType\"/>\n" +
                "<xsd:element name=\"create_Tabletype2Type\" type=\"tns:create_Tabletype2TypeRequestType\"/>\n" +
                "<xsd:element name=\"findAll_TabletypeTypeResponse\" type=\"tns:findAll_TabletypeTypeResponseType\"/>\n" +
                "<xsd:element name=\"update_Tabletype2Type\" type=\"tns:update_Tabletype2TypeRequestType\"/>\n" +
                "<xsd:element name=\"findByPrimaryKey_TabletypeType\" type=\"tns:findByPrimaryKey_TabletypeTypeRequestType\"/>\n" +
                "<xsd:element name=\"findAll_Tabletype2TypeResponse\" type=\"tns:findAll_Tabletype2TypeResponseType\"/>\n" +
                "<xsd:element name=\"delete_Tabletype2Type\" type=\"tns:delete_Tabletype2TypeRequestType\"/>\n" +
                "<xsd:element name=\"findAll_Tabletype2Type\" type=\"tns:findAll_Tabletype2TypeRequestType\"/>\n" +
                "<xsd:element name=\"create_TabletypeType\" type=\"tns:create_TabletypeTypeRequestType\"/>\n" +
                "<xsd:element name=\"findAll_TabletypeType\" type=\"tns:findAll_TabletypeTypeRequestType\"/>\n" +
                "<xsd:element name=\"findByPrimaryKey_TabletypeTypeResponse\" type=\"tns:findByPrimaryKey_TabletypeTypeResponseType\"/>\n" +
                "<xsd:element name=\"FaultType\">\n" +
                   "<xsd:complexType>\n" +
                      "<xsd:sequence>\n" +
                         "<xsd:element name=\"faultCode\" type=\"xsd:string\"/>\n" +
                         "<xsd:element name=\"faultString\" type=\"xsd:string\"/>\n" +
                      "</xsd:sequence>\n" +
                   "</xsd:complexType>\n" +
                "</xsd:element>\n" +
                "<xsd:element name=\"findByPrimaryKey_Tabletype2Type\" type=\"tns:findByPrimaryKey_Tabletype2TypeRequestType\"/>\n" +
                "<xsd:element name=\"EmptyResponse\">\n" +
                   "<xsd:complexType/>\n" +
                "</xsd:element>\n" +
                "<xsd:element name=\"findByPrimaryKey_Tabletype2TypeResponse\" type=\"tns:findByPrimaryKey_Tabletype2TypeResponseType\"/>\n" +
                "<xsd:element name=\"delete_TabletypeType\" type=\"tns:delete_TabletypeTypeRequestType\"/>\n" +
                "</xsd:schema>\n" +
              "</wsdl:types>\n" +
              "<wsdl:message name=\"delete_Tabletype2TypeRequest\">\n" +
                 "<wsdl:part name=\"delete_Tabletype2TypeRequest\" element=\"tns:delete_Tabletype2Type\">\n" +"</wsdl:part>\n" +
              "</wsdl:message>\n" +
              "<wsdl:message name=\"update_TabletypeTypeRequest\">\n" +
                 "<wsdl:part name=\"update_TabletypeTypeRequest\" element=\"tns:update_TabletypeType\">\n" +"</wsdl:part>\n" +
              "</wsdl:message>\n" +
              "<wsdl:message name=\"findByPrimaryKey_TabletypeTypeRequest\">\n" +
                 "<wsdl:part name=\"findByPrimaryKey_TabletypeTypeRequest\" element=\"tns:findByPrimaryKey_TabletypeType\">\n" +"</wsdl:part>\n" +
              "</wsdl:message>\n" +
              "<wsdl:message name=\"create_TabletypeTypeRequest\">\n" +
                 "<wsdl:part name=\"create_TabletypeTypeRequest\" element=\"tns:create_TabletypeType\">\n" +"</wsdl:part>\n" +
              "</wsdl:message>\n" +
              "<wsdl:message name=\"findAll_Tabletype2TypeRequest\">\n" +
                 "<wsdl:part name=\"findAll_Tabletype2TypeRequest\" element=\"tns:findAll_Tabletype2Type\">\n" +"</wsdl:part>\n" +
              "</wsdl:message>\n" +
              "<wsdl:message name=\"update_Tabletype2TypeRequest\">\n" +
                 "<wsdl:part name=\"update_Tabletype2TypeRequest\" element=\"tns:update_Tabletype2Type\">\n" +"</wsdl:part>\n" +
              "</wsdl:message>\n" +
              "<wsdl:message name=\"create_Tabletype2TypeRequest\">\n" +
                 "<wsdl:part name=\"create_Tabletype2TypeRequest\" element=\"tns:create_Tabletype2Type\">\n" +"</wsdl:part>\n" +
              "</wsdl:message>\n" +
              "<wsdl:message name=\"findAll_TabletypeTypeResponse\">\n" +
                 "<wsdl:part name=\"findAll_TabletypeTypeResponse\" element=\"tns:findAll_TabletypeTypeResponse\">\n" +"</wsdl:part>\n" +
              "</wsdl:message>\n" +
              "<wsdl:message name=\"FaultType\">\n" +
                 "<wsdl:part name=\"fault\" element=\"tns:FaultType\">\n" +"</wsdl:part>\n" +
              "</wsdl:message>\n" +
              "<wsdl:message name=\"findByPrimaryKey_TabletypeTypeResponse\">\n" +
                 "<wsdl:part name=\"findByPrimaryKey_TabletypeTypeResponse\" element=\"tns:findByPrimaryKey_TabletypeTypeResponse\">\n" +"</wsdl:part>\n" +
              "</wsdl:message>\n" +
              "<wsdl:message name=\"findByPrimaryKey_Tabletype2TypeRequest\">\n" +
                 "<wsdl:part name=\"findByPrimaryKey_Tabletype2TypeRequest\" element=\"tns:findByPrimaryKey_Tabletype2Type\">\n" +"</wsdl:part>\n" +
              "</wsdl:message>\n" +
              "<wsdl:message name=\"findByPrimaryKey_Tabletype2TypeResponse\">\n" +
                 "<wsdl:part name=\"findByPrimaryKey_Tabletype2TypeResponse\" element=\"tns:findByPrimaryKey_Tabletype2TypeResponse\">\n" +"</wsdl:part>\n" +
              "</wsdl:message>\n" +
              "<wsdl:message name=\"EmptyResponse\">\n" +
                 "<wsdl:part name=\"emptyResponse\" element=\"tns:EmptyResponse\">\n" +"</wsdl:part>\n" +
              "</wsdl:message>\n" +
              "<wsdl:message name=\"findAll_Tabletype2TypeResponse\">\n" +
                 "<wsdl:part name=\"findAll_Tabletype2TypeResponse\" element=\"tns:findAll_Tabletype2TypeResponse\">\n" +"</wsdl:part>\n" +
              "</wsdl:message>\n" +
              "<wsdl:message name=\"findAll_TabletypeTypeRequest\">\n" +
                 "<wsdl:part name=\"findAll_TabletypeTypeRequest\" element=\"tns:findAll_TabletypeType\">\n" +"</wsdl:part>\n" +
              "</wsdl:message>\n" +
              "<wsdl:message name=\"delete_TabletypeTypeRequest\">\n" +
                 "<wsdl:part name=\"delete_TabletypeTypeRequest\" element=\"tns:delete_TabletypeType\">\n" +"</wsdl:part>\n" +
              "</wsdl:message>\n" +
              "<wsdl:portType name=\"tabletypeService_Interface\">\n" +
                 "<wsdl:operation name=\"update_TabletypeType\">\n" +
                    "<wsdl:input message=\"tns:update_TabletypeTypeRequest\">\n" +"</wsdl:input>\n" +
                    "<wsdl:output name=\"update_TabletypeTypeEmptyResponse\" message=\"tns:EmptyResponse\">\n" +"</wsdl:output>\n" +
                    "<wsdl:fault name=\"FaultException\" message=\"tns:FaultType\">\n" +"</wsdl:fault>\n" +
                 "</wsdl:operation>\n" +
                 "<wsdl:operation name=\"delete_Tabletype2Type\">\n" +
                    "<wsdl:input message=\"tns:delete_Tabletype2TypeRequest\">\n" +"</wsdl:input>\n" +
                    "<wsdl:output name=\"delete_Tabletype2TypeEmptyResponse\" message=\"tns:EmptyResponse\">\n" +"</wsdl:output>\n" +
                    "<wsdl:fault name=\"FaultException\" message=\"tns:FaultType\">\n" +"</wsdl:fault>\n" +
                 "</wsdl:operation>\n" +
                 "<wsdl:operation name=\"create_Tabletype2Type\">\n" +
                    "<wsdl:input message=\"tns:create_Tabletype2TypeRequest\">\n" +"</wsdl:input>\n" +
                    "<wsdl:output name=\"create_Tabletype2TypeEmptyResponse\" message=\"tns:EmptyResponse\">\n" +"</wsdl:output>\n" +
                    "<wsdl:fault name=\"FaultException\" message=\"tns:FaultType\">\n" +"</wsdl:fault>\n" +
                 "</wsdl:operation>\n" +
                 "<wsdl:operation name=\"findAll_Tabletype2Type\">\n" +
                    "<wsdl:input message=\"tns:findAll_Tabletype2TypeRequest\">\n" +"</wsdl:input>\n" +
                    "<wsdl:output message=\"tns:findAll_Tabletype2TypeResponse\">\n" +"</wsdl:output>\n" +
                 "</wsdl:operation>\n" +
                 "<wsdl:operation name=\"create_TabletypeType\">\n" +
                    "<wsdl:input message=\"tns:create_TabletypeTypeRequest\">\n" +"</wsdl:input>\n" +
                    "<wsdl:output name=\"create_TabletypeTypeEmptyResponse\" message=\"tns:EmptyResponse\">\n" +"</wsdl:output>\n" +
                    "<wsdl:fault name=\"FaultException\" message=\"tns:FaultType\">\n" +"</wsdl:fault>\n" +
                 "</wsdl:operation>\n" +
                 "<wsdl:operation name=\"findAll_TabletypeType\">\n" +
                    "<wsdl:input message=\"tns:findAll_TabletypeTypeRequest\">\n" +"</wsdl:input>\n" +
                    "<wsdl:output message=\"tns:findAll_TabletypeTypeResponse\">\n" +"</wsdl:output>\n" +
                 "</wsdl:operation>\n" +
                 "<wsdl:operation name=\"update_Tabletype2Type\">\n" +
                    "<wsdl:input message=\"tns:update_Tabletype2TypeRequest\">\n" +"</wsdl:input>\n" +
                    "<wsdl:output name=\"update_Tabletype2TypeEmptyResponse\" message=\"tns:EmptyResponse\">\n" +"</wsdl:output>\n" +
                    "<wsdl:fault name=\"FaultException\" message=\"tns:FaultType\">\n" +"</wsdl:fault>\n" +
                 "</wsdl:operation>\n" +
                 "<wsdl:operation name=\"findByPrimaryKey_TabletypeType\">\n" +
                    "<wsdl:input message=\"tns:findByPrimaryKey_TabletypeTypeRequest\">\n" +"</wsdl:input>\n" +
                    "<wsdl:output message=\"tns:findByPrimaryKey_TabletypeTypeResponse\">\n" +"</wsdl:output>\n" +
                 "</wsdl:operation>\n" +
                 "<wsdl:operation name=\"findByPrimaryKey_Tabletype2Type\">\n" +
                    "<wsdl:input message=\"tns:findByPrimaryKey_Tabletype2TypeRequest\">\n" +"</wsdl:input>\n" +
                    "<wsdl:output message=\"tns:findByPrimaryKey_Tabletype2TypeResponse\">\n" +"</wsdl:output>\n" +
                 "</wsdl:operation>\n" +
                 "<wsdl:operation name=\"delete_TabletypeType\">\n" +
                    "<wsdl:input message=\"tns:delete_TabletypeTypeRequest\">\n" +"</wsdl:input>\n" +
                    "<wsdl:output name=\"delete_TabletypeTypeEmptyResponse\" message=\"tns:EmptyResponse\">\n" +"</wsdl:output>\n" +
                    "<wsdl:fault name=\"FaultException\" message=\"tns:FaultType\">\n" +"</wsdl:fault>\n" +
                 "</wsdl:operation>\n" +
             "</wsdl:portType>\n" +
             "<wsdl:binding name=\"tabletypeService_SOAP_HTTP\" type=\"tns:tabletypeService_Interface\">\n" +
                "<soap:binding style=\"document\" transport=\"http://schemas.xmlsoap.org/soap/http\"/>\n" +
                "<wsdl:operation name=\"update_TabletypeType\">\n" +
                   "<soap:operation soapAction=\"urn:tabletypeService:update_TabletypeType\"/>\n" +
                   "<wsdl:input>\n" +
                      "<soap:body use=\"literal\"/>\n" +
                   "</wsdl:input>\n" +
                   "<wsdl:output>\n" +
                      "<soap:body use=\"literal\"/>\n" +
                   "</wsdl:output>\n" +
                   "<wsdl:fault name=\"FaultException\">\n" +
                       "<soap:fault name=\"FaultException\" use=\"literal\"/>\n" +
                   "</wsdl:fault>\n" +
                "</wsdl:operation>\n" +
                "<wsdl:operation name=\"delete_Tabletype2Type\">\n" +
                   "<soap:operation soapAction=\"urn:tabletypeService:delete_Tabletype2Type\"/>\n" +
                   "<wsdl:input>\n" +
                      "<soap:body use=\"literal\"/>\n" +
                   "</wsdl:input>\n" +
                   "<wsdl:output>\n" +
                      "<soap:body use=\"literal\"/>\n" +
                   "</wsdl:output>\n" +
                   "<wsdl:fault name=\"FaultException\">\n" +
                      "<soap:fault name=\"FaultException\" use=\"literal\"/>\n" +
                   "</wsdl:fault>\n" +
                "</wsdl:operation>\n" +
                "<wsdl:operation name=\"create_Tabletype2Type\">\n" +
                   "<soap:operation soapAction=\"urn:tabletypeService:create_Tabletype2Type\"/>\n" +
                   "<wsdl:input>\n" +
                      "<soap:body use=\"literal\"/>\n" +
                   "</wsdl:input>\n" +
                   "<wsdl:output>\n" +
                      "<soap:body use=\"literal\"/>\n" +
                   "</wsdl:output>\n" +
                   "<wsdl:fault name=\"FaultException\">\n" +
                      "<soap:fault name=\"FaultException\" use=\"literal\"/>\n" +
                   "</wsdl:fault>\n" +
                "</wsdl:operation>\n" +
                "<wsdl:operation name=\"findAll_Tabletype2Type\">\n" +
                   "<soap:operation soapAction=\"urn:tabletypeService:findAll_Tabletype2Type\"/>\n" +
                   "<wsdl:input>\n" +
                      "<soap:body use=\"literal\"/>\n" +
                   "</wsdl:input>\n" +
                   "<wsdl:output>\n" +
                      "<soap:body use=\"literal\"/>\n" +
                   "</wsdl:output>\n" +
                "</wsdl:operation>\n" +
                "<wsdl:operation name=\"create_TabletypeType\">\n" +
                   "<soap:operation soapAction=\"urn:tabletypeService:create_TabletypeType\"/>\n" +
                   "<wsdl:input>\n" +
                      "<soap:body use=\"literal\"/>\n" +
                   "</wsdl:input>\n" +
                   "<wsdl:output>\n" +
                      "<soap:body use=\"literal\"/>\n" +
                   "</wsdl:output>\n" +
                   "<wsdl:fault name=\"FaultException\">\n" +
                      "<soap:fault name=\"FaultException\" use=\"literal\"/>\n" +
                   "</wsdl:fault>\n" +
                "</wsdl:operation>\n" +
                "<wsdl:operation name=\"findAll_TabletypeType\">\n" +
                   "<soap:operation soapAction=\"urn:tabletypeService:findAll_TabletypeType\"/>\n" +
                   "<wsdl:input>\n" +
                      "<soap:body use=\"literal\"/>\n" +
                   "</wsdl:input>\n" +
                   "<wsdl:output>\n" +
                      "<soap:body use=\"literal\"/>\n" +
                   "</wsdl:output>\n" +
                "</wsdl:operation>\n" +
                "<wsdl:operation name=\"update_Tabletype2Type\">\n" +
                   "<soap:operation soapAction=\"urn:tabletypeService:update_Tabletype2Type\"/>\n" +
                   "<wsdl:input>\n" +
                      "<soap:body use=\"literal\"/>\n" +
                   "</wsdl:input>\n" +
                   "<wsdl:output>\n" +
                      "<soap:body use=\"literal\"/>\n" +
                   "</wsdl:output>\n" +
                   "<wsdl:fault name=\"FaultException\">\n" +
                       "<soap:fault name=\"FaultException\" use=\"literal\"/>\n" +
                   "</wsdl:fault>\n" +
                "</wsdl:operation>\n" +
                "<wsdl:operation name=\"findByPrimaryKey_TabletypeType\">\n" +
                   "<soap:operation soapAction=\"urn:tabletypeService:findByPrimaryKey_TabletypeType\"/>\n" +
                   "<wsdl:input>\n" +
                      "<soap:body use=\"literal\"/>\n" +
                   "</wsdl:input>\n" +
                   "<wsdl:output>\n" +
                      "<soap:body use=\"literal\"/>\n" +
                   "</wsdl:output>\n" +
                "</wsdl:operation>\n" +
                "<wsdl:operation name=\"findByPrimaryKey_Tabletype2Type\">\n" +
                   "<soap:operation soapAction=\"urn:tabletypeService:findByPrimaryKey_Tabletype2Type\"/>\n" +
                   "<wsdl:input>\n" +
                      "<soap:body use=\"literal\"/>\n" +
                   "</wsdl:input>\n" +
                   "<wsdl:output>\n" +
                      "<soap:body use=\"literal\"/>\n" +
                   "</wsdl:output>\n" +
                "</wsdl:operation>\n" +
                "<wsdl:operation name=\"delete_TabletypeType\">\n" +
                   "<soap:operation soapAction=\"urn:tabletypeService:delete_TabletypeType\"/>\n" +
                   "<wsdl:input>\n" +
                      "<soap:body use=\"literal\"/>\n" +
                   "</wsdl:input>\n" +
                   "<wsdl:output>\n" +
                      "<soap:body use=\"literal\"/>\n" +
                   "</wsdl:output>\n" +
                   "<wsdl:fault name=\"FaultException\">\n" +
                      "<soap:fault name=\"FaultException\" use=\"literal\"/>\n" +
                   "</wsdl:fault>\n" +
                "</wsdl:operation>\n" +
             "</wsdl:binding>\n" +
             "<wsdl:service name=\"tabletypeService\">\n" +
                "<wsdl:port name=\"tabletypeServicePort\" binding=\"tns:tabletypeService_SOAP_HTTP\">\n" +
                   "<soap:address location=\"REPLACE_WITH_ENDPOINT_ADDRESS\"/>\n" +
                "</wsdl:port>\n" +
             "</wsdl:service>\n" +
        "</wsdl:definitions>\n";

    protected static final String OR_PROJECT =
        "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>" +
        "\n<orm:entity-mappings xmlns:orm=\"http://www.eclipse.org/eclipselink/xsds/persistence/orm\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://www.eclipse.org/eclipselink/xsds/persistence/orm org/eclipse/persistence/jpa/eclipselink_orm_2_5.xsd\">" +
        "\n  <orm:entity access=\"VIRTUAL\" class=\"tabletype.Tabletype\">" +
        "\n    <orm:table name=\"TABLETYPE\"/>" +
        "\n    <orm:named-native-query name=\"findByPrimaryKey_TabletypeType\" result-class=\"tabletype.Tabletype\">" +
        "\n      <orm:query>SELECT * FROM TABLETYPE WHERE (ID = ?1)</orm:query>" +
        "\n    </orm:named-native-query>" +
        "\n    <orm:named-native-query name=\"findAll_TabletypeType\" result-class=\"tabletype.Tabletype\">" +
        "\n      <orm:query>SELECT * FROM TABLETYPE</orm:query>" +
        "\n    </orm:named-native-query>" +
        "\n    <orm:named-native-query name=\"update_TabletypeType\">" +
        "\n      <orm:query>UPDATE TABLETYPE SET NAME = ?2, DEPTNO = ?3, DEPTNAME = ?4, SECTION = ?5, SAL = ?6, COMMISSION = ?7, SALES = ?8, BINID = ?9, B = ?10, C = ?11, R = ?12 WHERE (ID = ?1)</orm:query>" +
        "\n    </orm:named-native-query>" +
        "\n    <orm:named-native-query name=\"create_TabletypeType\">" +
        "\n      <orm:query>INSERT INTO TABLETYPE (ID, NAME, DEPTNO, DEPTNAME, SECTION, SAL, COMMISSION, SALES, BINID, B, C, R) VALUES (?1, ?2, ?3, ?4, ?5, ?6, ?7, ?8, ?9, ?10, ?11, ?12)</orm:query>" +
        "\n    </orm:named-native-query>" +
        "\n    <orm:named-native-query name=\"delete_TabletypeType\">" +
        "\n      <orm:query>DELETE FROM TABLETYPE WHERE (ID = ?1)</orm:query>" +
        "\n    </orm:named-native-query>" +
        "\n    <orm:attributes>" +
        "\n      <orm:id attribute-type=\"java.math.BigInteger\" name=\"id\">" +
        "\n        <orm:column name=\"ID\"/>" +
        "\n      </orm:id>" +
        "\n      <orm:basic attribute-type=\"java.lang.String\" name=\"name\">" +
        "\n        <orm:column name=\"NAME\"/>" +
        "\n      </orm:basic>" +
        "\n      <orm:basic attribute-type=\"java.math.BigInteger\" name=\"deptno\">" +
        "\n        <orm:column name=\"DEPTNO\"/>" +
        "\n      </orm:basic>" +
        "\n      <orm:basic attribute-type=\"java.lang.String\" name=\"deptname\">" +
        "\n        <orm:column name=\"DEPTNAME\"/>" +
        "\n      </orm:basic>" +
        "\n      <orm:basic attribute-type=\"java.lang.Character\" name=\"section\">" +
        "\n        <orm:column name=\"SECTION\"/>" +
        "\n      </orm:basic>" +
        "\n        <orm:basic attribute-type=\"java.lang.Float\" name=\"sal\">" +
        "\n        <orm:column name=\"SAL\"/>" +
        "\n      </orm:basic>" +
        "\n      <orm:basic attribute-type=\"java.lang.Float\" name=\"commission\">" +
        "\n        <orm:column name=\"COMMISSION\"/>" +
        "\n      </orm:basic>" +
        "\n      <orm:basic attribute-type=\"java.lang.Float\" name=\"sales\">" +
        "\n        <orm:column name=\"SALES\"/>" +
        "\n      </orm:basic>" +
        "\n      <orm:basic attribute-type=\"[B\" name=\"binid\">" +
        "\n        <orm:column name=\"BINID\"/>" +
        "\n      </orm:basic>" +
        "\n      <orm:basic attribute-type=\"[B\" name=\"b\">" +
        "\n        <orm:column name=\"B\"/>" +
        "\n      </orm:basic>" +
        "\n      <orm:basic attribute-type=\"[Ljava.lang.Character;\" name=\"c\">" +
        "\n        <orm:column name=\"C\"/>" +
        "\n      </orm:basic>" +
        "\n      <orm:basic attribute-type=\"[B\" name=\"r\">" +
        "\n        <orm:column name=\"R\"/>" +
        "\n      </orm:basic>" +
        "\n    </orm:attributes>" +
        "\n  </orm:entity>" +
        "\n  <orm:entity access=\"VIRTUAL\" class=\"tabletype.Tabletype2\">" +
        "\n    <orm:table name=\"TABLETYPE2\"/>" +
        "\n    <orm:named-native-query name=\"findByPrimaryKey_Tabletype2Type\" result-class=\"tabletype.Tabletype2\">" +
        "\n      <orm:query>SELECT * FROM TABLETYPE2 WHERE (ID = ?1)</orm:query>" +
        "\n    </orm:named-native-query>" +
        "\n    <orm:named-native-query name=\"findAll_Tabletype2Type\" result-class=\"tabletype.Tabletype2\">" +
        "\n      <orm:query>SELECT * FROM TABLETYPE2</orm:query>" +
        "\n    </orm:named-native-query>" +
        "\n    <orm:named-native-query name=\"delete_Tabletype2Type\">" +
        "\n      <orm:query>DELETE FROM TABLETYPE2 WHERE (ID = ?1)</orm:query>" +
        "\n    </orm:named-native-query>" +
        "\n    <orm:named-native-query name=\"create_Tabletype2Type\">" +
        "\n      <orm:query>INSERT INTO TABLETYPE2 (ID, LR) VALUES (?1, ?2)</orm:query>" +
        "\n    </orm:named-native-query>" +
        "\n    <orm:named-native-query name=\"update_Tabletype2Type\">" +
        "\n      <orm:query>UPDATE TABLETYPE2 SET LR = ?2 WHERE (ID = ?1)</orm:query>" +
        "\n    </orm:named-native-query>" +
        "\n    <orm:attributes>" +
        "\n      <orm:id attribute-type=\"java.math.BigInteger\" name=\"id\">" +
        "\n        <orm:column name=\"ID\"/>" +
        "\n      </orm:id>" +
        "\n      <orm:basic attribute-type=\"[B\" name=\"lr\">" +
        "\n        <orm:column name=\"LR\"/>" +
        "\n      </orm:basic>" +
        "\n    </orm:attributes>" +
        "\n  </orm:entity>" +
        "\n</orm:entity-mappings>";

    protected static final String OX_PROJECT =
        "<?xml version = '1.0' encoding = 'UTF-8'?>" +
        "<xml-bindings-list xmlns=\"http://www.eclipse.org/eclipselink/xsds/persistence/oxm\">" +
           "<xml-bindings package-name=\"tabletype\">" +
              "<xml-schema namespace=\"urn:tabletype\" element-form-default=\"QUALIFIED\"/>" +
              "<java-types>" +
                 "<java-type xml-accessor-type=\"FIELD\" name=\"Tabletype\">" +
                    "<xml-type namespace=\"urn:tabletype\" name=\"tabletypeType\"/>" +
                    "<xml-root-element namespace=\"urn:tabletype\" name=\"tabletypeType\"/>" +
                    "<java-attributes>" +
                       "<xml-element xml-path=\"id/text()\" type=\"java.math.BigInteger\" required=\"true\" java-attribute=\"id\">" +
                          "<xml-schema-type name=\"decimal\"/>" +
                       "</xml-element>" +
                       "<xml-element xml-path=\"name/text()\" type=\"java.lang.String\" java-attribute=\"name\">" +
                          "<xml-null-policy is-set-performed-for-absent-node=\"true\" null-representation-for-xml=\"XSI_NIL\" empty-node-represents-null=\"false\" xsi-nil-represents-null=\"true\"/>" +
                          "<xml-schema-type name=\"string\"/>" +
                       "</xml-element>" +
                       "<xml-element xml-path=\"deptno/text()\" type=\"java.math.BigInteger\" java-attribute=\"deptno\">" +
                          "<xml-null-policy is-set-performed-for-absent-node=\"true\" null-representation-for-xml=\"XSI_NIL\" empty-node-represents-null=\"false\" xsi-nil-represents-null=\"true\"/>" +
                          "<xml-schema-type name=\"decimal\"/>" +
                       "</xml-element>" +
                       "<xml-element xml-path=\"deptname/text()\" type=\"java.lang.String\" java-attribute=\"deptname\">" +
                          "<xml-null-policy is-set-performed-for-absent-node=\"true\" null-representation-for-xml=\"XSI_NIL\" empty-node-represents-null=\"false\" xsi-nil-represents-null=\"true\"/>" +
                          "<xml-schema-type name=\"string\"/>" +
                       "</xml-element>" +
                       "<xml-element xml-path=\"section/text()\" type=\"java.lang.Character\" java-attribute=\"section\">" +
                          "<xml-null-policy is-set-performed-for-absent-node=\"true\" null-representation-for-xml=\"XSI_NIL\" empty-node-represents-null=\"false\" xsi-nil-represents-null=\"true\"/>" +
                          "<xml-schema-type name=\"string\"/>" +
                       "</xml-element>" +
                       "<xml-element xml-path=\"sal/text()\" type=\"java.lang.Float\" java-attribute=\"sal\">" +
                          "<xml-null-policy is-set-performed-for-absent-node=\"true\" null-representation-for-xml=\"XSI_NIL\" empty-node-represents-null=\"false\" xsi-nil-represents-null=\"true\"/>" +
                          "<xml-schema-type name=\"double\"/>" +
                       "</xml-element>" +
                       "<xml-element xml-path=\"commission/text()\" type=\"java.lang.Float\" java-attribute=\"commission\">" +
                          "<xml-null-policy is-set-performed-for-absent-node=\"true\" null-representation-for-xml=\"XSI_NIL\" empty-node-represents-null=\"false\" xsi-nil-represents-null=\"true\"/>" +
                          "<xml-schema-type name=\"double\"/>" +
                       "</xml-element>" +
                       "<xml-element xml-path=\"sales/text()\" type=\"java.lang.Float\" java-attribute=\"sales\">" +
                          "<xml-null-policy is-set-performed-for-absent-node=\"true\" null-representation-for-xml=\"XSI_NIL\" empty-node-represents-null=\"false\" xsi-nil-represents-null=\"true\"/>" +
                          "<xml-schema-type name=\"double\"/>" +
                       "</xml-element>" +
                       "<xml-element xml-path=\"binid\" xml-mime-type=\"application/octet-stream\" xml-inline-binary-data=\"true\" type=\"[B\" java-attribute=\"binid\">" +
                          "<xml-null-policy is-set-performed-for-absent-node=\"true\" null-representation-for-xml=\"XSI_NIL\" empty-node-represents-null=\"false\" xsi-nil-represents-null=\"true\"/>" +
                          "<xml-schema-type name=\"base64Binary\"/>" +
                       "</xml-element>" +
                       "<xml-element xml-path=\"b\" xml-mime-type=\"application/octet-stream\" xml-inline-binary-data=\"true\" type=\"[B\" java-attribute=\"b\">" +
                          "<xml-null-policy is-set-performed-for-absent-node=\"true\" null-representation-for-xml=\"XSI_NIL\" empty-node-represents-null=\"false\" xsi-nil-represents-null=\"true\"/>" +
                          "<xml-schema-type name=\"base64Binary\"/>" +
                       "</xml-element>" +
                       "<xml-element xml-path=\"c/text()\" type=\"java.lang.String\" java-attribute=\"c\">" +
                          "<xml-null-policy is-set-performed-for-absent-node=\"true\" null-representation-for-xml=\"XSI_NIL\" empty-node-represents-null=\"false\" xsi-nil-represents-null=\"true\"/>" +
                          "<xml-schema-type name=\"string\"/>" +
                       "</xml-element>" +
                       "<xml-element xml-path=\"r\" xml-mime-type=\"application/octet-stream\" xml-inline-binary-data=\"true\" type=\"[B\" java-attribute=\"r\">" +
                          "<xml-null-policy is-set-performed-for-absent-node=\"true\" null-representation-for-xml=\"XSI_NIL\" empty-node-represents-null=\"false\" xsi-nil-represents-null=\"true\"/>" +
                          "<xml-schema-type name=\"base64Binary\"/>" +
                       "</xml-element>" +
                    "</java-attributes>" +
                 "</java-type>" +
                 "<java-type xml-accessor-type=\"FIELD\" name=\"Tabletype2\">" +
                    "<xml-type namespace=\"urn:tabletype\" name=\"tabletype2Type\"/>" +
                    "<xml-root-element namespace=\"urn:tabletype\" name=\"tabletype2Type\"/>" +
                    "<java-attributes>" +
                       "<xml-element xml-path=\"id/text()\" type=\"java.math.BigInteger\" required=\"true\" java-attribute=\"id\">" +
                          "<xml-schema-type name=\"decimal\"/>" +
                       "</xml-element>" +
                       "<xml-element xml-path=\"lr\" xml-mime-type=\"application/octet-stream\" xml-inline-binary-data=\"true\" type=\"[B\" java-attribute=\"lr\">" +
                          "<xml-null-policy is-set-performed-for-absent-node=\"true\" null-representation-for-xml=\"XSI_NIL\" empty-node-represents-null=\"false\" xsi-nil-represents-null=\"true\"/>" +
                          "<xml-schema-type name=\"base64Binary\"/>" +
                       "</xml-element>" +
                    "</java-attributes>" +
                 "</java-type>" +
              "</java-types>" +
           "</xml-bindings>" +
        "</xml-bindings-list>";

    protected static final String ONE_PERSON_XML =
        REGULAR_XML_HEADER +
        "<tabletypeType xmlns=\"urn:tabletype\">" +
          "<id>1</id>" +
          "<name>mike</name>" +
          "<deptno>99</deptno>" +
          "<deptname>sales</deptname>" +
          "<section>a</section>" +
          "<sal>100000.8</sal>" +
          "<commission>450.8</commission>" +
          "<sales>10000.8</sales>" +
          "<binid>EBA=</binid>" +
          "<b>AQEBAQEBAQEBAQEBAQEB</b>" +
          "<c>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa</c>" +
          "<r>AQEB</r>" +
        "</tabletypeType>";

    protected static final String UPDATED_PERSON_XML =
        REGULAR_XML_HEADER +
        "<tabletypeType xmlns=\"urn:tabletype\">" +
          "<id>1</id>" +
          "<name>mike</name>" +
          "<deptno>99</deptno>" +
          "<deptname>sales</deptname>" +
          "<section>a</section>" +
          "<sal>112000.99</sal>" +
          "<commission>450.8</commission>" +
          "<sales>10000.8</sales>" +
          "<binid>EBA=</binid>" +
          "<b>AQEBAQEBAQEBAQEBAQEB</b>" +
          "<c>ababababababababababababababab</c>" +
          "<r>AQEB</r>" +
        "</tabletypeType>";


    // TODO: use this 'new person' once round trip binary is sorted out
    /*
    protected static final String NEW_PERSON_XML =
        REGULAR_XML_HEADER +
        "<tabletypeType xmlns=\"urn:tabletype\">" +
          "<id>99</id>" +
          "<name>Joe Black</name>" +
          "<deptno>22</deptno>" +
          "<deptname>Janitor</deptname>" +
          "<section>q</section>" +
          "<sal>19000.0</sal>" +
          "<commission>333.0</commission>" +
          "<sales>1.0</sales>" +
          "<binid>rO0ABXVyAAJbQqzzF/gGCFTgAgAAeHAAAAACEAE=</binid>" +
          "<b>rO0ABXVyAAJbQqzzF/gGCFTgAgAAeHAAAAAPEREBAQEBAQEBAQEBAQEB</b>" +
          "<c>adadadadadadadadadadadadadadad</c>" +
          "<r>rO0ABXVyAAJbQqzzF/gGCFTgAgAAeHAAAAADEQEB</r>" +
          "<lr>rO0ABXVyAAJbQqzzF/gGCFTgAgAAeHAAAAAJERERAQEBAQEB</lr>" +
        "</tabletypeType>";
    */

    protected static final String NEW_PERSON_XML =
        REGULAR_XML_HEADER +
        "<tabletypeType xmlns=\"urn:tabletype\">" +
            "<id>99</id>" +
            "<name>Joe Black</name>" +
            "<deptno>22</deptno>" +
            "<deptname>Janitor</deptname>" +
            "<section>q</section>" +
            "<sal>19000.0</sal>" +
            "<commission>333.0</commission>" +
            "<sales>1.0</sales>" +
            "<binid xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:nil=\"true\"/>" +
            "<b xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:nil=\"true\"/>" +
            "<c>adadadadadadadadadadadadadadad</c>" +
            "<r xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:nil=\"true\"/>" +
        "</tabletypeType>";

    protected static final String NEW_PERSON2_XML =
        REGULAR_XML_HEADER +
        "<tabletypeType xmlns=\"urn:tabletype\">" +
            "<id>99</id>" +
            "<name>Joe Black</name>" +
            "<deptno>22</deptno>" +
            "<deptname>Janitor</deptname>" +
            "<section>q</section>" +
            "<sal>19000.0</sal>" +
            "<commission>333.0</commission>" +
            "<sales>1.0</sales>" +
            "<binid>ERE=</binid>" +
            "<b>BAQEBAQEBAQEBAQEBAQE</b>" +
            "<c>dddddddddddddddddddddddddddddd</c>" +
            "<r>BAQE</r>" +
        "</tabletypeType>";

    protected static final String ALL_PEOPLE_XML =
        REGULAR_XML_HEADER +
        "<tabletype-collection>" +
            "<tabletypeType xmlns=\"urn:tabletype\">" +
                "<id>1</id>" +
                "<name>mike</name>" +
                "<deptno>99</deptno>" +
                "<deptname>sales</deptname>" +
                "<section>a</section>" +
                "<sal>100000.8</sal>" +
                "<commission>450.8</commission>" +
                "<sales>10000.8</sales>" +
                "<binid>EBA=</binid>" +
                "<b>AQEBAQEBAQEBAQEBAQEB</b>" +
                "<c>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa</c>" +
                "<r>AQEB</r>" +
            "</tabletypeType>" +
            "<tabletypeType xmlns=\"urn:tabletype\">" +
                "<id>2</id>" +
                "<name>merrick</name>" +
                "<deptno>98</deptno>" +
                "<deptname>delivery</deptname>" +
                "<section>f</section>" +
                "<sal>20000.0</sal>" +
                "<commission>0.0</commission>" +
                "<sales>0.0</sales>" +
                "<binid>AQE=</binid>" +
                "<b>AgICAgICAgICAgICAgIC</b>" +
                "<c>bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb</c>" +
                "<r>AgIC</r>" +
            "</tabletypeType>" +
            "<tabletypeType xmlns=\"urn:tabletype\">" +
                "<id>3</id>" +
                "<name>rick</name>" +
                "<deptno>99</deptno>" +
                "<deptname>sales</deptname>" +
                "<section>b</section>" +
                "<sal>98000.2</sal>" +
                "<commission>150.2</commission>" +
                "<sales>2000.2</sales>" +
                "<binid>ERA=</binid>" +
                "<b>AwMDAwMDAwMDAwMDAwMD</b>" +
                "<c>cccccccccccccccccccccccccccccc</c>" +
                "<r>AwMD</r>" +
            "</tabletypeType>" +
        "</tabletype-collection>";

    protected static final String LONG_RAW_XML =
        REGULAR_XML_HEADER +
        "<tabletype2-collection>" +
           "<tabletype2Type xmlns=\"urn:tabletype\">" +
              "<id>66</id>" +
              "<lr>AQEBAQEBAQEB</lr>" +
           "</tabletype2Type>" +
           "<tabletype2Type xmlns=\"urn:tabletype\">" +
              "<id>67</id>" +
              "<lr>AgICAgICAgIC</lr>" +
           "</tabletype2Type>" +
           "<tabletype2Type xmlns=\"urn:tabletype\">" +
              "<id>68</id>" +
              "<lr>AwMDAwMDAwMD</lr>" +
           "</tabletype2Type>" +
        "</tabletype2-collection>";
}
