protected void writeOperationMap()

in axis-codegen/src/main/java/org/apache/axis/wsdl/toJava/JavaStubWriter.java [507:688]


    protected void writeOperationMap(PrintWriter pw) {

        List operations = binding.getBindingOperations();

        pw.println("    static {");
        pw.println(
                "        _operations = new org.apache.axis.description.OperationDesc["
                + operations.size() + "];");

        for (int j = 0, k = 0; j < operations.size(); ++j) {
            if ((j % OPERDESC_PER_BLOCK) == 0) {
                k++;

                pw.println("        _initOperationDesc" + k + "();");
            }
        }

        for (int i = 0, k = 0; i < operations.size(); ++i) {
            if ((i % OPERDESC_PER_BLOCK) == 0) {
                k++;

                pw.println("    }\n");
                pw.println("    private static void _initOperationDesc" + k
                        + "(){");
                pw.println(
                        "        org.apache.axis.description.OperationDesc oper;");
                pw.println(
                        "        org.apache.axis.description.ParameterDesc param;");
            }

            BindingOperation operation = (BindingOperation) operations.get(i);
            Parameters parameters =
                    bEntry.getParameters(operation.getOperation());

            // Get the soapAction from the <soap:operation>
            String opStyle = null;
            Iterator operationExtensibilityIterator =
                    operation.getExtensibilityElements().iterator();

            for (; operationExtensibilityIterator.hasNext();) {
                Object obj = operationExtensibilityIterator.next();

                if (obj instanceof SOAPOperation) {
                    opStyle = ((SOAPOperation) obj).getStyle();

                    break;
                } else if (obj instanceof SOAP12Operation) {
                    opStyle = ((SOAP12Operation) obj).getStyle();

                    break;
                }
            }

            Operation ptOperation = operation.getOperation();
            OperationType type = ptOperation.getStyle();

            // These operation types are not supported.  The signature
            // will be a string stating that fact.
            if ((OperationType.NOTIFICATION.equals(type))
                    || (OperationType.SOLICIT_RESPONSE.equals(type))) {
                pw.println(parameters.signature);
                pw.println();
            }

            String operName = operation.getName();
            String indent = "        ";

            pw.println(
                    indent
                    + "oper = new org.apache.axis.description.OperationDesc();");
            pw.println(indent + "oper.setName(\"" + operName + "\");");

            // loop over paramters and set up in/out params
            for (int j = 0; j < parameters.list.size(); ++j) {
                Parameter p = (Parameter) parameters.list.get(j);

                // Get the QName representing the parameter type
                QName paramType = Utils.getXSIType(p);

                // Set the javaType to the name of the type
                String javaType = Utils.getParameterTypeName(p);
                    if (javaType != null) {
                        javaType += ".class, ";
                    } else {
                        javaType = "null, ";
                    }

                // Get the text representing newing a QName for the name and type
                String paramNameText = Utils.getNewQNameWithLastLocalPart(p.getQName());
                String paramTypeText = Utils.getNewQName(paramType);

                // Generate the addParameter call with the
                // name qname, typeQName, optional javaType, and mode
                boolean isInHeader = p.isInHeader();
                boolean isOutHeader = p.isOutHeader();

                pw.println("        param = new org.apache.axis.description.ParameterDesc(" +
                           paramNameText + ", " +
                           modeStrings[p.getMode()] + ", " +
                           paramTypeText + ", " +
                           javaType +
                           isInHeader + ", " + isOutHeader + ");");

                QName itemQName = Utils.getItemQName(p.getType());
                if (itemQName != null) {
                    pw.println("        param.setItemQName(" +
                               Utils.getNewQName(itemQName) + ");");
                }

                if (p.isOmittable())
                    pw.println("        param.setOmittable(true);");

                if (p.isNillable())
                    pw.println("        param.setNillable(true);");

                pw.println("        oper.addParameter(param);");
            }

            // set output type
            Parameter returnParam = parameters.returnParam;
            if (returnParam != null) {

                // Get the QName for the return Type
                QName returnType = Utils.getXSIType(returnParam);

                // Get the javaType
                String javaType = Utils.getParameterTypeName(returnParam);

                if (javaType == null) {
                    javaType = "";
                } else {
                    javaType += ".class";
                }

                pw.println("        oper.setReturnType("
                        + Utils.getNewQName(returnType) + ");");
                pw.println("        oper.setReturnClass(" + javaType + ");");

                QName returnQName = returnParam.getQName();

                if (returnQName != null) {
                    pw.println("        oper.setReturnQName("
                            + Utils.getNewQNameWithLastLocalPart(returnQName) + ");");
                }

                if (returnParam.isOutHeader()) {
                    pw.println("        oper.setReturnHeader(true);");
                }

                QName itemQName = Utils.getItemQName(returnParam.getType());
                if (itemQName != null) {
                    pw.println("        param = oper.getReturnParamDesc();");
                    pw.println("        param.setItemQName(" +
                               Utils.getNewQName(itemQName) + ");");
                }

            } else {
                pw.println(
                        "        oper.setReturnType(org.apache.axis.encoding.XMLType.AXIS_VOID);");
            }

            boolean hasMIME = Utils.hasMIME(bEntry, operation);
            Style style = Style.getStyle(opStyle, bEntry.getBindingStyle());
            Use use = bEntry.getInputBodyType(operation.getOperation());

            if ((style == Style.DOCUMENT) && symbolTable.isWrapped()) {
                style = Style.WRAPPED;
            }

            if (!hasMIME) {
                pw.println("        oper.setStyle(" + styles.get(style) + ");");
                pw.println("        oper.setUse(" + uses.get(use) + ");");
            }

            // Register fault/exception information for this operation
            writeFaultInfo(pw, operation);
            pw.println(indent + "_operations[" + i + "] = oper;");
            pw.println("");
        }

        pw.println("    }");
    }