All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.axis.wsdl.symbolTable.BindingEntry Maven / Gradle / Ivy

The newest version!
/*
 * Copyright 2001-2004 The Apache Software Foundation.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *      http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.apache.axis.wsdl.symbolTable;

import org.apache.axis.constants.Style;
import org.apache.axis.constants.Use;

import javax.wsdl.Binding;
import javax.wsdl.Operation;
import javax.wsdl.extensions.soap.SOAPFault;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

/**
 * This class represents a WSDL binding.  It encompasses the WSDL4J Binding object so it can
 * reside in the SymbolTable.  It also adds a few bits of information that are a nuisance to get
 * from the WSDL4J Binding object:  binding type, binding style, input/output/fault body types.
 */
public class BindingEntry extends SymTabEntry {

    // Binding types

    /** Field TYPE_SOAP */
    public static final int TYPE_SOAP = 0;

    /** Field TYPE_HTTP_GET */
    public static final int TYPE_HTTP_GET = 1;

    /** Field TYPE_HTTP_POST */
    public static final int TYPE_HTTP_POST = 2;

    /** Field TYPE_UNKNOWN */
    public static final int TYPE_UNKNOWN = 3;

    // Binding Operation use types

    /** Field USE_ENCODED */
    public static final int USE_ENCODED = 0;

    /** Field USE_LITERAL */
    public static final int USE_LITERAL = 1;

    /** Field binding */
    private Binding binding;

    /** Field bindingType */
    private int bindingType;

    /** Field bindingStyle */
    private Style bindingStyle;

    /** Field hasLiteral */
    private boolean hasLiteral;

    /** Field attributes */
    private HashMap attributes;

    // operation to parameter info (Parameter)

    /** Field parameters */
    private HashMap parameters = new HashMap();

    // BindingOperation to faults (ArrayList of FaultBodyType)

    /** Field faults */
    private HashMap faults = new HashMap();

    // This is a map of a map.  It's a map keyed on operation name whose values
    // are maps keyed on parameter name.  The ultimate values are simple Strings.

    /** Field mimeTypes */
    private Map mimeTypes;

    // This is a map of a map.  It's a map keyed on operation name whose values
    // are maps keyed on part name.  The ultimate values are simple
    // Booleans.

    /** Field headerParts */
    private Map headerParts;

    // List of operations at need to use DIME

    /** Field dimeOps */
    private ArrayList dimeOps = new ArrayList();

    /**
     * Construct a BindingEntry from a WSDL4J Binding object and the additional binding info:
     * binding type, binding style, whether there is any literal binding, and the attributes which
     * contain the input/output/fault body type information.
     * 
     * @param binding      
     * @param bindingType  
     * @param bindingStyle 
     * @param hasLiteral   
     * @param attributes   
     * @param mimeTypes    
     * @param headerParts  
     */
    public BindingEntry(Binding binding, int bindingType, Style bindingStyle,
                        boolean hasLiteral, HashMap attributes, Map mimeTypes,
                        Map headerParts) {

        super(binding.getQName());

        this.binding = binding;
        this.bindingType = bindingType;
        this.bindingStyle = bindingStyle;
        this.hasLiteral = hasLiteral;

        if (attributes == null) {
            this.attributes = new HashMap();
        } else {
            this.attributes = attributes;
        }

        if (mimeTypes == null) {
            this.mimeTypes = new HashMap();
        } else {
            this.mimeTypes = mimeTypes;
        }

        if (headerParts == null) {
            this.headerParts = new HashMap();
        } else {
            this.headerParts = headerParts;
        }
    }    // ctor

    /**
     * This is a minimal constructor.  Everything will be set up with
     * defaults.  If the defaults aren't desired, then the appropriate
     * setter method should be called.  The defaults are:
     * bindingType = TYPE_UNKNOWN
     * bindingStyle = DOCUMENT
     * hasLiteral = false
     * operation inputBodyTypes = USE_ENCODED
     * operation outputBodyTypes = USE_ENCODED
     * operation faultBodyTypes = USE_ENCODED
     * mimeTypes = null
     * 

* The caller of this constructor should * also call the various setter methods to fully fill out this object: * setBindingType, setBindingStyle, setHasLiteral, setAttribute, * setMIMEType. * * @param binding */ public BindingEntry(Binding binding) { super(binding.getQName()); this.binding = binding; this.bindingType = TYPE_UNKNOWN; this.bindingStyle = Style.DOCUMENT; this.hasLiteral = false; this.attributes = new HashMap(); this.mimeTypes = new HashMap(); this.headerParts = new HashMap(); } // ctor /** * Get the Parameters object for the given operation. * * @param operation * @return */ public Parameters getParameters(Operation operation) { return (Parameters) parameters.get(operation); } // getParameters /** * Get all of the parameters for all operations. * * @return */ public HashMap getParameters() { return parameters; } // getParameters /** * Set the parameters for all operations * * @param parameters */ public void setParameters(HashMap parameters) { this.parameters = parameters; } /** * Get the mime mapping for the given parameter name. * If there is none, this returns null. * * @param operationName * @param parameterName * @return */ public MimeInfo getMIMEInfo(String operationName, String parameterName) { Map opMap = (Map) mimeTypes.get(operationName); if (opMap == null) { return null; } else { return (MimeInfo) opMap.get(parameterName); } } // getMIMEType /** * Get the MIME types map. * * @return */ public Map getMIMETypes() { return mimeTypes; } // getMIMETypes /** * Set the mime mapping for the given parameter name. * * @param operationName * @param parameterName * @param type * @param dims */ public void setMIMEInfo(String operationName, String parameterName, String type, String dims) { Map opMap = (Map) mimeTypes.get(operationName); if (opMap == null) { opMap = new HashMap(); mimeTypes.put(operationName, opMap); } opMap.put(parameterName, new MimeInfo(type, dims)); } // setMIMEType /** * Mark the operation as a DIME operation * * @param operationName */ public void setOperationDIME(String operationName) { if (dimeOps.indexOf(operationName) == -1) { dimeOps.add(operationName); } } /** * Check if this operation should use DIME * * @param operationName * @return */ public boolean isOperationDIME(String operationName) { return (dimeOps.indexOf(operationName) >= 0); } /** * Is this part an input header part?. * * @param operationName * @param partName * @return */ public boolean isInHeaderPart(String operationName, String partName) { return (headerPart(operationName, partName) & IN_HEADER) > 0; } // isInHeaderPart /** * Is this part an output header part?. * * @param operationName * @param partName * @return */ public boolean isOutHeaderPart(String operationName, String partName) { return (headerPart(operationName, partName) & OUT_HEADER) > 0; } // isInHeaderPart /** Get the flag indicating what sort of header this part is. */ public static final int NO_HEADER = 0; /** Field IN_HEADER */ public static final int IN_HEADER = 1; /** Field OUT_HEADER */ public static final int OUT_HEADER = 2; /** * Get the mime mapping for the given part name. * If there is none, this returns null. * * @param operationName * @param partName * @return flag indicating kind of header */ private int headerPart(String operationName, String partName) { Map opMap = (Map) headerParts.get(operationName); if (opMap == null) { return NO_HEADER; } else { Integer I = (Integer) opMap.get(partName); return (I == null) ? NO_HEADER : I.intValue(); } } // headerPart /** * Get the header parameter map. * * @return */ public Map getHeaderParts() { return headerParts; } // getHeaderParts /** * Set the header part mapping for the given part name. * * @param operationName * @param partName * @param headerFlags */ public void setHeaderPart(String operationName, String partName, int headerFlags) { Map opMap = (Map) headerParts.get(operationName); if (opMap == null) { opMap = new HashMap(); headerParts.put(operationName, opMap); } Integer I = (Integer) opMap.get(partName); int i = (I == null) ? headerFlags : (I.intValue() | headerFlags); opMap.put(partName, new Integer(i)); } // setHeaderPart /** * Get this entry's WSDL4J Binding object. * * @return */ public Binding getBinding() { return binding; } // getBinding /** * Get this entry's binding type. One of BindingEntry.TYPE_SOAP, BindingEntry.TYPE_HTTP_GET, * BindingEntry.TYPE_HTTP_POST. * * @return */ public int getBindingType() { return bindingType; } // getBindingType /** * Set this entry's binding type. * * @param bindingType */ protected void setBindingType(int bindingType) { if ((bindingType >= TYPE_SOAP) && (bindingType <= TYPE_UNKNOWN)) { } this.bindingType = bindingType; } // setBindingType /** * Get this entry's binding style. * * @return */ public Style getBindingStyle() { return bindingStyle; } // getBindingStyle /** * Set this entry's binding style. * * @param bindingStyle */ protected void setBindingStyle(Style bindingStyle) { this.bindingStyle = bindingStyle; } // setBindingStyle /** * Do any of the message stanzas contain a soap:body which uses literal? * * @return */ public boolean hasLiteral() { return hasLiteral; } // hasLiteral /** * Set the literal flag. * * @param hasLiteral */ protected void setHasLiteral(boolean hasLiteral) { this.hasLiteral = hasLiteral; } // setHashLiteral /** * Get the input body type for the given operation. * * @param operation * @return */ public Use getInputBodyType(Operation operation) { OperationAttr attr = (OperationAttr) attributes.get(operation); if (attr == null) { return Use.ENCODED; // should really create an exception for this. } else { return attr.getInputBodyType(); } } // getInputBodyType /** * Set the input body type for the given operation. * * @param operation * @param inputBodyType */ protected void setInputBodyType(Operation operation, Use inputBodyType) { OperationAttr attr = (OperationAttr) attributes.get(operation); if (attr == null) { attr = new OperationAttr(); attributes.put(operation, attr); } attr.setInputBodyType(inputBodyType); if (inputBodyType == Use.LITERAL) { setHasLiteral(true); } } // setInputBodyType /** * Get the output body type for the given operation. * * @param operation * @return */ public Use getOutputBodyType(Operation operation) { OperationAttr attr = (OperationAttr) attributes.get(operation); if (attr == null) { return Use.ENCODED; // should really create an exception for this. } else { return attr.getOutputBodyType(); } } // getOutputBodyType /** * Set the output body type for the given operation. * * @param operation * @param outputBodyType */ protected void setOutputBodyType(Operation operation, Use outputBodyType) { OperationAttr attr = (OperationAttr) attributes.get(operation); if (attr == null) { attr = new OperationAttr(); attributes.put(operation, attr); } attr.setOutputBodyType(outputBodyType); if (outputBodyType == Use.LITERAL) { setHasLiteral(true); } } // setOutputBodyType /** * Set the body type for the given operation. If input is true, * then this is the inputBodyType, otherwise it's the outputBodyType. * (NOTE: this method exists to enable reusing some SymbolTable code. * * @param operation * @param bodyType * @param input */ protected void setBodyType(Operation operation, Use bodyType, boolean input) { if (input) { setInputBodyType(operation, bodyType); } else { setOutputBodyType(operation, bodyType); } } // setBodyType /** * Get the fault body type for the given fault of the given operation. * * @param operation * @param faultName * @return Use.ENCODED or Use.LITERAL */ public Use getFaultBodyType(Operation operation, String faultName) { OperationAttr attr = (OperationAttr) attributes.get(operation); if (attr == null) { return Use.ENCODED; // should really create an exception for this. } else { HashMap m = attr.getFaultBodyTypeMap(); SOAPFault soapFault = (SOAPFault) m.get(faultName); // This should never happen (error thrown in SymbolTable) if (soapFault == null) { return Use.ENCODED; } String use = soapFault.getUse(); if ("literal".equals(use)) { return Use.LITERAL; } return Use.ENCODED; } } /** * Return the map of BindingOperations to ArraList of FaultBodyType * * @return */ public HashMap getFaults() { return faults; } /** * Method setFaults * * @param faults */ public void setFaults(HashMap faults) { this.faults = faults; } /** * Get a {@link Set} of comprised {@link Operation} objects. * * @return */ public Set getOperations() { return attributes.keySet(); } /** * Set the fault body type map for the given operation. * * @param operation * @param faultBodyTypeMap */ protected void setFaultBodyTypeMap(Operation operation, HashMap faultBodyTypeMap) { OperationAttr attr = (OperationAttr) attributes.get(operation); if (attr == null) { attr = new OperationAttr(); attributes.put(operation, attr); } attr.setFaultBodyTypeMap(faultBodyTypeMap); } // setInputBodyTypeMap /** * Contains attributes for Operations * - Body type: encoded or literal */ protected static class OperationAttr { /** Field inputBodyType */ private Use inputBodyType; /** Field outputBodyType */ private Use outputBodyType; /** Field faultBodyTypeMap */ private HashMap faultBodyTypeMap; /** * Constructor OperationAttr * * @param inputBodyType * @param outputBodyType * @param faultBodyTypeMap */ public OperationAttr(Use inputBodyType, Use outputBodyType, HashMap faultBodyTypeMap) { this.inputBodyType = inputBodyType; this.outputBodyType = outputBodyType; this.faultBodyTypeMap = faultBodyTypeMap; } /** * Constructor OperationAttr */ public OperationAttr() { this.inputBodyType = Use.ENCODED; this.outputBodyType = Use.ENCODED; this.faultBodyTypeMap = null; } /** * Method getInputBodyType * * @return */ public Use getInputBodyType() { return inputBodyType; } /** * Method setInputBodyType * * @param inputBodyType */ protected void setInputBodyType(Use inputBodyType) { this.inputBodyType = inputBodyType; } /** * Method getOutputBodyType * * @return */ public Use getOutputBodyType() { return outputBodyType; } /** * Method setOutputBodyType * * @param outputBodyType */ protected void setOutputBodyType(Use outputBodyType) { this.outputBodyType = outputBodyType; } /** * Method getFaultBodyTypeMap * * @return */ public HashMap getFaultBodyTypeMap() { return faultBodyTypeMap; } /** * Method setFaultBodyTypeMap * * @param faultBodyTypeMap */ protected void setFaultBodyTypeMap(HashMap faultBodyTypeMap) { this.faultBodyTypeMap = faultBodyTypeMap; } } // class OperationAttr } // class BindingEntry





© 2015 - 2025 Weber Informatics LLC | Privacy Policy