glyn        02/04/10 08:23:58

  Modified:    java/src/org/apache/axis/message SOAPEnvelope.java
  Added:       java/src/org/apache/axis/message SOAPHeader.java
  Log:
  Factor SOAPHeader, a holder for SOAPHeaderElement, out of SOAPEnvelope.
  
  Still need to implement javax.xml.soap.SOAPHeader-specific methods.
  
  Revision  Changes    Path
  1.62      +39 -98    xml-axis/java/src/org/apache/axis/message/SOAPEnvelope.java
  
  Index: SOAPEnvelope.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/message/SOAPEnvelope.java,v
  retrieving revision 1.61
  retrieving revision 1.62
  diff -u -r1.61 -r1.62
  --- SOAPEnvelope.java 26 Mar 2002 16:40:35 -0000      1.61
  +++ SOAPEnvelope.java 10 Apr 2002 15:23:58 -0000      1.62
  @@ -85,8 +85,9 @@
   {
       protected static Log log =
           LogFactory.getLog(SOAPEnvelope.class.getName());
  +
  +    private SOAPHeader header;
       
  -    public Vector headers = new Vector();
       public Vector bodyElements = new Vector();
       public Vector trailers = new Vector();
       private SOAPConstants soapConstants;
  @@ -112,6 +113,7 @@
       public SOAPEnvelope(boolean registerPrefixes, SOAPConstants soapConstants)
       {
           this.soapConstants = soapConstants;
  +        header = new SOAPHeader(soapConstants);
   
           if (registerPrefixes) {
               if (namespaces == null)
  @@ -130,6 +132,7 @@
   
       public SOAPEnvelope(InputStream input) throws SAXException {
           InputSource is = new InputSource(input);
  +        header = new SOAPHeader(soapConstants); // soapConstants = null!
           DeserializationContext dser = null ;
           AxisClient     tmpEngine = new AxisClient(new NullProvider());
           MessageContext msgContext = new MessageContext(tmpEngine);
  @@ -168,7 +171,11 @@
       
       public Vector getHeaders() throws AxisFault
       {
  -        return headers;
  +        if (header != null) {
  +            return header.getHeaders();
  +        } else {
  +            return new Vector();
  +        }
       }
       
       /**
  @@ -176,26 +183,20 @@
        */ 
       public Vector getHeadersByActor(ArrayList actors)
       {
  -        Vector results = new Vector();
  -        Iterator i = headers.iterator();
  -        while (i.hasNext()) {
  -            SOAPHeaderElement header = (SOAPHeaderElement)i.next();
  -            // Always process NEXT's, and then anything else in our list
  -            if (Constants.ACTOR_NEXT.equals(header.getActor()) || 
  -                (actors != null && actors.contains(header.getActor()))) {
  -                results.add(header);
  -            }
  +        if (header != null) {
  +            return header.getHeadersByActor(actors);
  +        } else {
  +            return new Vector();
           }
  -        
  -        return results;
       }
       
  -    public void addHeader(SOAPHeaderElement header)
  +    public void addHeader(SOAPHeaderElement hdr)
       {
  -        if (log.isDebugEnabled())
  -            log.debug(JavaUtils.getMessage("addHeader00"));
  -        header.setEnvelope(this);
  -        headers.addElement(header);
  +        if (header == null) {
  +            header = new SOAPHeader(soapConstants);
  +        }
  +        hdr.setEnvelope(this);
  +        header.addHeader(hdr);
           _isDirty = true;
       }
       
  @@ -209,12 +210,12 @@
           _isDirty = true;
       }
       
  -    public void removeHeader(SOAPHeaderElement header)
  +    public void removeHeader(SOAPHeaderElement hdr)
       {
  -        if (log.isDebugEnabled())
  -            log.debug(JavaUtils.getMessage("removeHeader00"));
  -        headers.removeElement(header);
  -        _isDirty = true;
  +        if (header != null) {
  +            header.removeHeader(hdr);
  +            _isDirty = true;
  +        }
       }
       
       public void removeBodyElement(SOAPBodyElement element)
  @@ -269,28 +270,13 @@
                                                boolean accessAllHeaders)
           throws AxisFault
       {
  -        SOAPHeaderElement header = (SOAPHeaderElement)findElement(headers,
  -                                                                  namespace,
  -                                                                  localPart);
  -
  -        // If we're operating within an AxisEngine, respect its actor list
  -        // unless told otherwise
  -        if (!accessAllHeaders) {
  -            MessageContext mc = MessageContext.getCurrentContext();
  -            if (mc != null) {
  -                if (header != null) {
  -                    String actor = header.getActor();
  -                    ArrayList actors = mc.getAxisEngine().getActorURIs();
  -                    if ((actor != null) &&
  -                            !Constants.ACTOR_NEXT.equals(actor) &&
  -                            (actors == null || !actors.contains(actor))) {
  -                        header = null;
  -                    }
  -                }
  -            }
  +        if (header != null) {
  +            return header.getHeaderByName(namespace,
  +                                          localPart,
  +                                          accessAllHeaders);
  +        } else {
  +            return null;
           }
  -        
  -        return header;
       }
       
       public SOAPBodyElement getBodyByName(String namespace, String localPart)
  @@ -339,44 +325,13 @@
                                           boolean accessAllHeaders)
           throws AxisFault
       {
  -        ArrayList actors = null;
  -        boolean firstTime = false;
  -        
  -        /** This might be optimizable by creating a custom Enumeration
  -         * which moves through the headers list (parsing on demand, again),
  -         * returning only the next one each time.... this is Q&D for now.
  -         */
  -        Vector v = new Vector();
  -        Enumeration e = headers.elements();
  -        SOAPHeaderElement header;
  -        while (e.hasMoreElements()) {
  -            header = (SOAPHeaderElement)e.nextElement();
  -            if (header.getNamespaceURI().equals(namespace) &&
  -                header.getName().equals(localPart)) {
  -
  -                if (!accessAllHeaders) {
  -                    if (firstTime) {
  -                        // Do one-time setup
  -                        MessageContext mc = MessageContext.getCurrentContext();
  -                        if (mc != null)
  -                            actors = mc.getAxisEngine().getActorURIs();
  -                            
  -                        firstTime = false;
  -                    }
  -
  -                    String actor = header.getActor();
  -                    if ((actor != null) &&
  -                            !Constants.ACTOR_NEXT.equals(actor) &&
  -                            (actors == null || !actors.contains(actor))) {
  -                        continue;
  -                    }
  -                }
  -
  -                v.addElement(header);
  -            }
  +        if (header != null) {
  +            return header.getHeadersByName(namespace,
  +                                           localPart,
  +                                           accessAllHeaders);
  +        } else {
  +            return new Vector().elements();
           }
  -        
  -        return v.elements();
       }
       
       /** Should make SOAPSerializationException?
  @@ -398,26 +353,12 @@
           
           Enumeration enum;
           
  +        // Output <SOAP-ENV:Envelope>
           context.startElement(new QName(soapConstants.getEnvelopeURI(),
                                          Constants.ELEM_ENVELOPE), attributes);
           
  -        if (log.isDebugEnabled())
  -            log.debug(headers.size() + " "
  -                    + JavaUtils.getMessage("headers00"));
  -        
  -        if (!headers.isEmpty()) {
  -            // Output <SOAP-ENV:Header>
  -            context.startElement(new QName(soapConstants.getEnvelopeURI(),
  -                                           Constants.ELEM_HEADER), null);
  -            enum = headers.elements();
  -            while (enum.hasMoreElements()) {
  -                SOAPHeaderElement header = (SOAPHeaderElement)enum.
  -                                               nextElement();
  -                header.output(context);
  -                // Output this header element
  -            }
  -            // Output </SOAP-ENV:Header>
  -            context.endElement();
  +        if (header != null) {
  +            header.outputImpl(context);
           }
   
           if (bodyElements.isEmpty()) {
  
  
  
  1.38      +188 -65   xml-axis/java/src/org/apache/axis/message/SOAPHeader.java
  
  
  
  


Reply via email to