You are viewing a plain text version of this content. The canonical link for it is here.
Posted to wsif-dev@ws.apache.org by an...@apache.org on 2003/02/27 16:46:31 UTC

cvs commit: xml-axis-wsif/java/src/org/apache/wsif/providers ProviderUtils.java

antelder    2003/02/27 07:46:31

  Modified:    java/src/org/apache/wsif/providers/soap/apacheaxis
                        WSIFPort_ApacheAxis.java
                        WSIFOperation_ApacheAxis.java
               java/src/org/apache/wsif/base WSIFClientProxy.java
               java/src/org/apache/wsif WSIFConstants.java
               java/src/org/apache/wsif/util WSIFUtils.java
               java/src/org/apache/wsif/providers ProviderUtils.java
  Log:
  Tidy up and doc style helpers:
  - move doc style utility methods from WSIFUtils to ProviderUtils and change classes to use ProviderUtils
  - allow overrideing operation style wrapped/document/message from the context message
  - change doc style operations to use the portType namespace for the operation name namespace
  - change AXIS provider to use setProperty not setScopedProperty (for AXIS 1.1 compat)
  - correct type of unwrapped part when its not an element
  
  Revision  Changes    Path
  1.24      +12 -0     xml-axis-wsif/java/src/org/apache/wsif/providers/soap/apacheaxis/WSIFPort_ApacheAxis.java
  
  Index: WSIFPort_ApacheAxis.java
  ===================================================================
  RCS file: /home/cvs/xml-axis-wsif/java/src/org/apache/wsif/providers/soap/apacheaxis/WSIFPort_ApacheAxis.java,v
  retrieving revision 1.23
  retrieving revision 1.24
  diff -u -r1.23 -r1.24
  --- WSIFPort_ApacheAxis.java	17 Jan 2003 16:29:07 -0000	1.23
  +++ WSIFPort_ApacheAxis.java	27 Feb 2003 15:46:30 -0000	1.24
  @@ -338,6 +338,18 @@
   	}
   
   	/**
  +	 * Returns the namespace of the WSDL portType used by this Binding.
  +	 * @return String   the portType namespace
  +	 */
  +	public String getPortTypeNamespace() {
  +		Trc.entry(this);
  +		String portTypeNamespace =  
  +    		port.getBinding().getPortType().getQName().getNamespaceURI();
  +   		Trc.exit(portTypeNamespace);
  +		return portTypeNamespace;
  +	}
  +
  +	/**
   	 * Gets the AXIS Call object being used by this WSIFPort 
   	 * @return Call   the AXIS Call object
   	 * @throws WSIFException  if there is an exception creating the AXIS Call
  
  
  
  1.70      +53 -54    xml-axis-wsif/java/src/org/apache/wsif/providers/soap/apacheaxis/WSIFOperation_ApacheAxis.java
  
  Index: WSIFOperation_ApacheAxis.java
  ===================================================================
  RCS file: /home/cvs/xml-axis-wsif/java/src/org/apache/wsif/providers/soap/apacheaxis/WSIFOperation_ApacheAxis.java,v
  retrieving revision 1.69
  retrieving revision 1.70
  diff -u -r1.69 -r1.70
  --- WSIFOperation_ApacheAxis.java	22 Jan 2003 16:39:08 -0000	1.69
  +++ WSIFOperation_ApacheAxis.java	27 Feb 2003 15:46:30 -0000	1.70
  @@ -123,6 +123,7 @@
   import org.apache.wsif.WSIFResponseHandler;
   import org.apache.wsif.base.WSIFDefaultOperation;
   import org.apache.wsif.logging.Trc;
  +import org.apache.wsif.providers.ProviderUtils;
   import org.apache.wsif.providers.WSIFDynamicTypeMap;
   import org.apache.wsif.providers.WSIFDynamicTypeMapping;
   import org.apache.wsif.util.TypeSerializerInfo;
  @@ -843,7 +844,7 @@
   				QName elementName = p.getElementName();
   				if (elementName != null && operationName.equals(elementName.getLocalPart())) {
   				   this.inputUnwrappedSOAPParts = 
  -				      WSIFUtils.unWrapPart(p, getDefinition());
  +				      ProviderUtils.unWrapPart(p, getDefinition());
   				}
   			}
   			if (outputSOAPParts.size() == 1) {
  @@ -852,7 +853,7 @@
   				QName elementName = p.getElementName();
   				if (elementName != null && s.equals(elementName.getLocalPart())) {
   				   this.outputUnwrappedSOAPParts = 
  -				      WSIFUtils.unWrapPart(p, getDefinition());
  +				      ProviderUtils.unWrapPart(p, getDefinition());
   				}
   			}
   		}
  @@ -1371,7 +1372,7 @@
   		return type;
       }
   
  -	public boolean invokeRequestResponseOperation(
  +	protected boolean invokeRequestResponseOperation(
   		WSIFMessage inMsg,
   		WSIFMessage outMsg,
   		WSIFMessage faultMsg)
  @@ -1392,15 +1393,7 @@
   		}
   		call.setSOAPActionURI(getSoapActionURI());
   
  -  		if (WSIFAXISConstants.STYLE_DOCUMENT.equals(operationStyle)
  -        && isInputMessageUnWrapped(inMsg)) {
  -		    operationStyle = WSIFAXISConstants.AXIS_STYLE_WRAPPED;
  -        }
  -
  -        // TODO: what about wrapped messaging? Not supported yet
  -    	if (isMessaging(inMsg)) {
  -	    	operationStyle = WSIFAXISConstants.AXIS_STYLE_MESSAGE;
  -    	}
  +        operationStyle = getOperationStyle(inMsg);
   
   		Transport axistransport = getTransport();
   		WSIFJMSDestination dest = null;
  @@ -1441,6 +1434,29 @@
   		return workedOK;
   	}
   
  +    protected String getOperationStyle(WSIFMessage msg) {
  +    	String style = operationStyle;
  +    	
  +        try {
  +        	WSIFMessage context = getContext();
  +    	    style = (String) context.getObjectPart(WSIFConstants.CONTEXT_OPERATION_STYLE);
  +        } catch (WSIFException e) {
  +            Trc.ignoredException(e);
  +
  +      		if (WSIFAXISConstants.STYLE_DOCUMENT.equals(operationStyle)
  +            && isInputMessageUnWrapped(msg)) {
  +		        style = WSIFAXISConstants.AXIS_STYLE_WRAPPED;
  +            }
  +
  +            // TODO: what about wrapped messaging? Not supported yet
  +        	if (isMessaging(msg)) {
  +	        	style = WSIFAXISConstants.AXIS_STYLE_MESSAGE;
  +    	    }
  +        }
  +    		
  +    	return style;
  +    }
  +
       /**
        * This attempts to determine if the WSIF input message parts are 
        * for a wrapped or unwrapped style operation. Tricky to tell for
  @@ -1599,49 +1615,29 @@
            * not include the attachments, so take the part ordering from 
            * the ordering of the parts in the original message.
            */
  -        if (inputMIMEParts.isEmpty())
  -        {
  -            // setup the input SOAP parts
  -            for (int i = 0; i < soapParts.size(); i++)
  -            {
  -                Part p = (Part) soapParts.get(i);
  -                String partName = p.getName();
  -                if (!inJmsProps.containsKey(partName))
  -                {
  -                    if (WSIFAXISConstants
  -                        .STYLE_DOCUMENT
  -                        .equals(operationStyle))
  -                    {
  -                        QName qn = p.getElementName();
  -                        if (qn != null)
  -                        {
  -                            partName = qn.getLocalPart();
  -                        }
  -                    }
  -                    QName name = new QName(inputNamespace, partName);
  -                    QName type = getPartType(p);
  -                    call.addParameter(name, type, ParameterMode.IN);
  +        List parts;
  +        if (inputMIMEParts.isEmpty()) {
  +        	parts = soapParts;
  +        } else {
  +         	parts = portTypeOperation.getInput().getMessage().getOrderedParts(null);
  +        }
  +        for (Iterator i = parts.iterator(); i.hasNext(); ) {
  +            Part p = (Part) i.next();
  +            String partName = p.getName();
  +            if (WSIFAXISConstants.STYLE_DOCUMENT.equals(operationStyle)) {
  +                QName qn = p.getElementName();
  +                if (qn != null) {
  +                    partName = qn.getLocalPart();
                   }
               }
  -        }
  -        else
  -        {
  -            // This order should include both the attachments and 
  -            // the non-attachments.
  -            List order =
  -                portTypeOperation.getInput().getMessage().getOrderedParts(null);
  -            Iterator it = order.iterator();
  -            while (it.hasNext())
  -            {
  -                Part p = (Part) it.next();
  -
  -                // Only add the part if it hasn't been excluded by the 
  -                // soap:body parts="?"
  -                if (inputMIMEParts.contains(p) || soapParts.contains(p))
  -                {
  -                    QName name = new QName(inputNamespace, p.getName());
  +            if (!inJmsProps.containsKey(partName)) {
  +                if (inputMIMEParts.isEmpty()
  +                || (inputMIMEParts.contains(p) || soapParts.contains(p))) {
  +                    QName name = new QName(inputNamespace, partName);
                       QName type = getPartType(p);
                       call.addParameter(name, type, ParameterMode.IN);
  +//                    call.addParameter(partName, type, ParameterMode.IN);
  +//TODO: sort out param namespace
                   }
               }
           }
  @@ -1702,10 +1698,13 @@
   
   		// setup the call object
   		call.setOperationName(
  -			new QName(getInputNamespace(), portTypeOperation.getName()));
  -		call.setScopedProperty(Call.SEND_TYPE_ATTR, Boolean.FALSE);
  -		call.setScopedProperty(AxisEngine.PROP_DOMULTIREFS, Boolean.FALSE);
  +			new QName(wsifPort.getPortTypeNamespace(), portTypeOperation.getName()));
  +
  +		call.setProperty(Call.SEND_TYPE_ATTR, Boolean.FALSE);
  +		call.setProperty(AxisEngine.PROP_DOMULTIREFS, Boolean.FALSE);
  +
   		call.setOperationStyle(operationStyle);
  +//TODO???        call.setOperationUse("literal");
           setCallParameterNames(call);
   
   		Object[] inputValues = getInputMessageValues(inMsg, null);
  
  
  
  1.19      +2 -1      xml-axis-wsif/java/src/org/apache/wsif/base/WSIFClientProxy.java
  
  Index: WSIFClientProxy.java
  ===================================================================
  RCS file: /home/cvs/xml-axis-wsif/java/src/org/apache/wsif/base/WSIFClientProxy.java,v
  retrieving revision 1.18
  retrieving revision 1.19
  diff -u -r1.18 -r1.19
  --- WSIFClientProxy.java	26 Feb 2003 17:27:30 -0000	1.18
  +++ WSIFClientProxy.java	27 Feb 2003 15:46:30 -0000	1.19
  @@ -83,6 +83,7 @@
   import org.apache.wsif.WSIFPort;
   import org.apache.wsif.compiler.util.TypeMapping;
   import org.apache.wsif.logging.Trc;
  +import org.apache.wsif.providers.ProviderUtils;
   import org.apache.wsif.providers.WSIFDynamicTypeMap;
   import org.apache.wsif.providers.WSIFDynamicTypeMapping;
   import org.apache.wsif.util.WSIFUtils;
  @@ -647,7 +648,7 @@
   		throws WSIFException {
   	    Part p = WSIFUtils.getWrappedDocLiteralPart(parts, operationName);
   		if (p != null) {
  -		    List unWrappedParts = WSIFUtils.unWrapPart(p, def);
  +		    List unWrappedParts = ProviderUtils.unWrapPart(p, def);
   			parts.remove(p);
   			parts.addAll(unWrappedParts);
   		}
  
  
  
  1.19      +12 -0     xml-axis-wsif/java/src/org/apache/wsif/WSIFConstants.java
  
  Index: WSIFConstants.java
  ===================================================================
  RCS file: /home/cvs/xml-axis-wsif/java/src/org/apache/wsif/WSIFConstants.java,v
  retrieving revision 1.18
  retrieving revision 1.19
  diff -u -r1.18 -r1.19
  --- WSIFConstants.java	26 Feb 2003 15:55:22 -0000	1.18
  +++ WSIFConstants.java	27 Feb 2003 15:46:30 -0000	1.19
  @@ -155,6 +155,12 @@
           "org.apache.wsif.axis.operationStyle";
   
       /**
  +     *  WSIF context value for AXIS document operation style  
  +     */
  +    public static final String CONTEXT_OPERATION_STYLE_DOCUMENT =
  +        "document";
  +
  +    /**
        *  WSIF context value for AXIS wrapped operation style  
        */
       public static final String CONTEXT_OPERATION_STYLE_WRAPPED =
  @@ -165,6 +171,12 @@
        */
       public static final String CONTEXT_OPERATION_STYLE_UNWRAPPED =
           "unwrapped";
  +
  +    /**
  +     *  WSIF context value for AXIS message operation style  
  +     */
  +    public static final String CONTEXT_OPERATION_STYLE_MESSAGE =
  +        "message";
   
       /**
        *  SOAP faults WSIFMessage part name for the fault code
  
  
  
  1.30      +4 -52     xml-axis-wsif/java/src/org/apache/wsif/util/WSIFUtils.java
  
  Index: WSIFUtils.java
  ===================================================================
  RCS file: /home/cvs/xml-axis-wsif/java/src/org/apache/wsif/util/WSIFUtils.java,v
  retrieving revision 1.29
  retrieving revision 1.30
  diff -u -r1.29 -r1.30
  --- WSIFUtils.java	26 Feb 2003 15:55:24 -0000	1.29
  +++ WSIFUtils.java	27 Feb 2003 15:46:30 -0000	1.30
  @@ -100,6 +100,7 @@
   import org.apache.wsif.logging.MessageLogger;
   import org.apache.wsif.logging.Trc;
   import org.apache.wsif.mapping.WSIFDefaultMapper;
  +import org.apache.wsif.providers.ProviderUtils;
   import org.apache.wsif.schema.ComplexType;
   import org.apache.wsif.schema.ElementType;
   import org.apache.wsif.schema.Parser;
  @@ -1343,61 +1344,12 @@
   	}
   
   	/**
  -	 * Unwraps a wrapped DocLit style part.
  +	 * @deprecated use org.apache.wsif.providers.ProviderUtils.unWrapPart
   	 */
   	public static List unWrapPart(Part p, Definition def) throws WSIFException {
  -
  -		ArrayList l = new ArrayList();
  -		Parser.getAllSchemaTypes(def, l, null);
  -		if (l == null || l.size()<1) {
  -			throw new WSIFException("no schema elements found");
  -		}
  -
  -	    QName partQN = p.getElementName();
  -		if (partQN == null) {
  -			throw new WSIFException("part has no QName");
  -		}
  -	    
  -		ElementType et = null;
  -		for (int i=0; i<l.size() && et==null; i++ ){
  -			Object o = l.get(i);
  -			if ( o instanceof ElementType ) {
  -                QName etQN = ((ElementType)o).getTypeName();
  -				if ( partQN.equals(etQN) ){
  -					et = (ElementType)o;
  -				}
  -			}
  -		}
  -		if (et == null) {
  -			throw new WSIFException("no ElementType found for part: " + p);
  -		}
  -
  -		List children = et.getChildren();
  -		if (children == null || l.size()<1) {
  -			throw new WSIFException("no ComplexType children on elementType: " + et);
  -		}
  -		
  -		ComplexType ct = (ComplexType) children.get(0);
  -		SequenceElement[] se = ct.getSequenceElements();
  -		if (se == null) {
  -			throw new WSIFException("no sequence elements found on: " + ct);
  -		}
  -		
  -		ArrayList unWrappedParts = new ArrayList();
  -		for (int i=0; i< se.length; i++) {
  -		   PartImpl np = new PartImpl();
  -		   QName type = se[i].getTypeName();
  -		   if (type==null) {
  -			  throw new WSIFException("sequence element has no type name: " + se[i]);
  -		   }
  -		   np.setName(type.getLocalPart());
  -		   np.setElementName(se[i].getElementType());
  -   		   unWrappedParts.add(np);
  -		}
  -
  -		return unWrappedParts;
  +		return ProviderUtils.unWrapPart(p, def);
   	}
  -	
  +
   	/**
   	 * Gets the WSIF WSDL Extensions Registry
   	 * This calls initializeProviders to ensure all providers
  
  
  
  1.4       +108 -0    xml-axis-wsif/java/src/org/apache/wsif/providers/ProviderUtils.java
  
  Index: ProviderUtils.java
  ===================================================================
  RCS file: /home/cvs/xml-axis-wsif/java/src/org/apache/wsif/providers/ProviderUtils.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- ProviderUtils.java	10 Jan 2003 11:12:03 -0000	1.3
  +++ ProviderUtils.java	27 Feb 2003 15:46:30 -0000	1.4
  @@ -58,8 +58,20 @@
   package org.apache.wsif.providers;
   
   import java.lang.reflect.Array;
  +import java.util.ArrayList;
  +import java.util.List;
  +
  +import javax.wsdl.Definition;
  +import javax.wsdl.Part;
  +import javax.xml.namespace.QName;
   
   import org.apache.wsif.WSIFException;
  +import org.apache.wsif.schema.ComplexType;
  +import org.apache.wsif.schema.ElementType;
  +import org.apache.wsif.schema.Parser;
  +import org.apache.wsif.schema.SequenceElement;
  +
  +import com.ibm.wsdl.PartImpl;
   
   /**
    * A class of static utility methods for use across multiple providers
  @@ -301,4 +313,100 @@
   			return null;
   		}
   	}   	
  +
  +	/**
  +	 * Unwraps a wrapped DocLit style part.
  +	 */
  +	public static List unWrapPart(Part p, Definition def) throws WSIFException {
  +
  +		ArrayList l = new ArrayList();
  +		Parser.getAllSchemaTypes(def, l, null);
  +		if (l == null || l.size()<1) {
  +			throw new WSIFException("no schema elements found");
  +		}
  +
  +	    QName partQN = p.getElementName();
  +		if (partQN == null) {
  +			throw new WSIFException("part has no QName");
  +		}
  +	    
  +		ElementType et = getElementType(l, partQN);
  +		if (et == null) {
  +			throw new WSIFException("no ElementType found for part: " + p);
  +		}
  +
  +	    ArrayList unWrappedParts = new ArrayList();
  +	    
  +   		List children = et.getChildren();
  +	    ComplexType ct = null;
  +    	if (children == null || children.size() < 1) {
  +       	    ct = getComplexType(l, et.getElementType() );
  +	    } else {
  +	        ct = (ComplexType) children.get(0);
  +    	}
  +        if (ct == null) {
  +	        throw new WSIFException("cannot find complex type from ElementType: " + et);
  +        }
  +    	
  +   	    SequenceElement[] se = ct.getSequenceElements();
  +        if (se == null) {
  +	        throw new WSIFException("no sequence elements found on: " + ct);
  +        }
  +	    for (int i=0; i< se.length; i++) {
  +	       PartImpl np = new PartImpl();
  +	       QName type = se[i].getTypeName();
  +	       if (type==null) {
  +		       throw new WSIFException("sequence element has no type name: " + se[i]);
  +	       }
  +	       np.setName(type.getLocalPart());
  +	       np.setElementName(se[i].getElementType());
  +	       if (np.getElementName() == null) {
  +    	       np.setTypeName(se[i].getTypeName());
  +	       }
  +	       unWrappedParts.add(np);
  +	    }
  +
  +		return unWrappedParts;
  +	}
  +
  +    private static ElementType getElementType(List l, QName qn) {
  +    	ElementType et = null;
  +		for (int i=0; i<l.size() && et==null; i++ ){
  +			Object o = l.get(i);
  +			if ( o instanceof ElementType ) {
  +                QName etQN = ((ElementType)o).getTypeName();
  +				if ( qn.equals(etQN) ){
  +					et = (ElementType)o;
  +				}
  +			}
  +		}
  +		return et;
  +    }
  +	
  +    private static ComplexType getComplexType(List l, QName type) {
  +       	ComplexType ct = null;
  +    	if (type != null && l != null) {
  +    		String name = type.getLocalPart();
  +	    	for (int i=0; i<l.size() && ct==null; i++ ) {
  +		    	Object o = l.get(i);
  +			    if (name.equals(  ((ComplexType)o).getTypeName().getLocalPart() )){
  +				    ct = (ComplexType)o;
  +			    }
  +		    }
  +    	}
  +		return ct;
  +    }
  +
  +    /**
  +     * Gets the type of a Part, if the Part doesn't have a type,
  +     * then gets the Element name as WSIF treats this as the same thing.
  +     */
  +    public static QName getPartType(Part p) {
  +		QName type = p.getTypeName();
  +		if (type == null) {
  +			type = p.getElementName();
  +		}
  +		return type;
  +    }
  +
   }