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/11/01 17:40:08 UTC

cvs commit: xml-axis/java/src/org/apache/axis/client Stub.java

dims        2002/11/01 08:40:08

  Modified:    java/src/org/apache/axis/wsdl/toJava JavaStubWriter.java
               java/test/wsdl/interop4/groupi Round4XSDTestTestCase.java
               java/src/org/apache/axis/client Stub.java
  Log:
  1. Possible Fix for Bug 13618 - Implicit header support
  2. Update Round4 XSD Test to test the new get/set header in Stub.
  
  Revision  Changes    Path
  1.105     +10 -3     xml-axis/java/src/org/apache/axis/wsdl/toJava/JavaStubWriter.java
  
  Index: JavaStubWriter.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/wsdl/toJava/JavaStubWriter.java,v
  retrieving revision 1.104
  retrieving revision 1.105
  diff -u -r1.104 -r1.105
  --- JavaStubWriter.java	21 Oct 2002 02:13:47 -0000	1.104
  +++ JavaStubWriter.java	1 Nov 2002 16:40:08 -0000	1.105
  @@ -54,9 +54,9 @@
    */
   package org.apache.axis.wsdl.toJava;
   
  -import org.apache.axis.utils.Messages;
   import org.apache.axis.enum.Style;
   import org.apache.axis.enum.Use;
  +import org.apache.axis.utils.Messages;
   import org.apache.axis.wsdl.symbolTable.BindingEntry;
   import org.apache.axis.wsdl.symbolTable.CollectionTE;
   import org.apache.axis.wsdl.symbolTable.Element;
  @@ -723,12 +723,15 @@
           }
           pw.println();
   
  +        // Set the headers
  +        pw.println("        setRequestHeaders(_call);");
  +
           // Invoke the operation
           if (oneway) {
               pw.print("        _call.invokeOneWay(");
           }
           else {
  -            pw.print("        java.lang.Object _resp = _call.invoke(");
  +        	pw.print("        java.lang.Object _resp = _call.invoke(");
           }
           pw.print("new java.lang.Object[] {");
           writeParameters(pw, parms);
  @@ -773,10 +776,12 @@
           pw.println("        if (_resp instanceof java.rmi.RemoteException) {");
           pw.println("            throw (java.rmi.RemoteException)_resp;");
           pw.println("        }");
  -
  + 
           int allOuts = parms.outputs + parms.inouts;
           if (allOuts > 0) {
               pw.println("        else {");
  +            pw.println("            getResponseHeaders(_call);");
  +        
               if (allOuts == 1) {
                   if (parms.returnParam != null) {
                       writeOutputAssign(pw, "return ", parms.returnParam.getType(),
  @@ -821,6 +826,8 @@
   
               }
               pw.println("        }");
  +        } else {
  +            pw.println("        getResponseHeaders(_call);");
           }
       } // writeResponseHandling
   
  
  
  
  1.4       +6 -1      xml-axis/java/test/wsdl/interop4/groupi/Round4XSDTestTestCase.java
  
  Index: Round4XSDTestTestCase.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/test/wsdl/interop4/groupi/Round4XSDTestTestCase.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- Round4XSDTestTestCase.java	9 Oct 2002 12:24:27 -0000	1.3
  +++ Round4XSDTestTestCase.java	1 Nov 2002 16:40:08 -0000	1.4
  @@ -600,8 +600,13 @@
           assertTrue("binding is null", binding != null);
   
           try {
  -            //TODO: What do we need to do here?
  +            Round4XSDTestSoapStub stub = (Round4XSDTestSoapStub) binding;
  +            String namespace = url.toString();
  +            stub.setHeader(namespace, "test1", "header1");
  +            stub.setHeader(namespace, "test2", "header2");
               binding.echoVoidSoapHeader();
  +            assertEquals(stub.getHeader(namespace, "test1").getObjectValue(), "header1");
  +            assertEquals(stub.getHeader(namespace, "test2").getObjectValue(), "header2");
           }
           catch (java.rmi.RemoteException re) {
               throw new junit.framework.AssertionFailedError("Remote Exception caught: " + re);
  
  
  
  1.19      +84 -11    xml-axis/java/src/org/apache/axis/client/Stub.java
  
  Index: Stub.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/client/Stub.java,v
  retrieving revision 1.18
  retrieving revision 1.19
  diff -u -r1.18 -r1.19
  --- Stub.java	18 Sep 2002 16:10:42 -0000	1.18
  +++ Stub.java	1 Nov 2002 16:40:08 -0000	1.19
  @@ -55,21 +55,18 @@
   
   package org.apache.axis.client;
   
  -import java.net.MalformedURLException;
  -import java.net.URL;
  -
  -import java.util.Iterator;
  -import java.util.Properties;
  +import org.apache.axis.AxisFault;
  +import org.apache.axis.message.SOAPHeaderElement;
  +import org.apache.axis.utils.Messages;
   
   import javax.xml.namespace.QName;
  -
   import javax.xml.rpc.JAXRPCException;
   import javax.xml.rpc.Service;
  -
  -import org.apache.axis.AxisFault;
  -
  -import org.apache.axis.utils.JavaUtils;
  -import org.apache.axis.utils.Messages;
  +import java.net.MalformedURLException;
  +import java.net.URL;
  +import java.util.Iterator;
  +import java.util.Properties;
  +import java.util.Vector;
   
   /**
   * This class is the base for all generated stubs.
  @@ -95,6 +92,9 @@
       protected Integer    cachedTimeout      = null;
       protected QName      cachedPortName     = null;
   
  +    // Support for Header
  +    private Vector headers = new Vector();
  +
       // Flag to determine whether this is the first call to register type mappings.
       // This need not be synchronized because firstCall is ONLY called from within
       // a synchronized block in the generated stub code.
  @@ -290,4 +290,77 @@
           maintainSession = session;
           cachedProperties.put(Call.SESSION_MAINTAIN_PROPERTY, new Boolean(session));
       } // setmaintainSession
  +
  +
  +    /**
  +     * Set the header
  +     * @namespace namespace
  +     * @param partName that uniquely identify a header object.
  +     * @param headerValue Object that is sent in the request as a SOAPHeader
  +     * @return void
  +     */
  +    public void setHeader(String namespace, String partName, Object headerValue) {
  +        headers.add(new SOAPHeaderElement(namespace, partName, headerValue));
  +    }
  +
  +    /**
  +     * Set the header
  +     */ 
  +    public void setHeader(SOAPHeaderElement header) {
  +        headers.add(header);
  +    }
  +
  +    /**
  +     * Get the header element
  +     */ 
  +    public SOAPHeaderElement getHeader(String namespace, String partName) {
  +        for(int i=0;i<headers.size();i++) {
  +            SOAPHeaderElement header = (SOAPHeaderElement)headers.get(i);
  +            if(header.getNamespaceURI().equals(namespace) &&
  +               header.getName().equals(partName))
  +                return header;
  +        }
  +        return null;
  +    }
  +    
  +    /**
  +     * Get the array of header elements
  +     */ 
  +    public SOAPHeaderElement[] getHeaders() {
  +        SOAPHeaderElement[] array = new SOAPHeaderElement[headers.size()];
  +        headers.copyInto(array);
  +        return array;
  +    }
  +
  +    /**
  +     * This method clears both requestHeaders and responseHeaders hashtables.
  +     * @return void
  +     */
  +    public void clearHeaders() {
  +        headers.clear();
  +    }
  +    
  +    protected void setRequestHeaders(org.apache.axis.client.Call call) throws AxisFault {		
  +        SOAPHeaderElement[] headers = getHeaders();
  +        for(int i=0;i<headers.length;i++){
  +            call.addHeader(headers[i]);
  +        }
  +    }  
  +
  +    /**
  +     * Helper method for updating headers from the response.
  +     * @return void
  +     */
  +    protected void getResponseHeaders(org.apache.axis.client.Call call) throws AxisFault {		
  +        org.apache.axis.Message response = call.getMessageContext().getResponseMessage();      
  +        org.apache.axis.message.SOAPEnvelope env = response.getSOAPEnvelope();
  +            
  +        if ( env != null )	{
  +            Iterator iterator = env.getHeaders().iterator();
  +            while(iterator.hasNext()){
  +                SOAPHeaderElement header = (SOAPHeaderElement) iterator.next();
  +                headers.add(header);
  +            }
  +        }				
  +    }  
   }