You are viewing a plain text version of this content. The canonical link for it is here.
Posted to axis-cvs@ws.apache.org by ia...@apache.org on 2004/08/31 19:26:41 UTC
cvs commit: ws-axis/contrib/ews/src/org/apache/geronimo/ews/jaxrpcmapping J2eeTestCaseWriter.java
ias 2004/08/31 10:26:41
Modified: contrib/ews/src/org/apache/geronimo/ews/jaxrpcmapping
J2eeTestCaseWriter.java
Log:
Fix - Utils.holder signature update.
Revision Changes Path
1.4 +312 -312 ws-axis/contrib/ews/src/org/apache/geronimo/ews/jaxrpcmapping/J2eeTestCaseWriter.java
Index: J2eeTestCaseWriter.java
===================================================================
RCS file: /home/cvs/ws-axis/contrib/ews/src/org/apache/geronimo/ews/jaxrpcmapping/J2eeTestCaseWriter.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- J2eeTestCaseWriter.java 11 Aug 2004 09:16:05 -0000 1.3
+++ J2eeTestCaseWriter.java 31 Aug 2004 17:26:41 -0000 1.4
@@ -1,312 +1,312 @@
-/*
- * The Apache Software License, Version 1.1
- *
- *
- * Copyright (c) 2001-2003 The Apache Software Foundation. All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- * if any, must include the following acknowledgment:
- * "This product includes software developed by the
- * Apache Software Foundation (http://www.apache.org/)."
- * Alternately, this acknowledgment may appear in the software itself,
- * if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Axis" and "Apache Software Foundation" must
- * not be used to endorse or promote products derived from this
- * software without prior written permission. For written
- * permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- * nor may "Apache" appear in their name, without prior written
- * permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation. For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
-package org.apache.geronimo.ews.jaxrpcmapping;
-
-import org.apache.axis.utils.JavaUtils;
-import org.apache.axis.utils.Messages;
-import org.apache.axis.wsdl.symbolTable.BindingEntry;
-import org.apache.axis.wsdl.symbolTable.Parameter;
-import org.apache.axis.wsdl.symbolTable.Parameters;
-import org.apache.axis.wsdl.symbolTable.ServiceEntry;
-import org.apache.axis.wsdl.symbolTable.SymbolTable;
-import org.apache.axis.wsdl.symbolTable.TypeEntry;
-import org.apache.axis.wsdl.toJava.JavaClassWriter;
-import org.apache.axis.wsdl.toJava.Utils;
-
-import javax.wsdl.Binding;
-import javax.wsdl.Fault;
-import javax.wsdl.Operation;
-import javax.wsdl.OperationType;
-import javax.wsdl.Port;
-import javax.wsdl.PortType;
-import javax.xml.rpc.holders.BooleanHolder;
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.util.Iterator;
-import java.util.Map;
-
-/**
- * This is Wsdl2java's TestCase writer. It writes the <serviceName>TestCase.java file.
- *
- * @author Ias (iasandcb@tmax.co.kr)
- * @deprecated no more used by J2eeGeneratorFactory
- */
-public class J2eeTestCaseWriter extends JavaClassWriter {
- private ServiceEntry sEntry;
- private SymbolTable symbolTable;
-
- /**
- * Constructor.
- */
- protected J2eeTestCaseWriter(J2eeEmitter emitter,
- ServiceEntry sEntry,
- SymbolTable symbolTable) {
- super(emitter, sEntry.getName() + "TestCase", "testCase");
- this.sEntry = sEntry;
- this.symbolTable = symbolTable;
- } // ctor
-
- /**
- * Returns "extends junit.framework.TestCase ".
- */
- protected String getExtendsText() {
- return "extends junit.framework.TestCase ";
- } // getExtendsText
-
- /**
- * Write the body of the TestCase file.
- */
- protected void writeFileBody(PrintWriter pw) throws IOException {
- // Write the constructor
- pw.print(" public ");
- pw.print(getClassName());
- pw.println("(java.lang.String name) {");
- pw.println(" super(name);");
- pw.println(" }");
-
- // get ports
- Map portMap = sEntry.getService().getPorts();
- Iterator portIterator = portMap.values().iterator();
-
- while (portIterator.hasNext()) {
- Port p = (Port) portIterator.next();
- Binding binding = p.getBinding();
- BindingEntry bEntry =
- symbolTable.getBindingEntry(binding.getQName());
-
- // If this isn't an SOAP binding, skip it
- if (bEntry.getBindingType() != BindingEntry.TYPE_SOAP) {
- continue;
- }
-
- // JSR 101 indicates that the name of the port used
- // in the java code is the name of the wsdl:port. It
- // does not indicate what should occur if the
- // wsdl:port name is not a java identifier. The
- // TCK depends on the case-sensitivity being preserved,
- // and the interop tests have port names that are not
- // valid java identifiers. Thus the following code.
- String portName = p.getName();
- if (!JavaUtils.isJavaId(portName)) {
- portName = Utils.xmlNameToJavaClass(portName);
- }
-
- PortType portType = binding.getPortType();
-
- writeComment(pw, p.getDocumentationElement(), true);
- writeServiceTestCode(pw, portName, portType, bEntry);
- }
- } // writeFileBody
-
- // Methods may be overloaded. If we just grab the method name
- // for the test method names, we could end up with duplicates.
- // The quick-and-easy solution is to have a test counter so that
- // each test method has a number.
- private int counter = 1;
-
- private final void writeServiceTestCode(PrintWriter pw,
- String portName, PortType portType,
- BindingEntry bEntry) throws IOException {
- Iterator ops = portType.getOperations().iterator();
- while (ops.hasNext()) {
- Operation op = (Operation) ops.next();
- OperationType type = op.getStyle();
- Parameters params = bEntry.getParameters(op);
- // did we emit a constructor that throws?
- BooleanHolder bThrow = new BooleanHolder(false);
-
- // These operation types are not supported. The signature
- // will be a string stating that fact.
- if (type == OperationType.NOTIFICATION
- || type == OperationType.SOLICIT_RESPONSE) {
- pw.println(" " + params.signature);
- continue;
- }
-
- String javaOpName = Utils.xmlNameToJavaClass(op.getName());
- String testMethodName = "test" + counter++ + portName + javaOpName;
- pw.println(" public void " + testMethodName + "() throws Exception {");
-
- String bindingType = bEntry.getName() + "Stub";
- writeBindingAssignment(pw, bindingType, portName);
-
- pw.println(" // Test operation");
- String indent = "";
- Map faultMap = op.getFaults();
- if (faultMap != null && faultMap.size() > 0) {
- // we are going to catch fault Exceptions
- pw.println(" try {");
- indent = " ";
- }
- if (params.returnParam != null) {
- TypeEntry returnType = params.returnParam.getType();
- pw.print(" " + indent);
- pw.print(Utils.getParameterTypeName(params.returnParam));
- pw.print(" value = ");
-
- if (params.returnParam.getMIMEInfo() == null &&
- Utils.isPrimitiveType(returnType)) {
- if ("boolean".equals(returnType.getName())) {
- pw.println("false;");
- } else {
- pw.println("-3;");
- }
- } else {
- pw.println("null;");
- }
- }
-
- pw.print(" " + indent);
-
- if (params.returnParam != null) {
- pw.print("value = ");
- }
-
- pw.print("binding.");
- pw.print(Utils.xmlNameToJava(op.getName()));
- pw.print("(");
-
- Iterator iparam = params.list.iterator();
- boolean isFirst = true;
-
- while (iparam.hasNext()) {
- if (isFirst) {
- isFirst = false;
- } else {
- pw.print(", ");
- }
-
- Parameter param = (Parameter) iparam.next();
- String suffix = "";
-
- // if we have an out or in/out, we are passing in a holder
- if (param.getMode() != Parameter.IN) {
- pw.print("new " + Utils.holder(param.getMIMEInfo(), param.getType(), emitter)
- + "(");
- suffix = ")";
- }
-
- // if we have an in or in/out, write the constructor
- if (param.getMode() != Parameter.OUT) {
- String constructorString = Utils.getConstructorForParam(param, symbolTable, bThrow);
- pw.print(constructorString);
- }
- pw.print(suffix);
- }
-
- pw.println(");");
-
- if (faultMap != null && faultMap.size() > 0) {
- pw.println(" }");
- }
-
- if (faultMap != null) {
- Iterator i = faultMap.values().iterator();
- int count = 0;
-
- while (i.hasNext()) {
- count++;
- Fault f = (Fault) i.next();
- pw.print(" catch (");
- pw.print(Utils.getFullExceptionName(f.getMessage(), symbolTable));
- pw.println(" e" + count + ") {");
- pw.print(" ");
- pw.println("throw new junit.framework.AssertionFailedError(\"" + f.getName() + " Exception caught: \" + e" + count + ");");
- pw.println(" }");
- }
- }
-
- pw.println(" " + indent + "// TBD - validate results");
-
- /*
- pw.println(" catch (java.rmi.RemoteException re) {");
- pw.print(" ");
- pw.println("throw new junit.framework.AssertionFailedError(\"Remote Exception caught: \" + re);");
- pw.println(" }");
- if (bThrow.value) {
- pw.println(" catch (Exception e) {");
- pw.println(" // Unsigned constructors can throw - ignore");
- pw.println(" }");
- }
- */
- pw.println(" }");
- pw.println();
- }
- } // writeServiceTestCode
-
- public final void writeBindingAssignment(PrintWriter pw,
- String bindingType, String portName) throws IOException {
- pw.println(" " + bindingType + " binding;");
- pw.println(" try {");
- pw.println(" binding = (" + bindingType + ")");
- pw.print(" new " + sEntry.getName());
- pw.println("Locator" + "().get" + portName + "();");
- pw.println(" }");
- pw.println(" catch (" + javax.xml.rpc.ServiceException.class.getName() + " jre) {");
- pw.println(" if(jre.getLinkedCause()!=null)");
- pw.println(" jre.getLinkedCause().printStackTrace();");
- pw.println(" throw new junit.framework.AssertionFailedError(\"JAX-RPC ServiceException caught: \" + jre);");
- pw.println(" }");
-
- pw.println(" assertNotNull(\"" +
- Messages.getMessage("null00", "binding") +
- "\", binding);");
- pw.println();
- pw.println(" // Time out after a minute");
- pw.println(" binding.setTimeout(60000);");
- pw.println();
- } // writeBindingAssignment
-
-}
+/*
+ * The Apache Software License, Version 1.1
+ *
+ *
+ * Copyright (c) 2001-2003 The Apache Software Foundation. All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * 3. The end-user documentation included with the redistribution,
+ * if any, must include the following acknowledgment:
+ * "This product includes software developed by the
+ * Apache Software Foundation (http://www.apache.org/)."
+ * Alternately, this acknowledgment may appear in the software itself,
+ * if and wherever such third-party acknowledgments normally appear.
+ *
+ * 4. The names "Axis" and "Apache Software Foundation" must
+ * not be used to endorse or promote products derived from this
+ * software without prior written permission. For written
+ * permission, please contact apache@apache.org.
+ *
+ * 5. Products derived from this software may not be called "Apache",
+ * nor may "Apache" appear in their name, without prior written
+ * permission of the Apache Software Foundation.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ * ====================================================================
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals on behalf of the Apache Software Foundation. For more
+ * information on the Apache Software Foundation, please see
+ * <http://www.apache.org/>.
+ */
+package org.apache.geronimo.ews.jaxrpcmapping;
+
+import org.apache.axis.utils.JavaUtils;
+import org.apache.axis.utils.Messages;
+import org.apache.axis.wsdl.symbolTable.BindingEntry;
+import org.apache.axis.wsdl.symbolTable.Parameter;
+import org.apache.axis.wsdl.symbolTable.Parameters;
+import org.apache.axis.wsdl.symbolTable.ServiceEntry;
+import org.apache.axis.wsdl.symbolTable.SymbolTable;
+import org.apache.axis.wsdl.symbolTable.TypeEntry;
+import org.apache.axis.wsdl.toJava.JavaClassWriter;
+import org.apache.axis.wsdl.toJava.Utils;
+
+import javax.wsdl.Binding;
+import javax.wsdl.Fault;
+import javax.wsdl.Operation;
+import javax.wsdl.OperationType;
+import javax.wsdl.Port;
+import javax.wsdl.PortType;
+import javax.xml.rpc.holders.BooleanHolder;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.Iterator;
+import java.util.Map;
+
+/**
+ * This is Wsdl2java's TestCase writer. It writes the <serviceName>TestCase.java file.
+ *
+ * @author Ias (iasandcb@tmax.co.kr)
+ * @deprecated no more used by J2eeGeneratorFactory
+ */
+public class J2eeTestCaseWriter extends JavaClassWriter {
+ private ServiceEntry sEntry;
+ private SymbolTable symbolTable;
+
+ /**
+ * Constructor.
+ */
+ protected J2eeTestCaseWriter(J2eeEmitter emitter,
+ ServiceEntry sEntry,
+ SymbolTable symbolTable) {
+ super(emitter, sEntry.getName() + "TestCase", "testCase");
+ this.sEntry = sEntry;
+ this.symbolTable = symbolTable;
+ } // ctor
+
+ /**
+ * Returns "extends junit.framework.TestCase ".
+ */
+ protected String getExtendsText() {
+ return "extends junit.framework.TestCase ";
+ } // getExtendsText
+
+ /**
+ * Write the body of the TestCase file.
+ */
+ protected void writeFileBody(PrintWriter pw) throws IOException {
+ // Write the constructor
+ pw.print(" public ");
+ pw.print(getClassName());
+ pw.println("(java.lang.String name) {");
+ pw.println(" super(name);");
+ pw.println(" }");
+
+ // get ports
+ Map portMap = sEntry.getService().getPorts();
+ Iterator portIterator = portMap.values().iterator();
+
+ while (portIterator.hasNext()) {
+ Port p = (Port) portIterator.next();
+ Binding binding = p.getBinding();
+ BindingEntry bEntry =
+ symbolTable.getBindingEntry(binding.getQName());
+
+ // If this isn't an SOAP binding, skip it
+ if (bEntry.getBindingType() != BindingEntry.TYPE_SOAP) {
+ continue;
+ }
+
+ // JSR 101 indicates that the name of the port used
+ // in the java code is the name of the wsdl:port. It
+ // does not indicate what should occur if the
+ // wsdl:port name is not a java identifier. The
+ // TCK depends on the case-sensitivity being preserved,
+ // and the interop tests have port names that are not
+ // valid java identifiers. Thus the following code.
+ String portName = p.getName();
+ if (!JavaUtils.isJavaId(portName)) {
+ portName = Utils.xmlNameToJavaClass(portName);
+ }
+
+ PortType portType = binding.getPortType();
+
+ writeComment(pw, p.getDocumentationElement(), true);
+ writeServiceTestCode(pw, portName, portType, bEntry);
+ }
+ } // writeFileBody
+
+ // Methods may be overloaded. If we just grab the method name
+ // for the test method names, we could end up with duplicates.
+ // The quick-and-easy solution is to have a test counter so that
+ // each test method has a number.
+ private int counter = 1;
+
+ private final void writeServiceTestCode(PrintWriter pw,
+ String portName, PortType portType,
+ BindingEntry bEntry) throws IOException {
+ Iterator ops = portType.getOperations().iterator();
+ while (ops.hasNext()) {
+ Operation op = (Operation) ops.next();
+ OperationType type = op.getStyle();
+ Parameters params = bEntry.getParameters(op);
+ // did we emit a constructor that throws?
+ BooleanHolder bThrow = new BooleanHolder(false);
+
+ // These operation types are not supported. The signature
+ // will be a string stating that fact.
+ if (type == OperationType.NOTIFICATION
+ || type == OperationType.SOLICIT_RESPONSE) {
+ pw.println(" " + params.signature);
+ continue;
+ }
+
+ String javaOpName = Utils.xmlNameToJavaClass(op.getName());
+ String testMethodName = "test" + counter++ + portName + javaOpName;
+ pw.println(" public void " + testMethodName + "() throws Exception {");
+
+ String bindingType = bEntry.getName() + "Stub";
+ writeBindingAssignment(pw, bindingType, portName);
+
+ pw.println(" // Test operation");
+ String indent = "";
+ Map faultMap = op.getFaults();
+ if (faultMap != null && faultMap.size() > 0) {
+ // we are going to catch fault Exceptions
+ pw.println(" try {");
+ indent = " ";
+ }
+ if (params.returnParam != null) {
+ TypeEntry returnType = params.returnParam.getType();
+ pw.print(" " + indent);
+ pw.print(Utils.getParameterTypeName(params.returnParam));
+ pw.print(" value = ");
+
+ if (params.returnParam.getMIMEInfo() == null &&
+ Utils.isPrimitiveType(returnType)) {
+ if ("boolean".equals(returnType.getName())) {
+ pw.println("false;");
+ } else {
+ pw.println("-3;");
+ }
+ } else {
+ pw.println("null;");
+ }
+ }
+
+ pw.print(" " + indent);
+
+ if (params.returnParam != null) {
+ pw.print("value = ");
+ }
+
+ pw.print("binding.");
+ pw.print(Utils.xmlNameToJava(op.getName()));
+ pw.print("(");
+
+ Iterator iparam = params.list.iterator();
+ boolean isFirst = true;
+
+ while (iparam.hasNext()) {
+ if (isFirst) {
+ isFirst = false;
+ } else {
+ pw.print(", ");
+ }
+
+ Parameter param = (Parameter) iparam.next();
+ String suffix = "";
+
+ // if we have an out or in/out, we are passing in a holder
+ if (param.getMode() != Parameter.IN) {
+ pw.print("new " + Utils.holder(param, emitter)
+ + "(");
+ suffix = ")";
+ }
+
+ // if we have an in or in/out, write the constructor
+ if (param.getMode() != Parameter.OUT) {
+ String constructorString = Utils.getConstructorForParam(param, symbolTable, bThrow);
+ pw.print(constructorString);
+ }
+ pw.print(suffix);
+ }
+
+ pw.println(");");
+
+ if (faultMap != null && faultMap.size() > 0) {
+ pw.println(" }");
+ }
+
+ if (faultMap != null) {
+ Iterator i = faultMap.values().iterator();
+ int count = 0;
+
+ while (i.hasNext()) {
+ count++;
+ Fault f = (Fault) i.next();
+ pw.print(" catch (");
+ pw.print(Utils.getFullExceptionName(f.getMessage(), symbolTable));
+ pw.println(" e" + count + ") {");
+ pw.print(" ");
+ pw.println("throw new junit.framework.AssertionFailedError(\"" + f.getName() + " Exception caught: \" + e" + count + ");");
+ pw.println(" }");
+ }
+ }
+
+ pw.println(" " + indent + "// TBD - validate results");
+
+ /*
+ pw.println(" catch (java.rmi.RemoteException re) {");
+ pw.print(" ");
+ pw.println("throw new junit.framework.AssertionFailedError(\"Remote Exception caught: \" + re);");
+ pw.println(" }");
+ if (bThrow.value) {
+ pw.println(" catch (Exception e) {");
+ pw.println(" // Unsigned constructors can throw - ignore");
+ pw.println(" }");
+ }
+ */
+ pw.println(" }");
+ pw.println();
+ }
+ } // writeServiceTestCode
+
+ public final void writeBindingAssignment(PrintWriter pw,
+ String bindingType, String portName) throws IOException {
+ pw.println(" " + bindingType + " binding;");
+ pw.println(" try {");
+ pw.println(" binding = (" + bindingType + ")");
+ pw.print(" new " + sEntry.getName());
+ pw.println("Locator" + "().get" + portName + "();");
+ pw.println(" }");
+ pw.println(" catch (" + javax.xml.rpc.ServiceException.class.getName() + " jre) {");
+ pw.println(" if(jre.getLinkedCause()!=null)");
+ pw.println(" jre.getLinkedCause().printStackTrace();");
+ pw.println(" throw new junit.framework.AssertionFailedError(\"JAX-RPC ServiceException caught: \" + jre);");
+ pw.println(" }");
+
+ pw.println(" assertNotNull(\"" +
+ Messages.getMessage("null00", "binding") +
+ "\", binding);");
+ pw.println();
+ pw.println(" // Time out after a minute");
+ pw.println(" binding.setTimeout(60000);");
+ pw.println();
+ } // writeBindingAssignment
+
+}