You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by an...@apache.org on 2002/10/04 09:05:16 UTC

cvs commit: xml-axis-wsif/java/src/org/apache/wsif/util WSIFUtils.java

antelder    2002/10/04 00:05:16

  Modified:    java/src/org/apache/wsif/providers/soap/apachesoap
                        WSIFPort_ApacheSOAP.java
               java/src/org/apache/wsif/providers/soap/apacheaxis
                        WSIFPort_ApacheAxis.java
               java/src/org/apache/wsif/util WSIFUtils.java
  Log:
  Fix bugzila bug 13038 - correctly find binding operation matching the portType operation
  
  Revision  Changes    Path
  1.18      +3 -5      xml-axis-wsif/java/src/org/apache/wsif/providers/soap/apachesoap/WSIFPort_ApacheSOAP.java
  
  Index: WSIFPort_ApacheSOAP.java
  ===================================================================
  RCS file: /home/cvs/xml-axis-wsif/java/src/org/apache/wsif/providers/soap/apachesoap/WSIFPort_ApacheSOAP.java,v
  retrieving revision 1.17
  retrieving revision 1.18
  diff -u -r1.17 -r1.18
  --- WSIFPort_ApacheSOAP.java	18 Sep 2002 15:38:19 -0000	1.17
  +++ WSIFPort_ApacheSOAP.java	4 Oct 2002 07:05:15 -0000	1.18
  @@ -90,10 +90,10 @@
   import org.apache.wsif.WSIFException;
   import org.apache.wsif.WSIFOperation;
   import org.apache.wsif.base.WSIFDefaultPort;
  -import org.apache.wsif.base.WSIFServiceImpl;
   import org.apache.wsif.logging.Trc;
   import org.apache.wsif.providers.WSIFDynamicTypeMap;
   import org.apache.wsif.providers.WSIFDynamicTypeMapping;
  +import org.apache.wsif.util.WSIFUtils;
   import org.apache.wsif.wsdl.extensions.jms.JMSAddress;
   import org.apache.wsif.wsdl.extensions.jms.JMSProperty;
   import org.apache.wsif.wsdl.extensions.jms.JMSPropertyValue;
  @@ -528,10 +528,8 @@
   		
           if (operation == null) {
               BindingOperation bop =
  -                port.getBinding().getBindingOperation(
  -                    name,
  -                    inputName,
  -                    outputName);
  +               WSIFUtils.getBindingOperation( 
  +                  port.getBinding(), name, inputName, outputName );
   
               if (bop != null) {
                   operation =
  
  
  
  1.11      +2 -11     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.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- WSIFPort_ApacheAxis.java	25 Sep 2002 14:23:46 -0000	1.10
  +++ WSIFPort_ApacheAxis.java	4 Oct 2002 07:05:15 -0000	1.11
  @@ -82,24 +82,18 @@
   import javax.wsdl.extensions.soap.SOAPFault;
   import javax.wsdl.extensions.soap.SOAPHeader;
   import javax.wsdl.extensions.soap.SOAPOperation;
  -
   import javax.xml.rpc.JAXRPCException;
  -import javax.xml.namespace.QName;
   
   import org.apache.axis.client.Call;
   import org.apache.axis.client.Transport;
  -import org.apache.axis.encoding.TypeMappingRegistry;
  -import org.apache.axis.encoding.ser.BeanDeserializerFactory;
  -import org.apache.axis.encoding.ser.BeanSerializerFactory;
   import org.apache.axis.transport.http.HTTPTransport;
   import org.apache.wsif.WSIFException;
  -import org.apache.wsif.WSIFMessage;
   import org.apache.wsif.WSIFOperation;
   import org.apache.wsif.base.WSIFDefaultPort;
   import org.apache.wsif.logging.Trc;
   import org.apache.wsif.providers.WSIFDynamicTypeMap;
  -import org.apache.wsif.providers.WSIFDynamicTypeMapping;
   import org.apache.wsif.util.WSIFProperties;
  +import org.apache.wsif.util.WSIFUtils;
   import org.apache.wsif.util.jms.WSIFJMSDestination;
   import org.apache.wsif.util.jms.WSIFJMSFinder;
   import org.apache.wsif.wsdl.extensions.jms.JMSAddress;
  @@ -245,10 +239,7 @@
               }
                   
               BindingOperation bindingoperation =
  -                binding.getBindingOperation(
  -                    s3,
  -                    input.getName(),
  -                    output == null ? null : output.getName());
  +               WSIFUtils.getBindingOperation( binding, operation );
               if (bindingoperation == null)
                   throw new WSIFException(
                       "missing required in WSDL 1.1 binding operation for " + s3);
  
  
  
  1.19      +105 -2    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.18
  retrieving revision 1.19
  diff -u -r1.18 -r1.19
  --- WSIFUtils.java	27 Sep 2002 13:14:10 -0000	1.18
  +++ WSIFUtils.java	4 Oct 2002 07:05:16 -0000	1.19
  @@ -71,15 +71,20 @@
   import java.util.Iterator;
   import java.util.List;
   import java.util.Map;
  -import java.util.Properties;
   import java.util.Set;
   import java.util.StringTokenizer;
   
   import javax.wsdl.Binding;
  +import javax.wsdl.BindingInput;
  +import javax.wsdl.BindingOperation;
  +import javax.wsdl.BindingOutput;
   import javax.wsdl.Definition;
   import javax.wsdl.Import;
  +import javax.wsdl.Input;
   import javax.wsdl.Message;
   import javax.wsdl.Operation;
  +import javax.wsdl.OperationType;
  +import javax.wsdl.Output;
   import javax.wsdl.Part;
   import javax.wsdl.PortType;
   import javax.wsdl.Service;
  @@ -1062,7 +1067,105 @@
               return "http://" + result.substring(0, result.length() - 1) + "/";
           return "http://" + result + "/";
       }
  -    
  +
  +   /**
  +    * Get a binding operation for a portType operation.
  +    * 
  +    * @param binding the WSLD binding the operation will choosen from
  +    * @param portTypeOp the portType operation the binding operation 
  +    *         must match
  +    * @return the BindingOperation  
  +    */
  +   public static BindingOperation getBindingOperation(
  +      Binding binding,
  +      Operation portTypeOp) throws WSIFException {
  +
  +      Trc.entry(null, binding, portTypeOp);
  +      BindingOperation bop;
  +      if ( portTypeOp == null ) {
  +      	bop = null;
  +      } else {
  +      	bop = getBindingOperation( 
  +           binding, 
  +           portTypeOp.getName(),
  +           portTypeOp.getInput()==null ? null : portTypeOp.getInput().getName(),
  +           portTypeOp.getOutput()==null ? null : portTypeOp.getOutput().getName() );
  +      }
  +      Trc.exit(bop);
  +      return bop;
  +   }
  +
  +   /**
  +    * Get a binding operation for a portType operation.
  +    * 
  +    * @param binding the WSLD binding the operation will choosen from
  +    * @param opName the portType operation name of the wanted operation
  +    * @param inName the portType operation input name
  +    * @param outName the portType operation outpur name
  +    * @return the BindingOperation  
  +    */
  +   public static BindingOperation getBindingOperation(
  +      Binding binding,
  +      String opName,
  +      String inName,
  +      String outName) throws WSIFException {
  +
  +      Trc.entry(null, binding, opName, inName, outName);        	
  +      BindingOperation op = null;
  +      if (binding != null && opName != null) {
  +         ArrayList matchingOps = new ArrayList();
  +         List bops = binding.getBindingOperations();
  +         if (bops != null) {
  +            for (Iterator i = bops.iterator(); i.hasNext();) {
  +               BindingOperation bop = (BindingOperation) i.next();
  +               if ( opName.equals(bop.getName()) ) {
  +                  matchingOps.add(bop);
  +               }
  +            }
  +            if (matchingOps.size() == 1) {
  +               op = (BindingOperation) matchingOps.get(0);
  +            } else if (matchingOps.size() > 1) {
  +               op = chooseBindingOperation(matchingOps, inName, outName);
  +            }
  +         }
  +      }
  +      Trc.exit(op);
  +      return op;      	
  +   }
  +
  +   private static BindingOperation chooseBindingOperation(
  +      ArrayList bindingOps,
  +      String inName,
  +      String outName) throws WSIFException {
  +      	
  +      BindingOperation choosenOp = null;
  +      for (Iterator i = bindingOps.iterator(); i.hasNext(); ) {
  +         BindingOperation bop = (BindingOperation) i.next();
  +         String binName = (bop.getBindingInput() == null) ? 
  +            null : 
  +            bop.getBindingInput().getName();
  +         String boutName = (bop.getBindingOutput() == null) ?
  +            null : 
  +            bop.getBindingOutput().getName();
  +         if ((inName == null) ? binName == null : inName.equals(binName)) {
  +            if ((outName == null)
  +               ? boutName == null
  +               : outName.equals(boutName)) {
  +               if ( choosenOp == null ) {
  +                  choosenOp = bop;
  +               } else {
  +                  throw new WSIFException( 
  +                     "duplicate operation in binding: " +
  +                     bop.getName() +
  +                     ":" + inName +
  +                     ":" + outName );
  +               }
  +            }
  +         }
  +      }
  +      return choosenOp;
  +   }
  +
       private static boolean isJavaKeyword(String identifier) {
           if (keywordMap == null) {
               Object value = new Object();