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 di...@apache.org on 2002/09/04 15:25:03 UTC

cvs commit: xml-axis/java/test/wsdl Wsdl2javaTestSuite.xml

dims        2002/09/04 06:25:03

  Modified:    java/src/org/apache/axis/client AxisClient.java
               java/src/org/apache/axis/handlers
                        HandlerInfoChainFactory.java
               java/src/org/apache/axis/deployment/wsdd WSDDConstants.java
                        WSDDJAXRPCHandlerInfo.java
                        WSDDJAXRPCHandlerInfoChain.java WSDDService.java
               java/test/wsdl Wsdl2javaTestSuite.xml
  Log:
  Patch from "Greg Truty" <gt...@us.ibm.com> for JAXRPC Handler testcase + changes.
  
  Notes from Greg:
  I've made a bit of progress w/the Handler code and have testcase plus some
  code changes (along w/some other bugs that I have noticed).  This is on a
  version of todays driver (9/03).
  
  The testcase is included below in test\jaxrpchandler.  It tests the
  addition of a client/server side handler, along w/ client-config and
  programatic API access changes.  It deploys/undeploys the service
  appropriately.  The handler adds a header element at each of the hook
  points, incrementing a counter in the header.  Lastly, on the client
  response, it checks to ensure the counter has been updated appropriate and
  calls a static method to the testcase (it's out-of-band) to confirm that
  the handlers executed appropriately.
  
  The code changes take into account the role/header/parameter options (which
  were wrong/missing in the code orginally checked in).
  
  Revision  Changes    Path
  1.55      +24 -18    xml-axis/java/src/org/apache/axis/client/AxisClient.java
  
  Index: AxisClient.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/client/AxisClient.java,v
  retrieving revision 1.54
  retrieving revision 1.55
  diff -u -r1.54 -r1.55
  --- AxisClient.java	29 Aug 2002 19:22:44 -0000	1.54
  +++ AxisClient.java	4 Sep 2002 13:25:02 -0000	1.55
  @@ -221,6 +221,10 @@
       }
   
       protected void invokeJAXRPCHandlers(MessageContext context){
  +	java.util.List chain = null;
  +	HandlerInfoChainFactory hiChainFactory = null;
  +	boolean clientSpecified = false;
  +
           Service service
               = (Service)context.getProperty(Call.WSDL_SERVICE);
           if(service == null) {
  @@ -234,27 +238,29 @@
   
           javax.xml.rpc.handler.HandlerRegistry registry;
           registry = service.getHandlerRegistry();
  -        if(registry == null) {
  -            return;
  +        if(registry != null) {
  +	    chain = registry.getHandlerChain(portName);
  +	    if ((chain != null) && (!chain.isEmpty())) {
  +		hiChainFactory = new HandlerInfoChainFactory(chain);
  +		clientSpecified = true;
  +	    }
           }
   
  -        java.util.List chain = registry.getHandlerChain(portName);
  +	// Otherwise, use the container support
  +	if (!clientSpecified) {
  +	    SOAPService soapService = context.getService();
  +	    if (soapService != null) {
  +		// A client configuration exists for this service.  Check
  +		// to see if there is a HandlerInfoChain configured on it.
  +		hiChainFactory = (HandlerInfoChainFactory) 
  +    		    soapService.getOption(Constants.ATTR_HANDLERINFOCHAIN);
  +	    }
  +	}
   
  -        if(chain == null || chain.isEmpty())
  -            return;
  -
  -        SOAPService    soapService = context.getService();
  -        if (soapService != null) {
  -            // A client configuration exists for this service.  Check to see
  -            //  if there is a HandlerInfoChain configured upon it.
  -            java.util.List cfgChain = (java.util.List) soapService.getOption(Constants.ATTR_HANDLERINFOCHAIN); 
  -            // GLT - merge this w/an existing chain  
  -            //  for now... use the container version
  -            chain = cfgChain;
  -        }
  -        
  -        HandlerInfoChainFactory handlerChainFactory = new HandlerInfoChainFactory(chain);
  -        HandlerChainImpl impl =  (HandlerChainImpl) handlerChainFactory.createHandlerChain();
  +	if (hiChainFactory == null) {
  +	    return;
  +	}
  +	HandlerChainImpl impl = (HandlerChainImpl) hiChainFactory.createHandlerChain();
   
           if(!context.getPastPivot()) {
               impl.handleRequest(context);
  
  
  
  1.3       +2 -2      xml-axis/java/src/org/apache/axis/handlers/HandlerInfoChainFactory.java
  
  Index: HandlerInfoChainFactory.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/handlers/HandlerInfoChainFactory.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- HandlerInfoChainFactory.java	29 Aug 2002 21:02:39 -0000	1.2
  +++ HandlerInfoChainFactory.java	4 Sep 2002 13:25:02 -0000	1.3
  @@ -73,8 +73,8 @@
           this.handlerInfos = handlerInfos;
       }
   
  -    public HandlerInfo getHandlerInfo(int index) {
  -        return (HandlerInfo) handlerInfos.get(index);
  +    public List getHandlerInfos() {
  +        return this.handlerInfos;
       }
   
       public HandlerChain createHandlerChain() {
  
  
  
  1.23      +1 -0      xml-axis/java/src/org/apache/axis/deployment/wsdd/WSDDConstants.java
  
  Index: WSDDConstants.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/deployment/wsdd/WSDDConstants.java,v
  retrieving revision 1.22
  retrieving revision 1.23
  diff -u -r1.22 -r1.23
  --- WSDDConstants.java	28 Aug 2002 14:51:49 -0000	1.22
  +++ WSDDConstants.java	4 Sep 2002 13:25:03 -0000	1.23
  @@ -155,6 +155,7 @@
       public static final QName QNAME_JAXRPC_HANDLERINFO = new QName(URI_WSDD, ELEM_WSDD_JAXRPC_HANDLERINFO);
       public static final QName QNAME_JAXRPC_HANDLERINFOCHAIN = new QName(URI_WSDD, ELEM_WSDD_JAXRPC_CHAIN);
       public static final QName QNAME_JAXRPC_HEADER = new QName(URI_WSDD, ELEM_WSDD_JAXRPC_HEADER);
  +    public static final QName QNAME_JAXRPC_ROLE = new QName(URI_WSDD,ELEM_WSDD_JAXRPC_ROLE);
   
       public static final String ATTR_LANG_SPEC_TYPE = "languageSpecificType";
       public static final String ATTR_QNAME = "qname";
  
  
  
  1.3       +40 -18    xml-axis/java/src/org/apache/axis/deployment/wsdd/WSDDJAXRPCHandlerInfo.java
  
  Index: WSDDJAXRPCHandlerInfo.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/deployment/wsdd/WSDDJAXRPCHandlerInfo.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- WSDDJAXRPCHandlerInfo.java	29 Aug 2002 19:20:20 -0000	1.2
  +++ WSDDJAXRPCHandlerInfo.java	4 Sep 2002 13:25:03 -0000	1.3
  @@ -64,17 +64,20 @@
   import java.io.IOException;
   import java.util.HashMap;
   import java.util.Map;
  +import java.util.Iterator;
  +import java.util.Set;
  +import java.util.Hashtable;
   
   
   /**
    *
    */
   public class WSDDJAXRPCHandlerInfo
  -    extends WSDDDeployableItem
  +    extends WSDDElement
   {
       private String _classname;
  -    private QName[] _headers;
       private Map _map;
  +    private QName[] _headers;
       
       /**
        * Default constructor
  @@ -109,7 +112,7 @@
                   Element param = elements[i];
                   String pname = param.getAttribute(ATTR_NAME);
                   String value = param.getAttribute(ATTR_VALUE);
  -                parameters.put(pname, value); 
  +				_map.put(pname, value);
               }           
           }
           
  @@ -122,8 +125,9 @@
                   if (headerStr == null ||  headerStr.equals("")) 
                       throw new WSDDException(JavaUtils.getMessage("noValidHeader"));     
   
  -                QName headerQName = XMLUtils.getQNameFromString(headerStr, e);
  -                headerList.add(headerQName); 
  +                QName headerQName = XMLUtils.getQNameFromString(headerStr, qElem);
  +                if (headerQName != null) 
  +	                headerList.add(headerQName); 
               }
               QName[] headers = new QName[headerList.size()];
               _headers = (QName[]) headerList.toArray(headers);
  @@ -148,7 +152,7 @@
       }
       
       public void setHandlerMap(Map map) {
  -        _map = map;
  +        // Add parameters to Parameters Table here
       }
       
       public QName[] getHeaders() {
  @@ -162,19 +166,37 @@
       public void writeToContext(SerializationContext context)
           throws IOException
       {
  -        // GLT - FIX THIS UP
  -        AttributesImpl attrs = new AttributesImpl();
  -        QName name = getQName();
  -        if (name != null) {
  -            attrs.addAttribute("", ATTR_NAME, ATTR_NAME,
  -                               "CDATA", context.qName2String(name));
  -        }
  +	AttributesImpl attrs = new AttributesImpl();
  +	attrs.addAttribute("", ATTR_CLASSNAME, ATTR_CLASSNAME,
  +				   "CDATA", _classname);
  +	context.startElement(WSDDConstants.QNAME_JAXRPC_HANDLERINFO, attrs);
  +
  +	Map ht =  _map;
  +	if (ht != null) {
  +	    Set keys= ht.keySet();
  +	    Iterator iter = keys.iterator();
  +	    while (iter.hasNext()) {
  +	    	String name = (String) iter.next();
  +	    	String value = (String) ht.get(name);
  +	    	attrs = new AttributesImpl();
  +	    	attrs.addAttribute("",ATTR_NAME, ATTR_NAME, "CDATA", name);
  +	    	attrs.addAttribute("",ATTR_VALUE, ATTR_VALUE, "CDATA", value);
  +	    	context.startElement(WSDDConstants.QNAME_PARAM,attrs);
  +	    	context.endElement();
  +	    }
  +	}
  +
  +	if (_headers != null) {
  +	    for (int i=0 ; i < _headers.length ; i++) {
  +		QName qname = _headers[i];
  +		attrs = new AttributesImpl();
  +		attrs.addAttribute("",ATTR_QNAME,ATTR_QNAME,"CDATA",context.qName2String(qname));
  +		context.startElement(WSDDConstants.QNAME_JAXRPC_HEADER,attrs);
  +		context.endElement();
  +	    }
  +	}
   
  -        attrs.addAttribute("", ATTR_TYPE, ATTR_TYPE,
  -                           "CDATA", context.qName2String(getType()));
  -        context.startElement(WSDDConstants.QNAME_HANDLER, attrs);
  -        writeParamsToContext(context);
  -        context.endElement();
  +	context.endElement();
       }
   
   }
  
  
  
  1.3       +38 -4     xml-axis/java/src/org/apache/axis/deployment/wsdd/WSDDJAXRPCHandlerInfoChain.java
  
  Index: WSDDJAXRPCHandlerInfoChain.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/deployment/wsdd/WSDDJAXRPCHandlerInfoChain.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- WSDDJAXRPCHandlerInfoChain.java	29 Aug 2002 19:20:20 -0000	1.2
  +++ WSDDJAXRPCHandlerInfoChain.java	4 Sep 2002 13:25:03 -0000	1.3
  @@ -55,19 +55,25 @@
   package org.apache.axis.deployment.wsdd;
   
   import org.apache.axis.handlers.HandlerInfoChainFactory;
  +import org.apache.axis.encoding.SerializationContext;
   import org.apache.axis.utils.ClassUtils;
   import org.w3c.dom.Element;
  +import org.xml.sax.helpers.AttributesImpl;
   
   import javax.xml.namespace.QName;
   import javax.xml.rpc.handler.HandlerInfo;
   import java.util.ArrayList;
   import java.util.Map;
  +import java.util.List;
  +import java.util.Iterator;
  +import java.io.IOException;
   
   /**
    *
    */
   public class WSDDJAXRPCHandlerInfoChain extends WSDDHandler {
       
  +    private ArrayList _hiList;
       private HandlerInfoChainFactory _hiChainFactory;
       private String[] _roles;
   
  @@ -85,12 +91,14 @@
       public WSDDJAXRPCHandlerInfoChain(Element e) throws WSDDException {
           super(e);
   
  -        ArrayList infoList = new ArrayList();
  +	ArrayList infoList = new ArrayList();
  +	_hiList = new ArrayList();
           Element[] elements = getChildElements(e, ELEM_WSDD_JAXRPC_HANDLERINFO);
           if (elements.length != 0) {
               for (int i = 0; i < elements.length; i++) {
                   WSDDJAXRPCHandlerInfo handlerInfo =
                       new WSDDJAXRPCHandlerInfo(elements[i]);
  +		_hiList.add(handlerInfo);
   
                   String handlerClassName = handlerInfo.getHandlerClassName();
                   Class handlerClass = null;
  @@ -119,9 +127,9 @@
                   String role = elements[i].getAttribute( ATTR_SOAPACTORNAME);
                   roleList.add(role);
               }
  -            String [] roles =new String[roleList.size()]; 
  -            roles = (String[]) roleList.toArray(roles);
  -            _hiChainFactory.setRoles(roles);
  +            _roles =new String[roleList.size()]; 
  +            _roles = (String[]) roleList.toArray(_roles);
  +            _hiChainFactory.setRoles(_roles);
           }
           
       }
  @@ -138,4 +146,30 @@
           return WSDDConstants.QNAME_JAXRPC_HANDLERINFOCHAIN;
       }
       
  +    /**
  +     * Write this element out to a SerializationContext
  +     */
  +    public void writeToContext(SerializationContext context)
  +            throws IOException {
  +			context.startElement(QNAME_JAXRPC_HANDLERINFOCHAIN,null);
  +			
  +			List his = _hiList;
  +			Iterator iter = his.iterator();
  +			while (iter.hasNext()) {
  +				WSDDJAXRPCHandlerInfo hi = (WSDDJAXRPCHandlerInfo) iter.next();
  +				hi.writeToContext(context);
  +			}
  +			
  +			if (_roles != null) {
  +				for (int i=0; i < _roles.length ; i++) {
  +		        	AttributesImpl attrs1 = new AttributesImpl();
  +	            	attrs1.addAttribute("", ATTR_SOAPACTORNAME, ATTR_SOAPACTORNAME,
  +                               "CDATA", _roles[i]);
  +					context.startElement(QNAME_JAXRPC_ROLE,attrs1);
  +					context.endElement();
  +				}
  +			}
  +			
  +			context.endElement();
  +	}
   }
  
  
  
  1.86      +19 -8     xml-axis/java/src/org/apache/axis/deployment/wsdd/WSDDService.java
  
  Index: WSDDService.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/deployment/wsdd/WSDDService.java,v
  retrieving revision 1.85
  retrieving revision 1.86
  diff -u -r1.85 -r1.86
  --- WSDDService.java	29 Aug 2002 21:02:40 -0000	1.85
  +++ WSDDService.java	4 Sep 2002 13:25:03 -0000	1.86
  @@ -87,6 +87,8 @@
   import java.util.ArrayList;
   import java.util.StringTokenizer;
   import java.util.Vector;
  +import java.util.List;
  +import java.util.Iterator;
   
   /**
    * A service represented in WSDD.
  @@ -119,7 +121,8 @@
        */
       private QName providerQName;
   
  -    private HandlerInfoChainFactory _hiChainFactory;
  +//    private HandlerInfoChainFactory _hiChainFactory;
  +	private WSDDJAXRPCHandlerInfoChain _wsddHIchain;
   
       ServiceDesc desc = new ServiceDesc();
   
  @@ -221,11 +224,10 @@
               }
           }
   
  -        // Add in JAX-RPC support for HandlerInfo chains
  +	// Add in JAX-RPC support for HandlerInfo chains
           Element hcEl = getChildElement(e, ELEM_WSDD_JAXRPC_CHAIN);
           if (hcEl != null) {
  -        WSDDJAXRPCHandlerInfoChain wsddHIChain = new WSDDJAXRPCHandlerInfoChain(hcEl);
  -            _hiChainFactory = wsddHIChain.getHandlerChainFactory();
  +	    	_wsddHIchain = new WSDDJAXRPCHandlerInfoChain(hcEl);
           }
   
           initTMR();
  @@ -423,10 +425,12 @@
               service.setOption(AxisEngine.PROP_SEND_XSI, Boolean.FALSE);
           }
   
  -        // Set handlerInfoChain
  -        if (_hiChainFactory != null) {
  -            service.setOption(Constants.ATTR_HANDLERINFOCHAIN, _hiChainFactory);
  -        }
  +	// Set handlerInfoChain
  +	if (_wsddHIchain != null) {
  +            HandlerInfoChainFactory hiChainFactory = _wsddHIchain.getHandlerChainFactory();
  +
  +	    service.setOption(Constants.ATTR_HANDLERINFOCHAIN, hiChainFactory);
  +	}
   
           AxisEngine.normaliseOptions(service);
   
  @@ -576,7 +580,14 @@
               context.endElement();
           }
   
  +		if (_wsddHIchain != null) {
  +			_wsddHIchain.writeToContext(context);
  +
  +		}
  +		
           context.endElement();
  +
  +
       }
   
       public void setCachedService(SOAPService service)
  
  
  
  1.125     +19 -0     xml-axis/java/test/wsdl/Wsdl2javaTestSuite.xml
  
  Index: Wsdl2javaTestSuite.xml
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/test/wsdl/Wsdl2javaTestSuite.xml,v
  retrieving revision 1.124
  retrieving revision 1.125
  diff -u -r1.124 -r1.125
  --- Wsdl2javaTestSuite.xml	29 Aug 2002 21:17:58 -0000	1.124
  +++ Wsdl2javaTestSuite.xml	4 Sep 2002 13:25:03 -0000	1.125
  @@ -982,6 +982,25 @@
                  testcase="no">
       </wsdl2java>
   
  +    <wsdl2java url="test/wsdl/jaxrpchandler/jaxrpchandler.wsdl"
  +               output="build/work"
  +               serverSide="no"
  +               testcase="no">
  +    </wsdl2java>
  +    <!-- Copy modified files to work directory -->
  +    <copy todir="${build.dir}/work/test/wsdl/jaxrpchandler" overwrite="yes">
  +      <fileset dir="${test.dir}/wsdl/jaxrpchandler">
  +        <include name="*.java"/>
  +        <include name="*.wsdd"/>
  +      </fileset>
  +    </copy>
  +    <!-- Compile Java -->
  +    <javac srcdir="${build.dir}/work" destdir="${build.dest}" debug="${debug}">
  +      <classpath refid="test-classpath" />
  +      <include name="test/wsdl/jaxprchandler/**.java" />
  +    </javac>
  +
  +
       <!-- The following WSDL are BAD.  We're keeping them here so we can -->
       <!-- check periodically to see whether the owner has fixed them.    -->