glyn        02/05/16 05:54:36

  Modified:    java     TODO.txt
               java/src/org/apache/axis/client Call.java
               java/src/org/apache/axis/encoding
                        DeserializationContextImpl.java
               java/src/org/apache/axis/message BodyBuilder.java
                        HeaderBuilder.java MessageElement.java
                        SOAPBodyElement.java SOAPEnvelope.java
                        SOAPHeader.java SOAPHeaderElement.java
               java/src/org/apache/axis/utils resources.properties
  Added:       java/src/org/apache/axis/message SOAPBody.java
  Log:
  JAXM plumbing continued.
  
  Introduce SOAPBody into the parse tree.
  
  SOAPBodyElement.setParentElement now issues a warning if a SOAPEnvelope
  is passed to it rather than a SOAPBody. However, the main use of this
  was in Call and could be deleted since SOAPEnvelope.addBodyElement establishes
  the parent-child relationship automatically.
  
  Revision  Changes    Path
  1.48      +1 -1      xml-axis/java/TODO.txt
  
  Index: TODO.txt
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/TODO.txt,v
  retrieving revision 1.47
  retrieving revision 1.48
  diff -u -r1.47 -r1.48
  --- TODO.txt  26 Apr 2002 13:01:08 -0000      1.47
  +++ TODO.txt  16 May 2002 12:54:36 -0000      1.48
  @@ -49,7 +49,7 @@
   JAXM COMPATIBILITY
   ------------------
   * <Glyn> Implement javax.xml.soap interfaces in message subsystem.
  -! <> Implement javax.xml.messaging.
  +         (Not forgetting: SOAPBody.addFault/getFault/hasFault)
   
   SOAP 1.2 SUPPORT
   ----------------
  
  
  
  1.122     +0 -1      xml-axis/java/src/org/apache/axis/client/Call.java
  
  Index: Call.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/client/Call.java,v
  retrieving revision 1.121
  retrieving revision 1.122
  diff -u -r1.121 -r1.122
  --- Call.java 13 May 2002 14:49:00 -0000      1.121
  +++ Call.java 16 May 2002 12:54:36 -0000      1.122
  @@ -1684,7 +1684,6 @@
               setRequestMessage(reqMsg);
   
               reqEnv.addBodyElement(body);
  -            body.setParentElement(reqEnv);
               reqEnv.setMessageType(Message.REQUEST);
   
               invoke();
  
  
  
  1.28      +2 -2      
xml-axis/java/src/org/apache/axis/encoding/DeserializationContextImpl.java
  
  Index: DeserializationContextImpl.java
  ===================================================================
  RCS file: 
/home/cvs/xml-axis/java/src/org/apache/axis/encoding/DeserializationContextImpl.java,v
  retrieving revision 1.27
  retrieving revision 1.28
  diff -u -r1.27 -r1.28
  --- DeserializationContextImpl.java   9 May 2002 18:29:37 -0000       1.27
  +++ DeserializationContextImpl.java   16 May 2002 12:54:36 -0000      1.28
  @@ -647,9 +647,9 @@
               /*
                * The only checked exception that may be thrown from setParent
                * occurs if the parent already has an explicit object value,
  -             * which should never occur during deserialization. An error
  -             * has already been logged, so no-op.
  +             * which should never occur during deserialization.
                */
  +            log.fatal(JavaUtils.getMessage("exception00"), e);
           }
           curElement = elem;
   
  
  
  
  1.28      +17 -0     xml-axis/java/src/org/apache/axis/message/BodyBuilder.java
  
  Index: BodyBuilder.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/message/BodyBuilder.java,v
  retrieving revision 1.27
  retrieving revision 1.28
  diff -u -r1.27 -r1.28
  --- BodyBuilder.java  9 May 2002 18:25:17 -0000       1.27
  +++ BodyBuilder.java  16 May 2002 12:54:36 -0000      1.28
  @@ -71,6 +71,7 @@
   import org.xml.sax.Attributes;
   import org.xml.sax.SAXException;
   
  +import javax.xml.soap.SOAPException;
   import javax.xml.rpc.namespace.QName;
   
   public class BodyBuilder extends SOAPHandler
  @@ -88,6 +89,22 @@
           this.envelope = envelope;
       }
       
  +    public void startElement(String namespace, String localName,
  +                             String qName, Attributes attributes,
  +                             DeserializationContext context)
  +        throws SAXException
  +    {
  +        if (!context.isDoneParsing()) {
  +            if (myElement == null) {
  +                myElement = new SOAPBody(namespace, localName, qName,
  +                                         attributes, context,
  +                                         envelope.getSOAPConstants());
  +                envelope.setBody((SOAPBody)myElement);
  +            }
  +            context.pushNewElement(myElement);
  +        }
  +    }
  +
       public SOAPHandler onStartChild(String namespace,
                                        String localName,
                                        String prefix,
  
  
  
  1.10      +24 -0     xml-axis/java/src/org/apache/axis/message/HeaderBuilder.java
  
  Index: HeaderBuilder.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/message/HeaderBuilder.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- HeaderBuilder.java        12 Apr 2002 09:46:36 -0000      1.9
  +++ HeaderBuilder.java        16 May 2002 12:54:36 -0000      1.10
  @@ -61,11 +61,19 @@
    */
   
   import org.apache.axis.encoding.DeserializationContext;
  +import org.apache.axis.utils.JavaUtils;
  +import org.apache.commons.logging.Log;
  +import org.apache.commons.logging.LogFactory;
   import org.xml.sax.Attributes;
   import org.xml.sax.SAXException;
   
  +import javax.xml.soap.SOAPException;
  +
   public class HeaderBuilder extends SOAPHandler
   {
  +    protected static Log log =
  +        LogFactory.getLog(HeaderBuilder.class.getName());
  +
       private SOAPHeaderElement header;
       private SOAPEnvelope envelope;
       
  @@ -74,6 +82,22 @@
           this.envelope = envelope;
       }
       
  +    public void startElement(String namespace, String localName,
  +                             String qName, Attributes attributes,
  +                             DeserializationContext context)
  +        throws SAXException
  +    {
  +        if (!context.isDoneParsing()) {
  +            if (myElement == null) {
  +                myElement = new SOAPHeader(namespace, localName, qName,
  +                                           attributes, context,
  +                                           envelope.getSOAPConstants());
  +                envelope.setHeader((SOAPHeader)myElement);
  +            }
  +            context.pushNewElement(myElement);
  +        }
  +    }
  +
       public SOAPHandler onStartChild(String namespace,
                                       String localName,
                                       String prefix,
  
  
  
  1.94      +6 -0      xml-axis/java/src/org/apache/axis/message/MessageElement.java
  
  Index: MessageElement.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/message/MessageElement.java,v
  retrieving revision 1.93
  retrieving revision 1.94
  diff -u -r1.93 -r1.94
  --- MessageElement.java       9 Apr 2002 23:44:48 -0000       1.93
  +++ MessageElement.java       16 May 2002 12:54:36 -0000      1.94
  @@ -144,6 +144,12 @@
           name = localPart;
       }
   
  +    MessageElement(Name eltName)
  +    {
  +        this(eltName.getURI(), eltName.getLocalName());
  +        prefix = eltName.getPrefix();
  +    }
  +
       MessageElement(String namespace, String localPart, Object value)
       {
           this(namespace, localPart);
  
  
  
  1.15      +36 -2     xml-axis/java/src/org/apache/axis/message/SOAPBodyElement.java
  
  Index: SOAPBodyElement.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/message/SOAPBodyElement.java,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -u -r1.14 -r1.15
  --- SOAPBodyElement.java      26 Mar 2002 09:45:45 -0000      1.14
  +++ SOAPBodyElement.java      16 May 2002 12:54:36 -0000      1.15
  @@ -56,17 +56,27 @@
   
   import org.apache.axis.encoding.DeserializationContext;
   import org.apache.axis.utils.XMLUtils;
  +import org.apache.axis.utils.JavaUtils;
   import org.w3c.dom.Element;
   import org.xml.sax.Attributes;
   
  +import org.apache.commons.logging.Log;
  +import org.apache.commons.logging.LogFactory;
  +
  +import javax.xml.soap.SOAPElement;
  +import javax.xml.soap.SOAPException;
  +import javax.xml.soap.Name;
   import java.io.InputStream;
   
  -/** A Body element.
  - * 
  +/** 
  + * A Body element.
    */
   public class SOAPBodyElement extends MessageElement
       implements javax.xml.soap.SOAPBodyElement
   {
  +    private static Log log = LogFactory.getLog(SOAPBodyElement.class.
  +                                               getName());
  +
       public SOAPBodyElement(String namespace,
                              String localPart,
                              String prefix,
  @@ -75,6 +85,11 @@
       {
           super(namespace, localPart, prefix, attributes, context);
       }
  +
  +    public SOAPBodyElement(Name name)
  +    {
  +        super(name);
  +    }
       
       public SOAPBodyElement(Element elem)
       {
  @@ -88,5 +103,24 @@
       public SOAPBodyElement(InputStream input) 
       {
           super( XMLUtils.newDocument(input).getDocumentElement() );
  +    }
  +
  +    public void setParentElement(SOAPElement parent) throws SOAPException {
  +        // migration aid
  +        if (parent instanceof SOAPEnvelope) {
  +            log.warn(JavaUtils.getMessage("bodyElementParent"));
  +            parent = ((SOAPEnvelope)parent).getBody();
  +        }
  +        try {
  +            // cast to force exception if wrong type
  +            super.setParentElement((SOAPBody)parent);
  +        } catch (Throwable t) {
  +            throw new SOAPException(t);
  +        }
  +    }
  +
  +    public void detachNode() {
  +        ((SOAPBody)parent).removeBodyElement(this);
  +        super.detachNode();
       }
   }
  
  
  
  1.65      +102 -57   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.64
  retrieving revision 1.65
  diff -u -r1.64 -r1.65
  --- SOAPEnvelope.java 12 Apr 2002 09:46:36 -0000      1.64
  +++ SOAPEnvelope.java 16 May 2002 12:54:36 -0000      1.65
  @@ -74,6 +74,7 @@
   import org.xml.sax.SAXException;
   import org.xml.sax.helpers.AttributesImpl;
   
  +import javax.xml.soap.SOAPException;
   import javax.xml.rpc.namespace.QName;
   
   import java.io.InputStream;
  @@ -83,13 +84,14 @@
   import java.util.Vector;
   
   public class SOAPEnvelope extends MessageElement
  +    implements javax.xml.soap.SOAPEnvelope
   {
       protected static Log log =
           LogFactory.getLog(SOAPEnvelope.class.getName());
   
       private SOAPHeader header;
  +    private SOAPBody body;
       
  -    public Vector bodyElements = new Vector();
       public Vector trailers = new Vector();
       private SOAPConstants soapConstants;
   
  @@ -154,7 +156,11 @@
       
       public Vector getBodyElements() throws AxisFault
       {
  -        return bodyElements;
  +        if (body != null) {
  +            return body.getBodyElements();
  +        } else {
  +            return new Vector();
  +        }
       }
       
       public Vector getTrailers()
  @@ -164,10 +170,11 @@
       
       public SOAPBodyElement getFirstBody() throws AxisFault
       {
  -        if (bodyElements.isEmpty())
  +        if (body == null) {
               return null;
  -        
  -        return (SOAPBodyElement)bodyElements.elementAt(0);
  +        } else {
  +            return body.getFirstBody();
  +        }
       }
       
       public Vector getHeaders() throws AxisFault
  @@ -203,10 +210,11 @@
       
       public void addBodyElement(SOAPBodyElement element)
       {
  -        if (log.isDebugEnabled())
  -            log.debug(JavaUtils.getMessage("addBody00"));
  +        if (body == null) {
  +            body = new SOAPBody(this, soapConstants);
  +        }
           element.setEnvelope(this);
  -        bodyElements.addElement(element);
  +        body.addBodyElement(element);
   
           _isDirty = true;
       }
  @@ -214,7 +222,17 @@
       public void removeHeaders() {
           header = null;
       }
  -    
  +
  +    public void setHeader(SOAPHeader hdr) {
  +        header = hdr;
  +        try {
  +            header.setParentElement(this);
  +        } catch (SOAPException ex) {
  +            // class cast should never fail when parent is a SOAPEnvelope
  +            log.fatal(JavaUtils.getMessage("exception00"), ex);
  +        }
  +    }
  +
       public void removeHeader(SOAPHeaderElement hdr)
       {
           if (header != null) {
  @@ -223,12 +241,26 @@
           }
       }
       
  +    public void removeBody() {
  +        body = null;
  +    }
  +
  +    public void setBody(SOAPBody body) {
  +        this.body = body;
  +        try {
  +            body.setParentElement(this);
  +        } catch (SOAPException ex) {
  +            // class cast should never fail when parent is a SOAPEnvelope
  +            log.fatal(JavaUtils.getMessage("exception00"), ex);
  +        }
  +    }
  +
       public void removeBodyElement(SOAPBodyElement element)
       {
  -        if (log.isDebugEnabled())
  -            log.debug(JavaUtils.getMessage("removeBody00"));
  -        bodyElements.removeElement(element);
  -        _isDirty = true;
  +        if (body != null) {
  +            body.removeBodyElement(element);
  +            _isDirty = true;
  +        }
       }
       
       public void removeTrailer(MessageElement element)
  @@ -241,9 +273,10 @@
       
       public void clearBody()
       {
  -        if (!bodyElements.isEmpty())
  -            bodyElements.removeAllElements();
  -        _isDirty = true;
  +        if (body != null) {
  +            body.clearBody();
  +            _isDirty = true;
  +        }
       }
       
       public void addTrailer(MessageElement element)
  @@ -287,27 +320,11 @@
       public SOAPBodyElement getBodyByName(String namespace, String localPart)
           throws AxisFault
       {
  -        return (SOAPBodyElement)findElement(bodyElements,
  -                                            namespace,
  -                                            localPart);
  -    }
  -    
  -    protected MessageElement findElement(Vector vec, String namespace,
  -                                  String localPart)
  -    {
  -        if (vec.isEmpty())
  +        if (body == null) {
               return null;
  -        
  -        Enumeration e = vec.elements();
  -        MessageElement element;
  -        while (e.hasMoreElements()) {
  -            element = (MessageElement)e.nextElement();
  -            if (element.getNamespaceURI().equals(namespace) &&
  -                element.getName().equals(localPart))
  -                return element;
  +        } else {
  +            return body.getBodyByName(namespace, localPart);
           }
  -        
  -        return null;
       }
       
       public Enumeration getHeadersByName(String namespace, String localPart)
  @@ -361,34 +378,17 @@
           // Output <SOAP-ENV:Envelope>
           context.startElement(new QName(soapConstants.getEnvelopeURI(),
                                          Constants.ELEM_ENVELOPE), attributes);
  -        
  +
  +        // Output headers        
           if (header != null) {
               header.outputImpl(context);
           }
   
  -        if (bodyElements.isEmpty()) {
  -            // This is a problem.
  -            // throw new Exception("No body elements!");
  -            // If there are no body elements just return - it's ok that
  -            // the body is empty
  +        // Output body
  +        if (body != null) {
  +            body.outputImpl(context);
           }
   
  -        // Output <SOAP-ENV:Body>
  -        context.startElement(new QName(soapConstants.getEnvelopeURI(),
  -                                       Constants.ELEM_BODY), null);
  -        enum = bodyElements.elements();
  -        while (enum.hasMoreElements()) {
  -            SOAPBodyElement body = (SOAPBodyElement)enum.nextElement();
  -            body.output(context);
  -            // Output this body element.
  -        }
  -        
  -        // Output multi-refs
  -        context.outputMultiRefs();
  -        
  -        // Output </SOAP-ENV:Body>
  -        context.endElement();
  -        
           // Output trailers
           enum = trailers.elements();
           while (enum.hasMoreElements()) {
  @@ -401,5 +401,50 @@
           context.endElement();
   
           context.setPretty(oldPretty);
  +    }
  +
  +    SOAPConstants getSOAPConstants() {
  +        return soapConstants;
  +    }
  +
  +    // JAXM methods
  +
  +    public javax.xml.soap.SOAPBody addBody() throws SOAPException {
  +        if (body == null) {
  +            body = new SOAPBody(this, soapConstants);
  +            return body;
  +        } else {
  +            throw new SOAPException(JavaUtils.getMessage("bodyPresent"));
  +        }
  +    }
  +
  +    public javax.xml.soap.SOAPHeader addHeader() throws SOAPException {
  +        if (header == null) {
  +            header = new SOAPHeader(this, soapConstants);
  +            return header;
  +        } else {
  +            throw new SOAPException(JavaUtils.getMessage("headerPresent"));
  +        }
  +    }
  +
  +    public javax.xml.soap.Name createName(String localName)
  +        throws SOAPException {
  +        // Ok to use the SOAP envelope's namespace URI and prefix?
  +        return new PrefixedQName(namespaceURI, localName, prefix);
  +    }
  +    
  +    public javax.xml.soap.Name createName(String localName,
  +                                          String prefix,
  +                                          String uri)
  +        throws SOAPException {
  +        return new PrefixedQName(uri, localName, prefix);
  +    }
  +    
  +    public javax.xml.soap.SOAPBody getBody() throws SOAPException {
  +        return body;
  +    }
  +
  +    public javax.xml.soap.SOAPHeader getHeader() throws SOAPException {
  +        return header;
       }
   }
  
  
  
  1.41      +34 -2     xml-axis/java/src/org/apache/axis/message/SOAPHeader.java
  
  Index: SOAPHeader.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/message/SOAPHeader.java,v
  retrieving revision 1.40
  retrieving revision 1.41
  diff -u -r1.40 -r1.41
  --- SOAPHeader.java   12 Apr 2002 09:46:36 -0000      1.40
  +++ SOAPHeader.java   16 May 2002 12:54:36 -0000      1.41
  @@ -59,12 +59,15 @@
   import org.apache.axis.Message;
   import org.apache.axis.MessageContext;
   import org.apache.axis.soap.SOAPConstants;
  +import org.apache.axis.encoding.DeserializationContext;
   import org.apache.axis.encoding.SerializationContext;
   import org.apache.axis.utils.JavaUtils;
   
   import org.apache.commons.logging.Log;
   import org.apache.commons.logging.LogFactory;
   
  +import org.xml.sax.Attributes;
  +
   import javax.xml.soap.SOAPElement;
   import javax.xml.soap.Name;
   import javax.xml.soap.SOAPException;
  @@ -99,6 +102,13 @@
           }
       }
   
  +    public SOAPHeader(String namespace, String localPart, String qName,
  +                      Attributes attributes, DeserializationContext context,
  +                      SOAPConstants soapConsts) {
  +        super(namespace, localPart, qName, attributes, context);
  +        soapConstants = soapConsts;
  +    }
  +
       public void setParentElement(SOAPElement parent) throws SOAPException {
           try {
               // cast to force exception if wrong type
  @@ -115,11 +125,27 @@
   
       public javax.xml.soap.SOAPHeaderElement addHeaderElement(Name name)
           throws SOAPException {
  -        return null; // to be implemented
  +        SOAPHeaderElement headerElement = new SOAPHeaderElement(name);
  +        addHeader(headerElement);
  +        return headerElement;
       }
   
       public Iterator examineHeaderElements(String actor) {
  -        return null; // to be implemented
  +        Vector results = new Vector();
  +        Iterator i = headers.iterator();
  +
  +        while (i.hasNext()) {
  +            SOAPHeaderElement header = (SOAPHeaderElement)i.next();
  +            String headerActor = header.getActor();
  +            // Allow NEXT's and any headers with matching actor
  +            if (Constants.ACTOR_NEXT.equals(headerActor) ||
  +                (actor == headerActor) || 
  +                (actor != null && actor.equals(headerActor))) {
  +                results.add(header);
  +            }
  +        }
  +
  +        return results.iterator();
       }
   
       public Iterator extractHeaderElements(String actor) {
  @@ -158,6 +184,12 @@
           if (log.isDebugEnabled())
               log.debug(JavaUtils.getMessage("addHeader00"));
           headers.addElement(header);
  +        try {
  +            header.setParentElement(this);
  +        } catch (SOAPException ex) {
  +            // class cast should never fail when parent is a SOAPHeader
  +            log.fatal(JavaUtils.getMessage("exception00"), ex);
  +        }
       }
   
       void removeHeader(SOAPHeaderElement header) {
  
  
  
  1.2       +22 -0     xml-axis/java/src/org/apache/axis/message/SOAPHeaderElement.java
  
  Index: SOAPHeaderElement.java
  ===================================================================
  RCS file: 
/home/cvs/xml-axis/java/src/org/apache/axis/message/SOAPHeaderElement.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- SOAPHeaderElement.java    26 Mar 2002 16:40:35 -0000      1.1
  +++ SOAPHeaderElement.java    16 May 2002 12:54:36 -0000      1.2
  @@ -62,7 +62,10 @@
   import org.xml.sax.Attributes;
   import org.xml.sax.helpers.AttributesImpl;
   
  +import javax.xml.soap.SOAPElement;
  +import javax.xml.soap.SOAPException;
   import javax.xml.rpc.namespace.QName;
  +import javax.xml.soap.Name;
   
   /** 
    * A simple header element abstraction.  Extends MessageElement with
  @@ -87,6 +90,11 @@
           super(namespace, localPart);
       }
   
  +    public SOAPHeaderElement(Name name)
  +    {
  +        super(name);
  +    }
  +
       public SOAPHeaderElement(String namespace, String localPart, Object value)
       {
           super(namespace, localPart, value);
  @@ -101,6 +109,20 @@
   
           actor = elem.getAttributeNS(Constants.URI_SOAP_ENV,
                                       Constants.ATTR_ACTOR);
  +    }
  +
  +    public void setParentElement(SOAPElement parent) throws SOAPException {
  +        try {
  +            // cast to force exception if wrong type
  +            super.setParentElement((SOAPHeader)parent);
  +        } catch (Throwable t) {
  +            throw new SOAPException(t);
  +        }
  +    }
  +
  +    public void detachNode() {
  +        ((SOAPHeader)parent).removeHeader(this);
  +        super.detachNode();
       }
   
       public SOAPHeaderElement(String namespace, String localPart, String prefix,
  
  
  
  1.16      +185 -35   xml-axis/java/src/org/apache/axis/message/SOAPBody.java
  
  
  
  
  1.98      +3 -0      xml-axis/java/src/org/apache/axis/utils/resources.properties
  
  Index: resources.properties
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/utils/resources.properties,v
  retrieving revision 1.97
  retrieving revision 1.98
  diff -u -r1.97 -r1.98
  --- resources.properties      9 May 2002 18:31:22 -0000       1.97
  +++ resources.properties      16 May 2002 12:54:36 -0000      1.98
  @@ -68,8 +68,10 @@
   badTypeNamespace00=Found languageSpecificType namespace ''{0}'', expected ''{1}''
   badWSDDElem00=Invalid WSDD Element
   beanSerConfigFail00=Exception configuring bean serialization for {0}
  +bodyElementParent=Warning: SOAPBodyElement.setParentElement should take a SOAPBody 
parameter instead of a SOAPEnvelope (but need not be called after 
SOAPBody.addBodyElement)
   bodyElems00=There are {0} body elements.
   bodyIs00=body is {0}
  +bodyPresent=Body already present
   buildChain00={0} building chain ''{1}''
   cantAuth00=User ''{0}'' not authenticated (unknown user)
   cantAuth01=User ''{0}'' not authenticated
  @@ -221,6 +223,7 @@
   gotType00={0} got type {1}
   gotValue00={0} got value {1}
   headers00=headers
  +headerPresent=Header already present
   
   # NOTE:  in httpPassword00, do not translate HTTP
   httpPassword00=HTTP password:  {0}
  
  
  


Reply via email to