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/05/30 18:40:42 UTC

cvs commit: xml-axis/java/test/functional TestJAXMSamples.java FunctionalTests.java

dims        02/05/30 09:40:42

  Modified:    java/src/org/apache/axis SOAPPart.java
               java/src/org/apache/axis/message MessageElement.java
                        Text.java
               java/src/org/apache/axis/soap MessageFactoryImpl.java
                        SOAPConnectionFactoryImpl.java
                        SOAPConnectionImpl.java
               java/test/functional FunctionalTests.java
  Added:       java/samples/jaxm UddiPing.java
               java/test/functional TestJAXMSamples.java
  Log:
  - Flesh out some of the factory implementations for javax.xml.soap package
  - Added testcase and sample for javax.xml.soap package connecting to IBM's UDDI Repository
  
  Revision  Changes    Path
  1.1                  xml-axis/java/samples/jaxm/UddiPing.java
  
  Index: UddiPing.java
  ===================================================================
  /*
   * The Apache Software License, Version 1.1
   *
   *
   * Copyright (c) 2002 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Axis" and "Apache Software Foundation" must
   *    not be used to endorse or promote products derived from this
   *    software without prior written permission. For written
   *    permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache",
   *    nor may "Apache" appear in their name, without prior written
   *    permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  package samples.jaxm;
  
  import javax.xml.messaging.URLEndpoint;
  import javax.xml.soap.MessageFactory;
  import javax.xml.soap.SOAPBody;
  import javax.xml.soap.SOAPConnection;
  import javax.xml.soap.SOAPConnectionFactory;
  import javax.xml.soap.SOAPEnvelope;
  import javax.xml.soap.SOAPMessage;
  
  public class UddiPing {
  
      public static void main(String[] args) throws Exception {
          if (args.length != 2) {
              System.err.println("Usage: UddiPing business-name uddi-url");
              System.exit(1);
          }
          searchUDDI(args[0], args[1]);
      }
  
      public static void searchUDDI(String name, String url) throws Exception {
          // Create the connection and the message factory.
          SOAPConnectionFactory scf = SOAPConnectionFactory.newInstance();
          SOAPConnection connection = scf.createConnection();
          MessageFactory msgFactory = MessageFactory.newInstance();
  
          // Create a message
          SOAPMessage msg = msgFactory.createMessage();
  
          // Create an envelope in the message
          SOAPEnvelope envelope = msg.getSOAPPart().getEnvelope();
  
          // Get hold of the the body
          SOAPBody body = envelope.getBody();
  
          javax.xml.soap.SOAPBodyElement bodyElement = body.addBodyElement(envelope.createName("find_business", "",
                  "urn:uddi-org:api"));
  
          bodyElement.addAttribute(envelope.createName("generic"), "1.0")
                  .addAttribute(envelope.createName("maxRows"), "100")
                  .addChildElement("name")
                  .addTextNode(name);
  
          URLEndpoint endpoint = new URLEndpoint(url);
          msg.saveChanges();
  
          SOAPMessage reply = connection.call(msg, endpoint);
          //System.out.println("Received reply from: " + endpoint);
          //reply.writeTo(System.out);
          connection.close();
      }
  }
  
  
  
  
  
  
  
  
  
  1.23      +6 -2      xml-axis/java/src/org/apache/axis/SOAPPart.java
  
  Index: SOAPPart.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/SOAPPart.java,v
  retrieving revision 1.22
  retrieving revision 1.23
  diff -u -r1.22 -r1.23
  --- SOAPPart.java	29 May 2002 13:05:54 -0000	1.22
  +++ SOAPPart.java	30 May 2002 16:40:42 -0000	1.23
  @@ -692,8 +692,12 @@
        * @throws  SOAPException if there is a SOAP error
        */
       public javax.xml.soap.SOAPEnvelope getEnvelope() throws SOAPException {
  -        //TODO: Flesh this out.
  -        return null;
  +        javax.xml.soap.SOAPEnvelope env = null;
  +        try {
  +            env = getAsSOAPEnvelope();
  +        } catch (AxisFault af) {
  +        }
  +        return env;
       }
   }
   
  
  
  
  1.98      +966 -937  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.97
  retrieving revision 1.98
  diff -u -r1.97 -r1.98
  --- MessageElement.java	30 May 2002 03:06:10 -0000	1.97
  +++ MessageElement.java	30 May 2002 16:40:42 -0000	1.98
  @@ -1,937 +1,966 @@
  -/*
  - * The Apache Software License, Version 1.1
  - *
  - *
  - * Copyright (c) 2001 The Apache Software Foundation.  All rights
  - * reserved.
  - *
  - * Redistribution and use in source and binary forms, with or without
  - * modification, are permitted provided that the following conditions
  - * are met:
  - *
  - * 1. Redistributions of source code must retain the above copyright
  - *    notice, this list of conditions and the following disclaimer.
  - *
  - * 2. Redistributions in binary form must reproduce the above copyright
  - *    notice, this list of conditions and the following disclaimer in
  - *    the documentation and/or other materials provided with the
  - *    distribution.
  - *
  - * 3. The end-user documentation included with the redistribution,
  - *    if any, must include the following acknowledgment:
  - *       "This product includes software developed by the
  - *        Apache Software Foundation (http://www.apache.org/)."
  - *    Alternately, this acknowledgment may appear in the software itself,
  - *    if and wherever such third-party acknowledgments normally appear.
  - *
  - * 4. The names "Axis" and "Apache Software Foundation" must
  - *    not be used to endorse or promote products derived from this
  - *    software without prior written permission. For written
  - *    permission, please contact apache@apache.org.
  - *
  - * 5. Products derived from this software may not be called "Apache",
  - *    nor may "Apache" appear in their name, without prior written
  - *    permission of the Apache Software Foundation.
  - *
  - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  - * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
  - * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  - * SUCH DAMAGE.
  - * ====================================================================
  - *
  - * This software consists of voluntary contributions made by many
  - * individuals on behalf of the Apache Software Foundation.  For more
  - * information on the Apache Software Foundation, please see
  - * <http://www.apache.org/>.
  - */
  -
  -package org.apache.axis.message;
  -
  -import org.apache.axis.Constants;
  -import org.apache.axis.MessageContext;
  -import org.apache.axis.soap.SOAPConstants;
  -import org.apache.axis.encoding.DeserializationContext;
  -import org.apache.axis.encoding.Deserializer;
  -import org.apache.axis.encoding.SerializationContext;
  -import org.apache.axis.encoding.SerializationContextImpl;
  -import org.apache.axis.utils.Mapping;
  -import org.apache.axis.utils.JavaUtils;
  -import org.apache.axis.utils.XMLUtils;
  -
  -import org.apache.commons.logging.Log;
  -import org.apache.commons.logging.LogFactory;
  -
  -import org.w3c.dom.Document;
  -import org.w3c.dom.Element;
  -import org.xml.sax.Attributes;
  -import org.xml.sax.ContentHandler;
  -import org.xml.sax.InputSource;
  -import org.xml.sax.SAXException;
  -import org.xml.sax.helpers.AttributesImpl;
  -
  -import javax.xml.soap.SOAPElement;
  -import javax.xml.soap.SOAPException;
  -import javax.xml.soap.Name;
  -import javax.xml.rpc.namespace.QName;
  -import java.io.Reader;
  -import java.io.StringReader;
  -import java.io.StringWriter;
  -import java.util.ArrayList;
  -import java.util.Vector;
  -import java.util.Iterator;
  -
  -public class MessageElement implements SOAPElement
  -{
  -    protected static Log log =
  -        LogFactory.getLog(MessageElement.class.getName());
  -
  -    private static final Mapping encMapping =
  -            new Mapping(Constants.NS_URI_CURRENT_SOAP_ENC,
  -                        "SOAP-ENC");
  -
  -    protected String    name ;
  -    protected String    prefix ;
  -    protected String    namespaceURI ;
  -    protected AttributesImpl attributes;
  -    protected String    id;
  -    protected String    href;
  -    protected boolean   _isRoot = true;
  -    protected SOAPEnvelope message = null;
  -    protected boolean   _isDirty = false;
  -
  -    protected DeserializationContext context;
  -
  -    protected QName typeQName = null;
  -
  -    protected Vector qNameAttrs = null;
  -
  -    // Some message representations - as recorded SAX events...
  -    protected SAX2EventRecorder recorder = null;
  -    protected int startEventIndex = 0;
  -    protected int startContentsIndex = 0;
  -    protected int endEventIndex = -1;
  -
  -    // ...or as DOM
  -    protected Element elementRep = null;
  -
  -    protected MessageElement parent = null;
  -
  -    public ArrayList namespaces = null;
  -    
  -    /** Our encoding style, if any */
  -    protected String encodingStyle = null;
  -
  -    /** Object value, possibly supplied by subclass */
  -    private Object objectValue = null;
  -
  -    /** No-arg constructor for building messages?
  -     */
  -    public MessageElement()
  -    {
  -    }
  -
  -    MessageElement(String namespace, String localPart)
  -    {
  -        namespaceURI = namespace;
  -        name = localPart;
  -    }
  -
  -    MessageElement(Name eltName)
  -    {
  -        this(eltName.getURI(), eltName.getLocalName());
  -        prefix = eltName.getPrefix();
  -    }
  -
  -    MessageElement(String namespace, String localPart, Object value)
  -    {
  -        this(namespace, localPart);
  -        objectValue = value;
  -    }
  -
  -    MessageElement(Element elem)
  -    {
  -        elementRep = elem;
  -        namespaceURI = elem.getNamespaceURI();
  -        name = elem.getLocalName();
  -    }
  -
  -    public MessageElement(String namespace, String localPart, String qName,
  -                   Attributes attributes, DeserializationContext context)
  -    {
  -        if (log.isDebugEnabled()) {
  -            log.debug(JavaUtils.getMessage("newElem00", super.toString(), "" + qName));
  -            for (int i = 0; attributes != null && i < attributes.getLength(); i++) {
  -                log.debug("  " + attributes.getQName(i) + " = '" + attributes.getValue(i) + "'");
  -            }
  -        }
  -        this.namespaceURI = namespace;
  -        this.name = localPart;
  -
  -        int idx = qName.indexOf(":");
  -        if (idx > 0)
  -            this.prefix = qName.substring(0, idx);
  -
  -        this.context = context;
  -        this.startEventIndex = context.getStartOfMappingsPos();
  -
  -        setNSMappings(context.getCurrentNSMappings());
  -
  -        this.recorder = context.getRecorder();
  -
  -        if (attributes == null) {
  -            this.attributes = new AttributesImpl();
  -        } else {
  -            this.attributes = new AttributesImpl(attributes);
  -            
  -            typeQName = context.getTypeFromAttributes(namespace,
  -                                                      localPart, 
  -                                                      attributes);
  -            
  -            String rootVal = attributes.getValue(Constants.NS_URI_CURRENT_SOAP_ENC, Constants.ATTR_ROOT);
  -            if (rootVal != null)
  -                _isRoot = rootVal.equals("1");
  -
  -            id = attributes.getValue(Constants.ATTR_ID);
  -            // Register this ID with the context.....
  -            if (id != null) {
  -                context.registerElementByID(id, this);
  -                if (recorder == null) {
  -                    recorder = new SAX2EventRecorder();
  -                    context.setRecorder(recorder);
  -                }
  -            }
  -
  -            href = attributes.getValue(Constants.ATTR_HREF);
  -
  -            // If there's an arrayType attribute, we can pretty well guess that we're an Array???
  -            if (attributes.getValue(Constants.NS_URI_CURRENT_SOAP_ENC, Constants.ATTR_ARRAY_TYPE) != null)
  -                typeQName = Constants.SOAP_ARRAY;
  -
  -            // Set the encoding style to the attribute value.  If null,
  -            // we just automatically use our parent's (see getEncodingStyle)
  -            encodingStyle =
  -                    attributes.getValue(Constants.NS_URI_CURRENT_SOAP_ENC,
  -                                        Constants.ATTR_ENCODING_STYLE);
  -        }
  -    }
  -
  -    /** !!! TODO : Make sure this handles multiple targets
  -     */
  -    Deserializer fixupDeserializer;
  -
  -    public void setFixupDeserializer(Deserializer dser)
  -    {
  -        // !!! Merge targets here if already set?
  -        fixupDeserializer = dser;
  -    }
  -
  -    public Deserializer getFixupDeserializer()
  -    {
  -        return fixupDeserializer;
  -    }
  -
  -    public void setEndIndex(int endIndex)
  -    {
  -        endEventIndex = endIndex;
  -        //context.setRecorder(null);
  -    }
  -
  -    public boolean isDirty() { return _isDirty; }
  -    public void setDirty(boolean dirty) { _isDirty = dirty; };
  -
  -    public boolean isRoot() { return _isRoot; }
  -    public String getID() { return id; }
  -    
  -    public String getHref() { return href; }
  -    
  -    public Attributes getAttributes() { return attributes; }
  -
  -    /**
  -     * Obtain an Attributes collection consisting of all attributes
  -     * for this MessageElement, including namespace declarations.
  -     *
  -     * @return
  -     */
  -    public Attributes getCompleteAttributes() {
  -        if (namespaces == null)
  -            return attributes;
  -
  -        AttributesImpl attrs = new AttributesImpl(attributes);
  -        for (Iterator iterator = namespaces.iterator(); iterator.hasNext();) {
  -            Mapping mapping = (Mapping) iterator.next();
  -            String prefix = mapping.getPrefix();
  -            String nsURI = mapping.getNamespaceURI();
  -            attrs.addAttribute(Constants.NS_URI_XMLNS, prefix,
  -                               "xmlns:" + prefix, nsURI, "CDATA");
  -        }
  -        return attrs;
  -    }
  -
  -    public String getName() { return( name ); }
  -    public void setName(String name) { this.name = name; }
  -
  -    public String getPrefix() { return( prefix ); }
  -    public void setPrefix(String prefix) { this.prefix = prefix; }
  -
  -    public String getNamespaceURI() { return( namespaceURI ); }
  -    public void setNamespaceURI(String nsURI) { namespaceURI = nsURI; }
  -
  -    public QName getType() {
  -        // Try to get the type from our target if we're a reference...
  -        if (typeQName == null && href != null && context != null) {
  -            MessageElement referent = context.getElementByID(href);
  -            if (referent != null) {
  -                typeQName = referent.getType();
  -            }
  -        }
  -        return typeQName;
  -    }
  -    public void setType(QName qName) { typeQName = qName; }
  -
  -    public SAX2EventRecorder getRecorder() { return recorder; }
  -    public void setRecorder(SAX2EventRecorder rec) { recorder = rec; }
  -
  -    /** 
  -     * Get the encoding style.  If ours is null, walk up the hierarchy
  -     * and use our parent's.  Default if we're the root is "".
  -     * 
  -     * @return the currently in-scope encoding style
  -     */
  -    public String getEncodingStyle() {
  -        if (encodingStyle == null) {
  -            if (parent == null)
  -                return "";
  -            return parent.getEncodingStyle();
  -        }
  -        return encodingStyle;
  -    }
  -    
  -    /** 
  -     * Set the encoding style.  Calling this means you are absolutely
  -     * setting it to SOMETHING valid.  The semantics of a null value,
  -     * as above in getEncodingStyle() are to just use the parent's value,
  -     * but null here means set to "". 
  -     */
  -    public void setEncodingStyle(String encodingStyle) throws SOAPException {
  -        if (encodingStyle == null) encodingStyle = "";
  -        this.encodingStyle = encodingStyle;
  -
  -        // Wherever we set the encoding style, map the SOAP-ENC prefix
  -        // just for fun.
  -        if (encodingStyle.equals(Constants.NS_URI_CURRENT_SOAP_ENC)) {
  -            addMapping(encMapping);
  -        }
  -    }
  -
  -    private MessageElement getParent() { return parent; }
  -    private void setParent(MessageElement parent) throws SOAPException
  -    { 
  -        this.parent = parent;
  -        if (parent != null) {
  -            parent.addChild(this);
  -        }
  -    }
  -    
  -    private ArrayList children = null;
  -
  -    /**
  -     * Note that this method will log a error and no-op if there is
  -     * a value (set using setObjectValue) in the MessageElement.
  -     */
  -    public void addChild(MessageElement el) throws SOAPException
  -    {
  -        if (objectValue != null) {
  -            SOAPException exc = new SOAPException(JavaUtils.
  -                                                  getMessage("valuePresent"));
  -            log.error(JavaUtils.getMessage("valuePresent"), exc);
  -            throw exc;
  -        }
  -        if (children == null)
  -            children = new ArrayList();
  -        children.add(el);
  -        el.parent = this;
  -    }
  -
  -    /**
  -     * Remove a child element.
  -     */
  -    private void removeChild(MessageElement child) {
  -        // Remove all occurrences in case it has been added multiple times.
  -        int i;
  -        while ((i = children.indexOf(child)) != -1) {
  -            children.remove(i);
  -        }
  -    }
  -     
  -    public ArrayList getChildren()
  -    {
  -        return children;
  -    }
  -    
  -    public void setContentsIndex(int index)
  -    {
  -        startContentsIndex = index;
  -    }
  -
  -    public void setNSMappings(ArrayList namespaces)
  -    {
  -        this.namespaces = namespaces;
  -    }
  -
  -    public String getPrefix(String namespaceURI) {
  -        if ((namespaceURI == null) || (namespaceURI.equals("")))
  -            return null;
  -
  -        if (href != null) {
  -            return getRealElement().getPrefix(namespaceURI);
  -        }
  -
  -        if (namespaces != null) {
  -            for (int i = 0; i < namespaces.size(); i++) {
  -                Mapping map = (Mapping)namespaces.get(i);
  -                if (map.getNamespaceURI().equals(namespaceURI))
  -                    return map.getPrefix();
  -            }
  -        }
  -
  -        if (parent != null)
  -            return parent.getPrefix(namespaceURI);
  -
  -        return null;
  -    }
  -
  -    public String getNamespaceURI(String prefix) {
  -        if (prefix == null)
  -            prefix = "";
  -
  -        if (href != null) {
  -            return getRealElement().getNamespaceURI(prefix);
  -        }
  -
  -        if (namespaces != null) {
  -            for (int i = 0; i < namespaces.size(); i++) {
  -                Mapping map = (Mapping)namespaces.get(i);
  -                if (map.getPrefix().equals(prefix)) {
  -                    return map.getNamespaceURI();
  -                }
  -            }
  -        }
  -
  -        if (parent != null)
  -            return parent.getNamespaceURI(prefix);
  -
  -        if (log.isDebugEnabled()) {
  -            log.debug(JavaUtils.getMessage("noPrefix00", "" + this, prefix));
  -        }
  -
  -        return null;
  -    }
  -
  -    /**
  -     * Returns value of the node as an object of registered type.
  -     * @return Object of proper type, or null if no mapping could be found.
  -     */
  -    public Object getObjectValue(){
  -        if (objectValue == null) {
  -            try {
  -                objectValue = getValueAsType(getType());
  -            } catch (Exception e) {
  -                log.debug("getValue()", e);
  -            }
  -        }
  -        return objectValue;
  -    }
  -
  -    /**
  -     * Sets value of this node to an Object.
  -     * A serializer needs to be registered for this object class for proper
  -     * operation.
  -     * <p>
  -     * Note that this method will log an error and no-op if there are
  -     * any children in the MessageElement or if the MessageElement was
  -     * constructed from XML.
  -     * @param newValue node's value or null.
  -     */
  -    public void setObjectValue(Object newValue) throws SOAPException {
  -        if (children != null && !children.isEmpty()) {
  -            SOAPException exc = new SOAPException(JavaUtils.
  -                                                  getMessage("childPresent"));
  -            log.error(JavaUtils.getMessage("childPresent"), exc);
  -            throw exc;
  -        }
  -        if (elementRep != null) {
  -            SOAPException exc = new SOAPException(JavaUtils.
  -                                                  getMessage("xmlPresent"));
  -            log.error(JavaUtils.getMessage("xmlPresent"), exc);
  -            throw exc;
  -        }
  -        this.objectValue = newValue;
  -    }
  -    
  -    public Object getValueAsType(QName type) throws Exception
  -    {
  -        if (context == null)
  -            throw new Exception(JavaUtils.getMessage("noContext00"));
  -
  -        Deserializer dser = context.getDeserializerForType(type);
  -        if (dser == null)
  -            throw new Exception(JavaUtils.getMessage("noDeser00", "" + type));
  -
  -        context.pushElementHandler(new EnvelopeHandler((SOAPHandler)dser));
  -
  -        publishToHandler((org.xml.sax.ContentHandler) context);
  -
  -        return dser.getValue();
  -    }
  -
  -    protected static class QNameAttr {
  -        QName name;
  -        QName value;
  -    }
  -
  -    public void addAttribute(String namespace, String localName,
  -                             QName value)
  -    {
  -        if (qNameAttrs == null)
  -            qNameAttrs = new Vector();
  -
  -        QNameAttr attr = new QNameAttr();
  -        attr.name = new QName(namespace, localName);
  -        attr.value = value;
  -
  -        qNameAttrs.addElement(attr);
  -        // !!! Add attribute to attributes!
  -    }
  -
  -    public void addAttribute(String namespace, String localName,
  -                             String value)
  -    {
  -        if (attributes == null) {
  -            attributes = new AttributesImpl();
  -        }
  -        attributes.addAttribute(namespace, localName, "", "CDATA",
  -                                value);
  -    }
  -    
  -    /**
  -     * Set an attribute, adding the attribute if it isn't already present
  -     * in this element, and changing the value if it is.  Passing null as the
  -     * value will cause any pre-existing attribute by this name to go away.
  -     */ 
  -    public void setAttribute(String namespace, String localName,
  -                             String value)
  -    {
  -        if (attributes != null) {
  -            int idx = attributes.getIndex(namespace, localName);
  -            if (idx > -1) {
  -                // Got it, so replace it's value.
  -                if (value != null) {
  -                    attributes.setValue(idx, value);
  -                } else {
  -                    attributes.removeAttribute(idx);
  -                }
  -                return;
  -            }
  -        } else if (value != null) {
  -            attributes = new AttributesImpl();
  -        }
  -
  -        addAttribute(namespace, localName, value);
  -    }
  -
  -    public String getAttributeValue(String localName)
  -    {
  -        if (attributes == null) {
  -           return null;
  -        }
  -        return attributes.getValue(localName);
  -    }
  -
  -    public void setEnvelope(SOAPEnvelope env)
  -    {
  -        message = env;
  -    }
  -    public SOAPEnvelope getEnvelope()
  -    {
  -        return message;
  -    }
  -
  -    public MessageElement getRealElement()
  -    {
  -        if (href == null)
  -            return this;
  -
  -        Object obj = context.getObjectByRef(href);
  -        if (obj == null)
  -            return null;
  -
  -        if (!(obj instanceof MessageElement))
  -            return null;
  -
  -        return (MessageElement)obj;
  -    }
  -
  -    public Document getAsDocument() throws Exception
  -    {
  -        String elementString = getAsString();
  -
  -        Reader reader = new StringReader(elementString);
  -        Document doc = XMLUtils.newDocument(new InputSource(reader));
  -        if (doc == null)
  -            throw new Exception(
  -                    JavaUtils.getMessage("noDoc00", elementString));
  -        return doc;
  -    }
  -
  -    private String getAsString() throws Exception {
  -        SerializationContext serializeContext = null;
  -        StringWriter writer = new StringWriter();
  -        MessageContext msgContext;
  -        if (context != null) {
  -            msgContext = context.getMessageContext();
  -        } else {
  -            msgContext = MessageContext.getCurrentContext();
  -        }
  -        serializeContext = new SerializationContextImpl(writer, msgContext);
  -        serializeContext.setSendDecl(false);
  -        output(serializeContext);
  -        writer.close();
  -
  -        return writer.getBuffer().toString();
  -    }
  -
  -    public Element getAsDOM() throws Exception
  -    {
  -        return getAsDocument().getDocumentElement();
  -    }
  -
  -    public void publishToHandler(ContentHandler handler) throws SAXException
  -    {
  -        if (recorder == null)
  -            throw new SAXException(JavaUtils.getMessage("noRecorder00"));
  -
  -        recorder.replay(startEventIndex, endEventIndex, handler);
  -    }
  -
  -    public void publishContents(ContentHandler handler) throws SAXException
  -    {
  -        if (recorder == null)
  -            throw new SAXException(JavaUtils.getMessage("noRecorder00"));
  -
  -        recorder.replay(startContentsIndex, endEventIndex-1, handler);
  -    }
  -
  -    /** This is the public output() method, which will always simply use
  -     * the recorded SAX stream for this element if it is available.  If
  -     * not, this method calls outputImpl() to allow subclasses and
  -     * programmatically created messages to serialize themselves.
  -     *
  -     * @param context the SerializationContext we will write to.
  -     */
  -    public final void output(SerializationContext context) throws Exception
  -    {
  -        if ((recorder != null) && (!_isDirty)) {
  -            recorder.replay(startEventIndex,
  -                            endEventIndex,
  -                            new SAXOutputter(context));
  -            return;
  -        }
  -
  -        // Turn QName attributes into strings
  -        if (qNameAttrs != null) {
  -            for (int i = 0; i < qNameAttrs.size(); i++) {
  -                QNameAttr attr = (QNameAttr)qNameAttrs.get(i);
  -                QName attrName = attr.name;
  -                addAttribute(attrName.getNamespaceURI(),
  -                             attrName.getLocalPart(),
  -                             context.qName2String(attr.value));
  -            }
  -            qNameAttrs = null;
  -        }
  -        
  -        /**
  -         * Write the encoding style attribute IF it's different from
  -         * whatever encoding style is in scope....
  -         */ 
  -        if (encodingStyle != null) {
  -            MessageContext mc = context.getMessageContext();
  -            SOAPConstants soapConstants = (mc != null) ?
  -                                            mc.getSOAPConstants() :
  -                                            SOAPConstants.SOAP11_CONSTANTS;
  -            if (parent == null) {
  -                // don't emit an encoding style if its "" (literal)
  -                if (!encodingStyle.equals("")) { 
  -                    setAttribute(soapConstants.getEnvelopeURI(),
  -                                 Constants.ATTR_ENCODING_STYLE,
  -                                 encodingStyle);
  -                }
  -            } else if (!encodingStyle.equals(parent.getEncodingStyle())) {
  -                setAttribute(soapConstants.getEnvelopeURI(),
  -                             Constants.ATTR_ENCODING_STYLE,
  -                             encodingStyle);
  -            }
  -        }
  -
  -        outputImpl(context);
  -    }
  -
  -    /** Subclasses can override
  -     */
  -    protected void outputImpl(SerializationContext context) throws Exception
  -    {
  -        if (elementRep != null) {
  -            boolean oldPretty = context.getPretty();
  -            context.setPretty(false);
  -            context.writeDOMElement(elementRep);
  -            context.setPretty(oldPretty);
  -            return;
  -        }
  -
  -        if (prefix != null)
  -            context.registerPrefixForURI(prefix, namespaceURI);
  -
  -        if (objectValue != null) {
  -            context.serialize(new QName(namespaceURI, name),
  -                              attributes,
  -                              objectValue,
  -                              objectValue.getClass());
  -            return;
  -        }
  -
  -        context.startElement(new QName(namespaceURI, name), attributes);
  -        if (children != null) {
  -            for (Iterator it = children.iterator(); it.hasNext();) {
  -                ((MessageElement)it.next()).output(context);
  -            }
  -        }
  -        context.endElement();
  -    }
  -
  -    public String toString() {
  -        try {
  -            return getAsString();
  -        }
  -        catch( Exception exp ) {
  -            log.error(JavaUtils.getMessage("exception00"), exp);
  -            return null;
  -        }
  -    }
  -
  -    public void addMapping(Mapping map) {
  -        if (namespaces == null) namespaces = new ArrayList();
  -        namespaces.add(map);
  -    }
  -
  -    // JAXM Node methods...
  -
  -    /**
  -     * Text nodes are not supported.
  -     */
  -    public String getValue() {
  -        return null;
  -    }
  -
  -    public void setParentElement(SOAPElement parent) throws SOAPException {
  -        try {
  -            setParent((MessageElement)parent);
  -        } catch (Throwable t) {
  -            throw new SOAPException(t);
  -        }
  -    }
  -
  -    public SOAPElement getParentElement() {
  -        return getParent();
  -    }
  -
  -    /**
  -     * Break the relationship between this element and its parent, if any.
  -     */
  -    public void detachNode() {
  -        if (parent != null) {
  -            parent.removeChild(this);
  -            parent = null;
  -        }
  -    }
  -
  -    /**
  -     * No-opped - Axis does not recycle nodes.
  -     */
  -    public void recycleNode() {}
  -
  -    // JAXM SOAPElement methods...
  -
  -    public SOAPElement addChildElement(Name name) throws SOAPException {
  -        MessageElement child = new MessageElement(name.getURI(),
  -                                                  name.getLocalName());
  -        addChild(child);
  -        return child;
  -    }
  -
  -    public SOAPElement addChildElement(String localName) throws SOAPException {
  -        // Inherit parent's namespace
  -        MessageElement child = new MessageElement(getNamespaceURI(),
  -                                                  localName);
  -        addChild(child);
  -        return child;
  -    }
  -
  -    public SOAPElement addChildElement(String localName,
  -                                       String prefix) throws SOAPException {
  -        MessageElement child = new MessageElement(getNamespaceURI(prefix),
  -                                                  localName);
  -        addChild(child);
  -        return child;
  -    }
  -
  -    public SOAPElement addChildElement(String localName,
  -                                       String prefix,
  -                                       String uri) throws SOAPException {
  -            MessageElement child = new MessageElement(uri, localName);
  -            child.addNamespaceDeclaration(prefix, uri);
  -            addChild(child);
  -            return child;
  -    }
  -
  -    /**
  -     * The added child must be an instance of MessageElement rather than
  -     * an abitrary SOAPElement otherwise a (wrapped) ClassCastException
  -     * will be thrown.
  -     */
  -    public SOAPElement addChildElement(SOAPElement element)
  -        throws SOAPException {
  -        try {
  -            addChild((MessageElement)element);
  -            return element;
  -        } catch (ClassCastException e) {
  -            throw new SOAPException(e);
  -        }
  -    }
  -
  -    /**
  -     * Text nodes are not supported.
  -     */
  -    public SOAPElement addTextNode(String text) throws SOAPException {
  -        throw new SOAPException("Text nodes not supported"); 
  -    }
  -
  -    public SOAPElement addAttribute(Name name, String value)
  -        throws SOAPException {
  -        try {
  -            addAttribute(name.getURI(), name.getLocalName(), value);
  -        } catch (RuntimeException t) {
  -            throw new SOAPException(t);
  -        }
  -        return this;
  -    }
  -
  -    public SOAPElement addNamespaceDeclaration(String prefix,
  -                                               String uri)
  -        throws SOAPException {
  -        try {
  -            Mapping map = new Mapping(uri, prefix);
  -            addMapping(map);
  -        } catch (RuntimeException t) {
  -            throw new SOAPException(t);
  -        }
  -        return this;
  -    }
  -
  -    public String getAttributeValue(Name name) {
  -        return attributes.getValue(name.getURI(), name.getLocalName());
  -    }
  -
  -    public Iterator getAllAttributes() {
  -        int num = attributes.getLength();
  -        Vector attrs = new Vector(num);
  -        for (int i = 0; i < num; i++) {
  -            String q = attributes.getQName(i);
  -            String prefix = "";
  -            if (q != null) {
  -                int idx = q.indexOf(":");
  -                if (idx > 0)
  -                    prefix = q.substring(0, idx);
  -            }
  -
  -            attrs.add(new PrefixedQName(attributes.getURI(i),
  -                                        attributes.getLocalName(i),
  -                                        prefix));
  -        }
  -        return attrs.iterator();
  -    }
  -
  -    // getNamespaceURI implemented above
  -
  -    public Iterator getNamespacePrefixes() {
  -        int num = namespaces.size();
  -        Vector prefixes = new Vector(num);
  -        for (int i = 0; i < num; i++) {
  -            prefixes.add(((Mapping)namespaces.get(i)).getPrefix());
  -        }
  -        return prefixes.iterator();
  -    }
  -
  -    public Name getElementName() {
  -        return new PrefixedQName(getNamespaceURI(), getName(), getPrefix());
  -    }
  -
  -    public boolean removeAttribute(Name name) {
  -        boolean removed = false;
  -
  -        for (int i = 0; i < attributes.getLength() && !removed; i++) {
  -            if (attributes.getURI(i).equals(name.getURI()) &&
  -                attributes.getLocalName(i).equals(name.getLocalName())) {
  -                attributes.removeAttribute(i);
  -                removed = true;
  -            }
  -        }
  -        return removed;
  -    }
  -
  -    public boolean removeNamespaceDeclaration(String prefix) {
  -        boolean removed = false;
  -
  -        for (int i = 0; i < namespaces.size() && !removed; i++) {
  -            if (((Mapping)namespaces.get(i)).getPrefix().equals(prefix)) {
  -                namespaces.remove(i);
  -                removed = true;
  -            }
  -        }
  -        return removed;
  -    }
  -
  -    public Iterator getChildElements() {
  -        if (children == null)
  -            children = new ArrayList();
  -        return children.iterator();
  -    }
  -
  -    public Iterator getChildElements(Name name) {
  -        if (children == null)
  -            children = new ArrayList();
  -        int num = children.size();
  -
  -        Vector c = new Vector(num);
  -        for (int i = 0; i < num; i++) {
  -            MessageElement child = (MessageElement)children.get(i);
  -            Name cname = child.getElementName();
  -            if (cname.getURI().equals(name.getURI()) &&
  -                cname.getLocalName().equals(name.getLocalName())) {
  -                c.add(child);
  -            }
  -        }
  -        return c.iterator();
  -    }
  -
  -    // setEncodingStyle implemented above
  -
  -    // getEncodingStyle() implemented above
  -
  -}
  +/*
  + * The Apache Software License, Version 1.1
  + *
  + *
  + * Copyright (c) 2001 The Apache Software Foundation.  All rights
  + * reserved.
  + *
  + * Redistribution and use in source and binary forms, with or without
  + * modification, are permitted provided that the following conditions
  + * are met:
  + *
  + * 1. Redistributions of source code must retain the above copyright
  + *    notice, this list of conditions and the following disclaimer.
  + *
  + * 2. Redistributions in binary form must reproduce the above copyright
  + *    notice, this list of conditions and the following disclaimer in
  + *    the documentation and/or other materials provided with the
  + *    distribution.
  + *
  + * 3. The end-user documentation included with the redistribution,
  + *    if any, must include the following acknowledgment:
  + *       "This product includes software developed by the
  + *        Apache Software Foundation (http://www.apache.org/)."
  + *    Alternately, this acknowledgment may appear in the software itself,
  + *    if and wherever such third-party acknowledgments normally appear.
  + *
  + * 4. The names "Axis" and "Apache Software Foundation" must
  + *    not be used to endorse or promote products derived from this
  + *    software without prior written permission. For written
  + *    permission, please contact apache@apache.org.
  + *
  + * 5. Products derived from this software may not be called "Apache",
  + *    nor may "Apache" appear in their name, without prior written
  + *    permission of the Apache Software Foundation.
  + *
  + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  + * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
  + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  + * SUCH DAMAGE.
  + * ====================================================================
  + *
  + * This software consists of voluntary contributions made by many
  + * individuals on behalf of the Apache Software Foundation.  For more
  + * information on the Apache Software Foundation, please see
  + * <http://www.apache.org/>.
  + */
  +
  +package org.apache.axis.message;
  +
  +import org.apache.axis.Constants;
  +import org.apache.axis.MessageContext;
  +import org.apache.axis.soap.SOAPConstants;
  +import org.apache.axis.encoding.DeserializationContext;
  +import org.apache.axis.encoding.Deserializer;
  +import org.apache.axis.encoding.SerializationContext;
  +import org.apache.axis.encoding.SerializationContextImpl;
  +import org.apache.axis.utils.Mapping;
  +import org.apache.axis.utils.JavaUtils;
  +import org.apache.axis.utils.XMLUtils;
  +
  +import org.apache.commons.logging.Log;
  +import org.apache.commons.logging.LogFactory;
  +
  +import org.w3c.dom.Document;
  +import org.w3c.dom.Element;
  +import org.w3c.dom.Text;
  +import org.xml.sax.Attributes;
  +import org.xml.sax.ContentHandler;
  +import org.xml.sax.InputSource;
  +import org.xml.sax.SAXException;
  +import org.xml.sax.helpers.AttributesImpl;
  +
  +import javax.xml.soap.SOAPElement;
  +import javax.xml.soap.SOAPException;
  +import javax.xml.soap.Name;
  +import javax.xml.rpc.namespace.QName;
  +import java.io.Reader;
  +import java.io.StringReader;
  +import java.io.StringWriter;
  +import java.util.ArrayList;
  +import java.util.Vector;
  +import java.util.Iterator;
  +
  +public class MessageElement implements SOAPElement
  +{
  +    protected static Log log =
  +        LogFactory.getLog(MessageElement.class.getName());
  +
  +    private static final Mapping encMapping =
  +            new Mapping(Constants.NS_URI_CURRENT_SOAP_ENC,
  +                        "SOAP-ENC");
  +
  +    protected String    name ;
  +    protected String    prefix ;
  +    protected String    namespaceURI ;
  +    protected AttributesImpl attributes;
  +    protected String    id;
  +    protected String    href;
  +    protected boolean   _isRoot = true;
  +    protected SOAPEnvelope message = null;
  +    protected boolean   _isDirty = false;
  +
  +    protected DeserializationContext context;
  +
  +    protected QName typeQName = null;
  +
  +    protected Vector qNameAttrs = null;
  +
  +    // Some message representations - as recorded SAX events...
  +    protected SAX2EventRecorder recorder = null;
  +    protected int startEventIndex = 0;
  +    protected int startContentsIndex = 0;
  +    protected int endEventIndex = -1;
  +
  +    // ...or as DOM
  +    protected Element elementRep = null;
  +    protected Text textRep = null;
  +
  +    protected MessageElement parent = null;
  +
  +    public ArrayList namespaces = null;
  +
  +    /** Our encoding style, if any */
  +    protected String encodingStyle = null;
  +
  +    /** Object value, possibly supplied by subclass */
  +    private Object objectValue = null;
  +
  +    /** No-arg constructor for building messages?
  +     */
  +    public MessageElement()
  +    {
  +    }
  +
  +    MessageElement(String namespace, String localPart)
  +    {
  +        namespaceURI = namespace;
  +        name = localPart;
  +    }
  +
  +    MessageElement(Name eltName)
  +    {
  +        this(eltName.getURI(), eltName.getLocalName());
  +        prefix = eltName.getPrefix();
  +    }
  +
  +    MessageElement(String namespace, String localPart, Object value)
  +    {
  +        this(namespace, localPart);
  +        objectValue = value;
  +    }
  +
  +    MessageElement(Element elem)
  +    {
  +        elementRep = elem;
  +        namespaceURI = elem.getNamespaceURI();
  +        name = elem.getLocalName();
  +    }
  +
  +    MessageElement(Text text)
  +    {
  +        textRep = text;
  +        namespaceURI = text.getNamespaceURI();
  +        name = text.getLocalName();
  +    }
  +
  +    public MessageElement(String namespace, String localPart, String qName,
  +                   Attributes attributes, DeserializationContext context)
  +    {
  +        if (log.isDebugEnabled()) {
  +            log.debug(JavaUtils.getMessage("newElem00", super.toString(), "" + qName));
  +            for (int i = 0; attributes != null && i < attributes.getLength(); i++) {
  +                log.debug("  " + attributes.getQName(i) + " = '" + attributes.getValue(i) + "'");
  +            }
  +        }
  +        this.namespaceURI = namespace;
  +        this.name = localPart;
  +
  +        int idx = qName.indexOf(":");
  +        if (idx > 0)
  +            this.prefix = qName.substring(0, idx);
  +
  +        this.context = context;
  +        this.startEventIndex = context.getStartOfMappingsPos();
  +
  +        setNSMappings(context.getCurrentNSMappings());
  +
  +        this.recorder = context.getRecorder();
  +
  +        if (attributes == null) {
  +            this.attributes = new AttributesImpl();
  +        } else {
  +            this.attributes = new AttributesImpl(attributes);
  +
  +            typeQName = context.getTypeFromAttributes(namespace,
  +                                                      localPart,
  +                                                      attributes);
  +
  +            String rootVal = attributes.getValue(Constants.NS_URI_CURRENT_SOAP_ENC, Constants.ATTR_ROOT);
  +            if (rootVal != null)
  +                _isRoot = rootVal.equals("1");
  +
  +            id = attributes.getValue(Constants.ATTR_ID);
  +            // Register this ID with the context.....
  +            if (id != null) {
  +                context.registerElementByID(id, this);
  +                if (recorder == null) {
  +                    recorder = new SAX2EventRecorder();
  +                    context.setRecorder(recorder);
  +                }
  +            }
  +
  +            href = attributes.getValue(Constants.ATTR_HREF);
  +
  +            // If there's an arrayType attribute, we can pretty well guess that we're an Array???
  +            if (attributes.getValue(Constants.NS_URI_CURRENT_SOAP_ENC, Constants.ATTR_ARRAY_TYPE) != null)
  +                typeQName = Constants.SOAP_ARRAY;
  +
  +            // Set the encoding style to the attribute value.  If null,
  +            // we just automatically use our parent's (see getEncodingStyle)
  +            encodingStyle =
  +                    attributes.getValue(Constants.NS_URI_CURRENT_SOAP_ENC,
  +                                        Constants.ATTR_ENCODING_STYLE);
  +        }
  +    }
  +
  +    /** !!! TODO : Make sure this handles multiple targets
  +     */
  +    Deserializer fixupDeserializer;
  +
  +    public void setFixupDeserializer(Deserializer dser)
  +    {
  +        // !!! Merge targets here if already set?
  +        fixupDeserializer = dser;
  +    }
  +
  +    public Deserializer getFixupDeserializer()
  +    {
  +        return fixupDeserializer;
  +    }
  +
  +    public void setEndIndex(int endIndex)
  +    {
  +        endEventIndex = endIndex;
  +        //context.setRecorder(null);
  +    }
  +
  +    public boolean isDirty() { return _isDirty; }
  +    public void setDirty(boolean dirty) { _isDirty = dirty; };
  +
  +    public boolean isRoot() { return _isRoot; }
  +    public String getID() { return id; }
  +
  +    public String getHref() { return href; }
  +
  +    public Attributes getAttributes() { return attributes; }
  +
  +    /**
  +     * Obtain an Attributes collection consisting of all attributes
  +     * for this MessageElement, including namespace declarations.
  +     *
  +     * @return
  +     */
  +    public Attributes getCompleteAttributes() {
  +        if (namespaces == null)
  +            return attributes;
  +
  +        AttributesImpl attrs = new AttributesImpl(attributes);
  +        for (Iterator iterator = namespaces.iterator(); iterator.hasNext();) {
  +            Mapping mapping = (Mapping) iterator.next();
  +            String prefix = mapping.getPrefix();
  +            String nsURI = mapping.getNamespaceURI();
  +            attrs.addAttribute(Constants.NS_URI_XMLNS, prefix,
  +                               "xmlns:" + prefix, nsURI, "CDATA");
  +        }
  +        return attrs;
  +    }
  +
  +    public String getName() { return( name ); }
  +    public void setName(String name) { this.name = name; }
  +
  +    public String getPrefix() { return( prefix ); }
  +    public void setPrefix(String prefix) { this.prefix = prefix; }
  +
  +    public String getNamespaceURI() { return( namespaceURI ); }
  +    public void setNamespaceURI(String nsURI) { namespaceURI = nsURI; }
  +
  +    public QName getType() {
  +        // Try to get the type from our target if we're a reference...
  +        if (typeQName == null && href != null && context != null) {
  +            MessageElement referent = context.getElementByID(href);
  +            if (referent != null) {
  +                typeQName = referent.getType();
  +            }
  +        }
  +        return typeQName;
  +    }
  +    public void setType(QName qName) { typeQName = qName; }
  +
  +    public SAX2EventRecorder getRecorder() { return recorder; }
  +    public void setRecorder(SAX2EventRecorder rec) { recorder = rec; }
  +
  +    /**
  +     * Get the encoding style.  If ours is null, walk up the hierarchy
  +     * and use our parent's.  Default if we're the root is "".
  +     *
  +     * @return the currently in-scope encoding style
  +     */
  +    public String getEncodingStyle() {
  +        if (encodingStyle == null) {
  +            if (parent == null)
  +                return "";
  +            return parent.getEncodingStyle();
  +        }
  +        return encodingStyle;
  +    }
  +
  +    /**
  +     * Set the encoding style.  Calling this means you are absolutely
  +     * setting it to SOMETHING valid.  The semantics of a null value,
  +     * as above in getEncodingStyle() are to just use the parent's value,
  +     * but null here means set to "".
  +     */
  +    public void setEncodingStyle(String encodingStyle) throws SOAPException {
  +        if (encodingStyle == null) encodingStyle = "";
  +        this.encodingStyle = encodingStyle;
  +
  +        // Wherever we set the encoding style, map the SOAP-ENC prefix
  +        // just for fun.
  +        if (encodingStyle.equals(Constants.NS_URI_CURRENT_SOAP_ENC)) {
  +            addMapping(encMapping);
  +        }
  +    }
  +
  +    private MessageElement getParent() { return parent; }
  +    private void setParent(MessageElement parent) throws SOAPException
  +    {
  +        this.parent = parent;
  +        if (parent != null) {
  +            parent.addChild(this);
  +        }
  +    }
  +
  +    private ArrayList children = null;
  +
  +    /**
  +     * Note that this method will log a error and no-op if there is
  +     * a value (set using setObjectValue) in the MessageElement.
  +     */
  +    public void addChild(MessageElement el) throws SOAPException
  +    {
  +        if (objectValue != null) {
  +            SOAPException exc = new SOAPException(JavaUtils.
  +                                                  getMessage("valuePresent"));
  +            log.error(JavaUtils.getMessage("valuePresent"), exc);
  +            throw exc;
  +        }
  +        if (children == null)
  +            children = new ArrayList();
  +        children.add(el);
  +        el.parent = this;
  +    }
  +
  +    /**
  +     * Remove a child element.
  +     */
  +    private void removeChild(MessageElement child) {
  +        // Remove all occurrences in case it has been added multiple times.
  +        int i;
  +        while ((i = children.indexOf(child)) != -1) {
  +            children.remove(i);
  +        }
  +    }
  +
  +    public ArrayList getChildren()
  +    {
  +        return children;
  +    }
  +
  +    public void setContentsIndex(int index)
  +    {
  +        startContentsIndex = index;
  +    }
  +
  +    public void setNSMappings(ArrayList namespaces)
  +    {
  +        this.namespaces = namespaces;
  +    }
  +
  +    public String getPrefix(String namespaceURI) {
  +        if ((namespaceURI == null) || (namespaceURI.equals("")))
  +            return null;
  +
  +        if (href != null) {
  +            return getRealElement().getPrefix(namespaceURI);
  +        }
  +
  +        if (namespaces != null) {
  +            for (int i = 0; i < namespaces.size(); i++) {
  +                Mapping map = (Mapping)namespaces.get(i);
  +                if (map.getNamespaceURI().equals(namespaceURI))
  +                    return map.getPrefix();
  +            }
  +        }
  +
  +        if (parent != null)
  +            return parent.getPrefix(namespaceURI);
  +
  +        return null;
  +    }
  +
  +    public String getNamespaceURI(String prefix) {
  +        if (prefix == null)
  +            prefix = "";
  +
  +        if (href != null) {
  +            return getRealElement().getNamespaceURI(prefix);
  +        }
  +
  +        if (namespaces != null) {
  +            for (int i = 0; i < namespaces.size(); i++) {
  +                Mapping map = (Mapping)namespaces.get(i);
  +                if (map.getPrefix().equals(prefix)) {
  +                    return map.getNamespaceURI();
  +                }
  +            }
  +        }
  +
  +        if (parent != null)
  +            return parent.getNamespaceURI(prefix);
  +
  +        if (log.isDebugEnabled()) {
  +            log.debug(JavaUtils.getMessage("noPrefix00", "" + this, prefix));
  +        }
  +
  +        return null;
  +    }
  +
  +    /**
  +     * Returns value of the node as an object of registered type.
  +     * @return Object of proper type, or null if no mapping could be found.
  +     */
  +    public Object getObjectValue(){
  +        if (objectValue == null) {
  +            try {
  +                objectValue = getValueAsType(getType());
  +            } catch (Exception e) {
  +                log.debug("getValue()", e);
  +            }
  +        }
  +        return objectValue;
  +    }
  +
  +    /**
  +     * Sets value of this node to an Object.
  +     * A serializer needs to be registered for this object class for proper
  +     * operation.
  +     * <p>
  +     * Note that this method will log an error and no-op if there are
  +     * any children in the MessageElement or if the MessageElement was
  +     * constructed from XML.
  +     * @param newValue node's value or null.
  +     */
  +    public void setObjectValue(Object newValue) throws SOAPException {
  +        if (children != null && !children.isEmpty()) {
  +            SOAPException exc = new SOAPException(JavaUtils.
  +                                                  getMessage("childPresent"));
  +            log.error(JavaUtils.getMessage("childPresent"), exc);
  +            throw exc;
  +        }
  +        if (elementRep != null) {
  +            SOAPException exc = new SOAPException(JavaUtils.
  +                                                  getMessage("xmlPresent"));
  +            log.error(JavaUtils.getMessage("xmlPresent"), exc);
  +            throw exc;
  +        }
  +        if (textRep != null) {
  +            SOAPException exc = new SOAPException(JavaUtils.
  +                                                  getMessage("xmlPresent"));
  +            log.error(JavaUtils.getMessage("xmlPresent"), exc);
  +            throw exc;
  +        }
  +        this.objectValue = newValue;
  +    }
  +
  +    public Object getValueAsType(QName type) throws Exception
  +    {
  +        if (context == null)
  +            throw new Exception(JavaUtils.getMessage("noContext00"));
  +
  +        Deserializer dser = context.getDeserializerForType(type);
  +        if (dser == null)
  +            throw new Exception(JavaUtils.getMessage("noDeser00", "" + type));
  +
  +        context.pushElementHandler(new EnvelopeHandler((SOAPHandler)dser));
  +
  +        publishToHandler((org.xml.sax.ContentHandler) context);
  +
  +        return dser.getValue();
  +    }
  +
  +    protected static class QNameAttr {
  +        QName name;
  +        QName value;
  +    }
  +
  +    public void addAttribute(String namespace, String localName,
  +                             QName value)
  +    {
  +        if (qNameAttrs == null)
  +            qNameAttrs = new Vector();
  +
  +        QNameAttr attr = new QNameAttr();
  +        attr.name = new QName(namespace, localName);
  +        attr.value = value;
  +
  +        qNameAttrs.addElement(attr);
  +        // !!! Add attribute to attributes!
  +    }
  +
  +    public void addAttribute(String namespace, String localName,
  +                             String value)
  +    {
  +        if (attributes == null) {
  +            attributes = new AttributesImpl();
  +        }
  +        attributes.addAttribute(namespace, localName, "", "CDATA",
  +                                value);
  +    }
  +
  +    /**
  +     * Set an attribute, adding the attribute if it isn't already present
  +     * in this element, and changing the value if it is.  Passing null as the
  +     * value will cause any pre-existing attribute by this name to go away.
  +     */
  +    public void setAttribute(String namespace, String localName,
  +                             String value)
  +    {
  +        if (attributes != null) {
  +            int idx = attributes.getIndex(namespace, localName);
  +            if (idx > -1) {
  +                // Got it, so replace it's value.
  +                if (value != null) {
  +                    attributes.setValue(idx, value);
  +                } else {
  +                    attributes.removeAttribute(idx);
  +                }
  +                return;
  +            }
  +        } else if (value != null) {
  +            attributes = new AttributesImpl();
  +        }
  +
  +        addAttribute(namespace, localName, value);
  +    }
  +
  +    public String getAttributeValue(String localName)
  +    {
  +        if (attributes == null) {
  +           return null;
  +        }
  +        return attributes.getValue(localName);
  +    }
  +
  +    public void setEnvelope(SOAPEnvelope env)
  +    {
  +        message = env;
  +    }
  +    public SOAPEnvelope getEnvelope()
  +    {
  +        return message;
  +    }
  +
  +    public MessageElement getRealElement()
  +    {
  +        if (href == null)
  +            return this;
  +
  +        Object obj = context.getObjectByRef(href);
  +        if (obj == null)
  +            return null;
  +
  +        if (!(obj instanceof MessageElement))
  +            return null;
  +
  +        return (MessageElement)obj;
  +    }
  +
  +    public Document getAsDocument() throws Exception
  +    {
  +        String elementString = getAsString();
  +
  +        Reader reader = new StringReader(elementString);
  +        Document doc = XMLUtils.newDocument(new InputSource(reader));
  +        if (doc == null)
  +            throw new Exception(
  +                    JavaUtils.getMessage("noDoc00", elementString));
  +        return doc;
  +    }
  +
  +    private String getAsString() throws Exception {
  +        SerializationContext serializeContext = null;
  +        StringWriter writer = new StringWriter();
  +        MessageContext msgContext;
  +        if (context != null) {
  +            msgContext = context.getMessageContext();
  +        } else {
  +            msgContext = MessageContext.getCurrentContext();
  +        }
  +        serializeContext = new SerializationContextImpl(writer, msgContext);
  +        serializeContext.setSendDecl(false);
  +        output(serializeContext);
  +        writer.close();
  +
  +        return writer.getBuffer().toString();
  +    }
  +
  +    public Element getAsDOM() throws Exception
  +    {
  +        return getAsDocument().getDocumentElement();
  +    }
  +
  +    public void publishToHandler(ContentHandler handler) throws SAXException
  +    {
  +        if (recorder == null)
  +            throw new SAXException(JavaUtils.getMessage("noRecorder00"));
  +
  +        recorder.replay(startEventIndex, endEventIndex, handler);
  +    }
  +
  +    public void publishContents(ContentHandler handler) throws SAXException
  +    {
  +        if (recorder == null)
  +            throw new SAXException(JavaUtils.getMessage("noRecorder00"));
  +
  +        recorder.replay(startContentsIndex, endEventIndex-1, handler);
  +    }
  +
  +    /** This is the public output() method, which will always simply use
  +     * the recorded SAX stream for this element if it is available.  If
  +     * not, this method calls outputImpl() to allow subclasses and
  +     * programmatically created messages to serialize themselves.
  +     *
  +     * @param context the SerializationContext we will write to.
  +     */
  +    public final void output(SerializationContext context) throws Exception
  +    {
  +        if ((recorder != null) && (!_isDirty)) {
  +            recorder.replay(startEventIndex,
  +                            endEventIndex,
  +                            new SAXOutputter(context));
  +            return;
  +        }
  +
  +        // Turn QName attributes into strings
  +        if (qNameAttrs != null) {
  +            for (int i = 0; i < qNameAttrs.size(); i++) {
  +                QNameAttr attr = (QNameAttr)qNameAttrs.get(i);
  +                QName attrName = attr.name;
  +                addAttribute(attrName.getNamespaceURI(),
  +                             attrName.getLocalPart(),
  +                             context.qName2String(attr.value));
  +            }
  +            qNameAttrs = null;
  +        }
  +
  +        /**
  +         * Write the encoding style attribute IF it's different from
  +         * whatever encoding style is in scope....
  +         */
  +        if (encodingStyle != null) {
  +            MessageContext mc = context.getMessageContext();
  +            SOAPConstants soapConstants = (mc != null) ?
  +                                            mc.getSOAPConstants() :
  +                                            SOAPConstants.SOAP11_CONSTANTS;
  +            if (parent == null) {
  +                // don't emit an encoding style if its "" (literal)
  +                if (!encodingStyle.equals("")) {
  +                    setAttribute(soapConstants.getEnvelopeURI(),
  +                                 Constants.ATTR_ENCODING_STYLE,
  +                                 encodingStyle);
  +                }
  +            } else if (!encodingStyle.equals(parent.getEncodingStyle())) {
  +                setAttribute(soapConstants.getEnvelopeURI(),
  +                             Constants.ATTR_ENCODING_STYLE,
  +                             encodingStyle);
  +            }
  +        }
  +
  +        outputImpl(context);
  +    }
  +
  +    /** Subclasses can override
  +     */
  +    protected void outputImpl(SerializationContext context) throws Exception
  +    {
  +        if (elementRep != null) {
  +            boolean oldPretty = context.getPretty();
  +            context.setPretty(false);
  +            context.writeDOMElement(elementRep);
  +            context.setPretty(oldPretty);
  +            return;
  +        }
  +
  +        if (textRep != null) {
  +            boolean oldPretty = context.getPretty();
  +            context.setPretty(false);
  +            context.writeSafeString(((Text)textRep).getData());
  +            context.setPretty(oldPretty);
  +            return;
  +        }
  +
  +        if (prefix != null)
  +            context.registerPrefixForURI(prefix, namespaceURI);
  +
  +        if (objectValue != null) {
  +            context.serialize(new QName(namespaceURI, name),
  +                              attributes,
  +                              objectValue,
  +                              objectValue.getClass());
  +            return;
  +        }
  +
  +        context.startElement(new QName(namespaceURI, name), attributes);
  +        if (children != null) {
  +            for (Iterator it = children.iterator(); it.hasNext();) {
  +                ((MessageElement)it.next()).output(context);
  +            }
  +        }
  +        context.endElement();
  +    }
  +
  +    public String toString() {
  +        try {
  +            return getAsString();
  +        }
  +        catch( Exception exp ) {
  +            log.error(JavaUtils.getMessage("exception00"), exp);
  +            return null;
  +        }
  +    }
  +
  +    public void addMapping(Mapping map) {
  +        if (namespaces == null) namespaces = new ArrayList();
  +        namespaces.add(map);
  +    }
  +
  +    // JAXM Node methods...
  +
  +    /**
  +     * Text nodes are not supported.
  +     */
  +    public String getValue() {
  +        return null;
  +    }
  +
  +    public void setParentElement(SOAPElement parent) throws SOAPException {
  +        try {
  +            setParent((MessageElement)parent);
  +        } catch (Throwable t) {
  +            throw new SOAPException(t);
  +        }
  +    }
  +
  +    public SOAPElement getParentElement() {
  +        return getParent();
  +    }
  +
  +    /**
  +     * Break the relationship between this element and its parent, if any.
  +     */
  +    public void detachNode() {
  +        if (parent != null) {
  +            parent.removeChild(this);
  +            parent = null;
  +        }
  +    }
  +
  +    /**
  +     * No-opped - Axis does not recycle nodes.
  +     */
  +    public void recycleNode() {}
  +
  +    // JAXM SOAPElement methods...
  +
  +    public SOAPElement addChildElement(Name name) throws SOAPException {
  +        MessageElement child = new MessageElement(name.getURI(),
  +                                                  name.getLocalName());
  +        addChild(child);
  +        return child;
  +    }
  +
  +    public SOAPElement addChildElement(String localName) throws SOAPException {
  +        // Inherit parent's namespace
  +        MessageElement child = new MessageElement(getNamespaceURI(),
  +                                                  localName);
  +        addChild(child);
  +        return child;
  +    }
  +
  +    public SOAPElement addChildElement(String localName,
  +                                       String prefix) throws SOAPException {
  +        MessageElement child = new MessageElement(getNamespaceURI(prefix),
  +                                                  localName);
  +        addChild(child);
  +        return child;
  +    }
  +
  +    public SOAPElement addChildElement(String localName,
  +                                       String prefix,
  +                                       String uri) throws SOAPException {
  +            MessageElement child = new MessageElement(uri, localName);
  +            child.addNamespaceDeclaration(prefix, uri);
  +            addChild(child);
  +            return child;
  +    }
  +
  +    /**
  +     * The added child must be an instance of MessageElement rather than
  +     * an abitrary SOAPElement otherwise a (wrapped) ClassCastException
  +     * will be thrown.
  +     */
  +    public SOAPElement addChildElement(SOAPElement element)
  +        throws SOAPException {
  +        try {
  +            addChild((MessageElement)element);
  +            return element;
  +        } catch (ClassCastException e) {
  +            throw new SOAPException(e);
  +        }
  +    }
  +
  +    /**
  +     * Text nodes are not supported.
  +     */
  +    public SOAPElement addTextNode(String s) throws SOAPException {
  +        org.apache.axis.message.Text text = new org.apache.axis.message.Text(s);
  +        try {
  +            addChild((MessageElement)text);
  +            return text;
  +        } catch (ClassCastException e) {
  +            throw new SOAPException(e);
  +        }
  +    }
  +
  +    public SOAPElement addAttribute(Name name, String value)
  +        throws SOAPException {
  +        try {
  +            addAttribute(name.getURI(), name.getLocalName(), value);
  +        } catch (RuntimeException t) {
  +            throw new SOAPException(t);
  +        }
  +        return this;
  +    }
  +
  +    public SOAPElement addNamespaceDeclaration(String prefix,
  +                                               String uri)
  +        throws SOAPException {
  +        try {
  +            Mapping map = new Mapping(uri, prefix);
  +            addMapping(map);
  +        } catch (RuntimeException t) {
  +            throw new SOAPException(t);
  +        }
  +        return this;
  +    }
  +
  +    public String getAttributeValue(Name name) {
  +        return attributes.getValue(name.getURI(), name.getLocalName());
  +    }
  +
  +    public Iterator getAllAttributes() {
  +        int num = attributes.getLength();
  +        Vector attrs = new Vector(num);
  +        for (int i = 0; i < num; i++) {
  +            String q = attributes.getQName(i);
  +            String prefix = "";
  +            if (q != null) {
  +                int idx = q.indexOf(":");
  +                if (idx > 0)
  +                    prefix = q.substring(0, idx);
  +            }
  +
  +            attrs.add(new PrefixedQName(attributes.getURI(i),
  +                                        attributes.getLocalName(i),
  +                                        prefix));
  +        }
  +        return attrs.iterator();
  +    }
  +
  +    // getNamespaceURI implemented above
  +
  +    public Iterator getNamespacePrefixes() {
  +        int num = namespaces.size();
  +        Vector prefixes = new Vector(num);
  +        for (int i = 0; i < num; i++) {
  +            prefixes.add(((Mapping)namespaces.get(i)).getPrefix());
  +        }
  +        return prefixes.iterator();
  +    }
  +
  +    public Name getElementName() {
  +        return new PrefixedQName(getNamespaceURI(), getName(), getPrefix());
  +    }
  +
  +    public boolean removeAttribute(Name name) {
  +        boolean removed = false;
  +
  +        for (int i = 0; i < attributes.getLength() && !removed; i++) {
  +            if (attributes.getURI(i).equals(name.getURI()) &&
  +                attributes.getLocalName(i).equals(name.getLocalName())) {
  +                attributes.removeAttribute(i);
  +                removed = true;
  +            }
  +        }
  +        return removed;
  +    }
  +
  +    public boolean removeNamespaceDeclaration(String prefix) {
  +        boolean removed = false;
  +
  +        for (int i = 0; i < namespaces.size() && !removed; i++) {
  +            if (((Mapping)namespaces.get(i)).getPrefix().equals(prefix)) {
  +                namespaces.remove(i);
  +                removed = true;
  +            }
  +        }
  +        return removed;
  +    }
  +
  +    public Iterator getChildElements() {
  +        if (children == null)
  +            children = new ArrayList();
  +        return children.iterator();
  +    }
  +
  +    public Iterator getChildElements(Name name) {
  +        if (children == null)
  +            children = new ArrayList();
  +        int num = children.size();
  +
  +        Vector c = new Vector(num);
  +        for (int i = 0; i < num; i++) {
  +            MessageElement child = (MessageElement)children.get(i);
  +            Name cname = child.getElementName();
  +            if (cname.getURI().equals(name.getURI()) &&
  +                cname.getLocalName().equals(name.getLocalName())) {
  +                c.add(child);
  +            }
  +        }
  +        return c.iterator();
  +    }
  +
  +    // setEncodingStyle implemented above
  +
  +    // getEncodingStyle() implemented above
  +
  +}
  
  
  
  1.2       +6 -0      xml-axis/java/src/org/apache/axis/message/Text.java
  
  Index: Text.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/message/Text.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- Text.java	29 May 2002 17:00:00 -0000	1.1
  +++ Text.java	30 May 2002 16:40:42 -0000	1.2
  @@ -63,6 +63,12 @@
    * @author Davanum Srinivas (dims@yahoo.com)
    */
   public class Text extends MessageElement implements javax.xml.soap.Text {
  +
  +    public Text(String s) {
  +        org.w3c.dom.Document doc = org.apache.axis.utils.XMLUtils.newDocument();
  +        textRep = doc.createTextNode(s);
  +    }
  +
       /**
        * Retrieves whether this <CODE>Text</CODE> object
        * represents a comment.
  
  
  
  1.2       +6 -2      xml-axis/java/src/org/apache/axis/soap/MessageFactoryImpl.java
  
  Index: MessageFactoryImpl.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/soap/MessageFactoryImpl.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- MessageFactoryImpl.java	29 May 2002 17:00:01 -0000	1.1
  +++ MessageFactoryImpl.java	30 May 2002 16:40:42 -0000	1.2
  @@ -60,6 +60,9 @@
   import java.io.IOException;
   import java.io.InputStream;
   
  +import org.apache.axis.message.SOAPEnvelope;
  +import org.apache.axis.Message;
  +
   /**
    * Message Factory implementation
    *
  @@ -85,8 +88,9 @@
        * @throws  SOAPException if a SOAP error occurs
        */
       public SOAPMessage createMessage() throws SOAPException {
  -        //TODO:Flesh this out.
  -        return null;
  +        Message message = new Message(new SOAPEnvelope());
  +        message.setMessageType(Message.REQUEST);
  +        return message;
       }
   
       /**
  
  
  
  1.2       +1 -2      xml-axis/java/src/org/apache/axis/soap/SOAPConnectionFactoryImpl.java
  
  Index: SOAPConnectionFactoryImpl.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/soap/SOAPConnectionFactoryImpl.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- SOAPConnectionFactoryImpl.java	29 May 2002 17:00:01 -0000	1.1
  +++ SOAPConnectionFactoryImpl.java	30 May 2002 16:40:42 -0000	1.2
  @@ -70,7 +70,6 @@
        *     creating the <CODE>SOAPConnection</CODE> object.
        */
       public SOAPConnection createConnection() throws SOAPException {
  -        //TODO:Flesh this out.
  -        return null;
  +        return new SOAPConnectionImpl();
       }
   }
  
  
  
  1.2       +15 -2     xml-axis/java/src/org/apache/axis/soap/SOAPConnectionImpl.java
  
  Index: SOAPConnectionImpl.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/soap/SOAPConnectionImpl.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- SOAPConnectionImpl.java	29 May 2002 17:00:01 -0000	1.1
  +++ SOAPConnectionImpl.java	30 May 2002 16:40:42 -0000	1.2
  @@ -58,6 +58,9 @@
   import javax.xml.soap.SOAPException;
   import javax.xml.messaging.Endpoint;
   
  +import org.apache.axis.client.Call;
  +import org.apache.axis.message.SOAPEnvelope;
  +
   /**
    * SOAP Connection implementation
    *
  @@ -78,8 +81,18 @@
        */
       public SOAPMessage call(SOAPMessage request, Endpoint endpoint)
           throws SOAPException {
  -        //TODO: Flesh this out.
  -        return null;
  +        try {
  +            Call call = new Call(endpoint.toString());
  +            SOAPEnvelope env = ((org.apache.axis.Message)request).getSOAPEnvelope();
  +            call.invoke(env);
  +            return call.getResponseMessage();
  +        } catch (java.net.MalformedURLException mue){
  +            throw new SOAPException(mue);
  +        } catch (org.apache.axis.AxisFault af){
  +            throw new SOAPException(af);
  +        } catch (java.rmi.RemoteException re){
  +            throw new SOAPException(re);
  +        }
       }
   
       /**
  
  
  
  1.21      +3 -0      xml-axis/java/test/functional/FunctionalTests.java
  
  Index: FunctionalTests.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/test/functional/FunctionalTests.java,v
  retrieving revision 1.20
  retrieving revision 1.21
  diff -u -r1.20 -r1.21
  --- FunctionalTests.java	8 May 2002 19:20:08 -0000	1.20
  +++ FunctionalTests.java	30 May 2002 16:40:42 -0000	1.21
  @@ -24,6 +24,9 @@
   
           // Test the JAX-RPC compliance samples
           suite.addTestSuite(TestJAXRPCSamples.class);
  +
  +        // Test the JAXM compliance samples
  +        suite.addTestSuite(TestJAXMSamples.class);
           
           // stock sample test
           // run this BEFORE ALL OTHER TESTS to minimize confusion;
  
  
  
  1.1                  xml-axis/java/test/functional/TestJAXMSamples.java
  
  Index: TestJAXMSamples.java
  ===================================================================
  /*
   * The Apache Software License, Version 1.1
   *
   *
   * Copyright (c) 2001 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Axis" and "Apache Software Foundation" must
   *    not be used to endorse or promote products derived from this
   *    software without prior written permission. For written
   *    permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache",
   *    nor may "Apache" appear in their name, without prior written
   *    permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  
  package test.functional;
  
  import junit.framework.TestCase;
  import org.apache.axis.AxisFault;
  import org.apache.commons.logging.Log;
  import org.apache.commons.logging.LogFactory;
  import samples.jaxm.UddiPing;
  
  /**
   * Test the JAX-RPC compliance samples.
   */
  public class TestJAXMSamples extends TestCase {
      static Log log = LogFactory.getLog(TestJAXMSamples.class.getName());
  
      public TestJAXMSamples(String name) {
          super(name);
      } // ctor
  
      public void testUddiPing() throws Exception {
          try {
              log.info("Testing JAXM UddiPing sample.");
              UddiPing.searchUDDI("IBM", "http://www-3.ibm.com/services/uddi/testregistry/inquiryapi");
              log.info("Test complete.");
          } catch (Throwable t) {
              if (t instanceof AxisFault) ((AxisFault) t).dump();
              t.printStackTrace();
              throw new Exception("Fault returned from test: " + t);
          }
      } // testGetQuote
  
      public static void main(String args[]) throws Exception {
          TestJAXMSamples tester = new TestJAXMSamples("tester");
          tester.testUddiPing();
      } // main
  }