blob: 742552226a4fa90b49639f250b8ffa872ffe83ad [file] [log] [blame]
/*
* Copyright (c) 2011, 2020 Oracle and/or its affiliates. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0,
* or the Eclipse Distribution License v. 1.0 which is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
*/
// Contributors:
// David McCann - June 2013 - Initial Implementation
package dbws.testing.namingtransformer;
//javase imports
import java.io.StringReader;
import java.lang.reflect.Field;
import java.sql.SQLException;
import java.sql.Statement;
import org.w3c.dom.Document;
//java eXtension imports
import javax.wsdl.WSDLException;
//JUnit4 imports
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
//EclipseLink imports
import org.eclipse.persistence.internal.descriptors.TransformerBasedFieldTransformation;
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.mappings.transformers.ConstantTransformer;
import org.eclipse.persistence.oxm.XMLMarshaller;
import org.eclipse.persistence.oxm.mappings.XMLTransformationMapping;
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.DefaultNamingConventionTransformer;
import org.eclipse.persistence.tools.dbws.oracle.OracleHelper;
//test imports
import dbws.testing.DBWSTestSuite;
/**
* Test use of a custom naming convention transformer.
*
*/
public class NamingTransformerTestSuite 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_MYTYPEX =
"CREATE OR REPLACE TYPE MYTYPE_X AS OBJECT (" +
"\nid NUMBER," +
"\nname VARCHAR2(30)" +
"\n)";
static final String CREATE_GETMYTYPEX_PROC =
"CREATE OR REPLACE PROCEDURE GetMyTypeX(RESULT OUT MYTYPE_X) AS" +
"\nBEGIN" +
"\nRESULT := MYTYPE_X(66, 'Steve French');" +
"\nEND GetMyTypeX;";
static final String DROP_GETMYTYPEX_PROC =
"DROP PROCEDURE GetMyTypeX";
static final String DROP_MYTYPEX =
"DROP TYPE MYTYPE_X";
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);
try {
Statement stmt = conn.createStatement();
for (int i = 0; i < POPULATE_TABLETYPE_TABLE.length; i++) {
stmt.addBatch(POPULATE_TABLETYPE_TABLE[i]);
}
stmt.executeBatch();
}
catch (SQLException e) {
//e.printStackTrace();
}
runDdl(conn, CREATE_MYTYPEX, ddlDebug);
runDdl(conn, CREATE_GETMYTYPEX_PROC, 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\">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\" " +
"/>" +
"<procedure " +
"name=\"GetMyTypeXTest\" " +
"catalogPattern=\"TOPLEVEL\" " +
"procedurePattern=\"GetMyTypeX\" " +
"isAdvancedJDBC=\"true\" " +
"/>" +
"</dbws-builder>";
builder = new DBWSBuilder();
builder.setTopNamingConventionTransformer(new DBWSNamingConventionTransformer());
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_GETMYTYPEX_PROC, ddlDebug);
runDdl(conn, DROP_MYTYPEX, ddlDebug);
}
}
@Test
public void testNamingConventionTransformer() throws WSDLException {
Invocation invocation = new Invocation("findByPrimaryKey_TabletypeType");
invocation.setParameter("id", 3);
Operation op = xrService.getOperation(invocation.getName());
Object result = op.invoke(xrService, invocation);
assertNotNull("result is null", result);
Document doc = xmlPlatform.createDocument();
XMLMarshaller marshaller = xrService.getXMLContext().createMarshaller();
marshaller.marshal(result, doc);
removeEmptyTextNodes(doc);
Document controlDoc = xmlParser.parse(new StringReader(ANOTHER_PERSON_XML));
removeEmptyTextNodes(controlDoc);
assertTrue("Control document not same as instance document. Expected:\n" + documentToString(controlDoc) + "\nActual:\n" + documentToString(doc), comparer.isNodeEqual(controlDoc, doc));
}
public static final String ANOTHER_PERSON_XML =
REGULAR_XML_HEADER +
"<TABLETYPExTYPE xmlns=\"urn:tabletype\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" id=\"3\">" +
"<name>rick</name>" +
"</TABLETYPExTYPE>";
@Test
public void testTransformerOnObject() throws WSDLException {
Invocation invocation = new Invocation("GetMyTypeXTest");
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(MYTYPEX_XML));
assertTrue("Control document not same as instance document. Expected:\n" + documentToString(controlDoc) + "\nActual:\n" + documentToString(doc), comparer.isNodeEqual(controlDoc, doc));
}
public static final String MYTYPEX_XML =
REGULAR_XML_HEADER +
"<MYTYPE_XxTYPE xmlns=\"urn:tabletype\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" id=\"66\">" +
"<name>Steve French</name>" +
"</MYTYPE_XxTYPE>";
/**
* Inner class used for testing NamingConventionTransformer
*
*/
static class DBWSNamingConventionTransformer extends DefaultNamingConventionTransformer {
@Override
public String generateSchemaAlias(String tableName) {
return super.generateSchemaAlias(tableName +"xTYPE");
}
@Override
public String generateElementAlias(String originalElementName) {
return super.generateElementAlias(originalElementName.toLowerCase());
}
@Override
public ElementStyle styleForElement(String elementName) {
if ("id".equalsIgnoreCase(elementName)) {
return ElementStyle.ATTRIBUTE;
}
if ("deptno".equalsIgnoreCase(elementName) ||
"deptname".equalsIgnoreCase(elementName) ||
"section".equalsIgnoreCase(elementName) ||
"sal".equalsIgnoreCase(elementName) ||
"commission".equalsIgnoreCase(elementName) ||
"sales".equalsIgnoreCase(elementName) ||
"binid".equalsIgnoreCase(elementName) ||
"b".equalsIgnoreCase(elementName) ||
"c".equalsIgnoreCase(elementName) ||
"r".equalsIgnoreCase(elementName)) {
return ElementStyle.NONE;
}
return ElementStyle.ELEMENT;
}
}
@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));
}
protected static final String XSD =
"<?xml version = \"1.0\" encoding = \"UTF-8\"?>" +
"<xsd:schema xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" targetNamespace=\"urn:tabletype\" xmlns=\"urn:tabletype\" elementFormDefault=\"qualified\">" +
" <xsd:complexType name=\"MYTYPE_XxTYPE\">" +
" <xsd:sequence>" +
" <xsd:element name=\"name\" type=\"xsd:string\" minOccurs=\"0\" nillable=\"true\"/>" +
" </xsd:sequence>" +
" <xsd:attribute name=\"id\" type=\"xsd:decimal\"/>" +
" </xsd:complexType>" +
" <xsd:complexType name=\"TABLETYPExTYPE\">" +
" <xsd:sequence>" +
" <xsd:element name=\"name\" type=\"xsd:string\" minOccurs=\"0\" nillable=\"true\"/>" +
" </xsd:sequence>" +
" <xsd:attribute name=\"id\" type=\"xsd:decimal\" use=\"required\"/>" +
" </xsd:complexType>" +
" <xsd:element name=\"MYTYPE_XxTYPE\" type=\"MYTYPE_XxTYPE\"/>" +
" <xsd:element name=\"TABLETYPExTYPE\" type=\"TABLETYPExTYPE\"/>" +
"</xsd:schema>";
@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));
}
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=\"findAll_TabletypeTypeRequestType\"/>\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:TABLETYPExTYPE\"/>\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:TABLETYPExTYPE\"/>\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:TABLETYPExTYPE\"/>\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:TABLETYPExTYPE\"/>\n" +
"</xsd:sequence>\n" +
"</xsd:complexType>\n" +
"</xsd:element>\n" +
"</xsd:sequence>\n" +
"</xsd:complexType>\n" +
"<xsd:complexType name=\"GetMyTypeXTestResponseType\">\n" +
"<xsd:sequence>\n" +
"<xsd:element name=\"result\">\n" +
"<xsd:complexType>\n" +
"<xsd:sequence>\n" +
"<xsd:element ref=\"ns1:MYTYPE_XxTYPE\" minOccurs=\"0\"/>\n" +
"</xsd:sequence>\n" +
"</xsd:complexType>\n" +
"</xsd:element>\n" +
"</xsd:sequence>\n" +
"</xsd:complexType>\n" +
"<xsd:complexType name=\"GetMyTypeXTestRequestType\"/>\n" +
"<xsd:element name=\"update_TabletypeType\" type=\"tns:update_TabletypeTypeRequestType\"/>\n" +
"<xsd:element name=\"findAll_TabletypeTypeResponse\" type=\"tns:findAll_TabletypeTypeResponseType\"/>\n" +
"<xsd:element name=\"findByPrimaryKey_TabletypeType\" type=\"tns:findByPrimaryKey_TabletypeTypeRequestType\"/>\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=\"EmptyResponse\">\n" +
"<xsd:complexType/>\n" +
"</xsd:element>\n" +
"<xsd:element name=\"delete_TabletypeType\" type=\"tns:delete_TabletypeTypeRequestType\"/>\n" +
"<xsd:element name=\"GetMyTypeXTestResponse\" type=\"tns:GetMyTypeXTestResponseType\"/>\n" +
"<xsd:element name=\"GetMyTypeXTest\" type=\"tns:GetMyTypeXTestRequestType\"/>\n" +
"</xsd:schema>\n" +
"</wsdl:types>\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_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=\"EmptyResponse\">\n" +
"<wsdl:part name=\"emptyResponse\" element=\"tns:EmptyResponse\">\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:message name=\"GetMyTypeXTestRequest\">\n" +
"<wsdl:part name=\"GetMyTypeXTestRequest\" element=\"tns:GetMyTypeXTest\"/>\n" +
"</wsdl:message>\n" +
"<wsdl:message name=\"GetMyTypeXTestResponse\">\n" +
"<wsdl:part name=\"GetMyTypeXTestResponse\" element=\"tns:GetMyTypeXTestResponse\"/>\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=\"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=\"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=\"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:operation name=\"GetMyTypeXTest\">\n" +
"<wsdl:input message=\"tns:GetMyTypeXTestRequest\"/>\n" +
"<wsdl:output message=\"tns:GetMyTypeXTestResponse\"/>\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=\"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=\"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=\"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:operation name=\"GetMyTypeXTest\">\n" +
"<soap:operation soapAction=\"urn:tabletypeService:GetMyTypeXTest\"/>\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: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";
}