axis-java-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Jongjin Choi" <gunsn...@hotmail.com>
Subject RE: cvs commit: ws-axis/java/test/message TestMessageElement.java
Date Mon, 05 Jul 2004 14:38:58 GMT
Hi, dims.

I looked into the following MessageElement changes and ran a test.
Does this change resolve the problem RPCParam <-> SOAP Element mapping 
addressed in http://nagoya.apache.org/jira/browse/AXIS-1416?

I made a simple test and found that the problem is remaining.

Without resolving the AXIS-1416, 
the standard JAX-RPC handler under Axis can not read or modify 
the second and below level SOAP body elements.

Thanks.


-----Original Message-----
From: dims@apache.org [mailto:dims@apache.org] 
Sent: Thursday, June 24, 2004 9:28 PM
To: ws-axis-cvs@apache.org
Subject: cvs commit: ws-axis/java/test/message TestMessageElement.java

dims        2004/06/24 05:27:38

  Modified:    java/test/wsdl/faults FaultServiceSoapBindingImpl.java
               java/src/org/apache/axis/message MessageElement.java
               java/test/wsdl/sequence SequenceService.java
               java/src/org/apache/axis/encoding
                        SerializationContextImpl.java
               java/test/encoding TestDOM.java
               java/test/message TestMessageElement.java
  Log:
  Fix for AXIS-1350 - new MessageElement(new Element()) does not behave like
an Element
  Fix for AXIS-616 - MessageElement is not for mortals
  Fix for AXIS-1054 - No way to non-default namespace prefixes when creating
MessageElements from DOM elements
  Fix for AXIS-1403 - calling MessageElement#getChildren with a Text-Only
content returns an empty list
  
  Notes:
  - traverse all the nodes recursively and create new MessageElement's for
each node.
  
  Revision  Changes    Path
  1.5       +1 -1
ws-axis/java/test/wsdl/faults/FaultServiceSoapBindingImpl.java
  
  Index: FaultServiceSoapBindingImpl.java
  ===================================================================
  RCS file:
/home/cvs/ws-axis/java/test/wsdl/faults/FaultServiceSoapBindingImpl.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- FaultServiceSoapBindingImpl.java	11 Dec 2002 22:40:20 -0000	1.4
  +++ FaultServiceSoapBindingImpl.java	24 Jun 2004 12:27:37 -0000	1.5
  @@ -23,7 +23,7 @@
       public int throwExtensionFault(java.lang.String description) throws
java.rmi.RemoteException, test.wsdl.faults.ExtensionFault {
           ExtensionType extension = new ExtensionType();
           try {
  -            extension.set_any(new MessageElement[] {new
MessageElement(XMLUtils.newDocument().createElement(description))});
  +            extension.set_any(new MessageElement[] {new
MessageElement(XMLUtils.newDocument().createElementNS(null,description))});
           } catch (Exception e) {
               throw new java.rmi.RemoteException(e.getMessage());
           }
  
  
  
  1.173     +85 -36
ws-axis/java/src/org/apache/axis/message/MessageElement.java
  
  Index: MessageElement.java
  ===================================================================
  RCS file:
/home/cvs/ws-axis/java/src/org/apache/axis/message/MessageElement.java,v
  retrieving revision 1.172
  retrieving revision 1.173
  diff -u -r1.172 -r1.173
  --- MessageElement.java	23 Jun 2004 04:14:31 -0000	1.172
  +++ MessageElement.java	24 Jun 2004 12:27:37 -0000	1.173
  @@ -16,22 +16,6 @@
   
   package org.apache.axis.message;
   
  -import java.io.Reader;
  -import java.io.Serializable;
  -import java.io.StringReader;
  -import java.io.StringWriter;
  -import java.util.ArrayList;
  -import java.util.Iterator;
  -import java.util.Vector;
  -import java.util.Enumeration;
  -import java.util.List;
  -
  -import javax.xml.namespace.QName;
  -import javax.xml.rpc.encoding.TypeMapping;
  -import javax.xml.soap.Name;
  -import javax.xml.soap.SOAPElement;
  -import javax.xml.soap.SOAPException;
  -
   import org.apache.axis.AxisFault;
   import org.apache.axis.Constants;
   import org.apache.axis.MessageContext;
  @@ -48,6 +32,9 @@
   import org.apache.axis.utils.XMLUtils;
   import org.apache.commons.logging.Log;
   import org.w3c.dom.Attr;
  +import org.w3c.dom.CDATASection;
  +import org.w3c.dom.CharacterData;
  +import org.w3c.dom.Comment;
   import org.w3c.dom.DOMException;
   import org.w3c.dom.Document;
   import org.w3c.dom.Element;
  @@ -61,6 +48,21 @@
   import org.xml.sax.SAXException;
   import org.xml.sax.helpers.AttributesImpl;
   
  +import javax.xml.namespace.QName;
  +import javax.xml.rpc.encoding.TypeMapping;
  +import javax.xml.soap.Name;
  +import javax.xml.soap.SOAPElement;
  +import javax.xml.soap.SOAPException;
  +import java.io.Reader;
  +import java.io.Serializable;
  +import java.io.StringReader;
  +import java.io.StringWriter;
  +import java.util.ArrayList;
  +import java.util.Enumeration;
  +import java.util.Iterator;
  +import java.util.List;
  +import java.util.Vector;
  +
   /*
    * MessageElement is the base type of nodes of the SOAP message parse
tree.
    *
  @@ -106,8 +108,7 @@
       protected int endEventIndex = -1;
   
       // ...or as DOM
  -    protected Element elementRep = null;
  -    protected Text textRep = null;
  +    protected CharacterData textRep = null;
   
       protected MessageElement parent = null;
   
  @@ -163,12 +164,12 @@
   
       public MessageElement(Element elem)
       {
  -        elementRep = elem;
           namespaceURI = elem.getNamespaceURI();
           name = elem.getLocalName();
  +        copyNode(elem);
       }
   
  -    public MessageElement(Text text)
  +    public MessageElement(CharacterData text)
       {
           textRep = text;
           namespaceURI = text.getNamespaceURI();
  @@ -399,8 +400,7 @@
        *  protected int startEventIndex = 0;                   N?
        *  protected int startContentsIndex = 0;                N?
        *  protected int endEventIndex = -1;                    N?
  -     *  protected Element elementRep = null;                N?
  -     *  protected Text textRep = null;                      Y?
  +     *  protected CharacterData textRep = null;             Y?
        *  protected MessageElement parent = null;             N
        *  public ArrayList namespaces = null;                 Y
        *  protected String encodingStyle = null;              N?
  @@ -608,7 +608,13 @@
       
       public short getNodeType() {
           if(this.textRep != null) {
  +            if(textRep instanceof Comment) {
  +                return COMMENT_NODE;
  +            } else if(textRep instanceof CDATASection) {
  +                    return CDATA_SECTION_NODE;
  +            } else { 
               return TEXT_NODE;
  +            }
           }else if(false){
               return DOCUMENT_FRAGMENT_NODE;
           }else if(false){
  @@ -908,11 +914,6 @@
               log.error(Messages.getMessage("childPresent"), exc);
               throw exc;
           }
  -        if (elementRep != null) {
  -            SOAPException exc = new
SOAPException(Messages.getMessage("xmlPresent"));
  -            log.error(Messages.getMessage("xmlPresent"), exc);
  -            throw exc;
  -        }
           if (textRep != null) {
               SOAPException exc = new
SOAPException(Messages.getMessage("xmlPresent"));
               log.error(Messages.getMessage("xmlPresent"), exc);
  @@ -1165,18 +1166,20 @@
        */
       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(textRep.getData());
  +            if (textRep instanceof CDATASection) {
  +                context.writeString("<![CDATA[");
  +                context.writeString(((Text)textRep).getData());
  +                context.writeString("]]>");
  +            } else if (textRep instanceof Comment) {
  +                context.writeString("<!--");
  +                context.writeString(((CharacterData)textRep).getData());
  +                context.writeString("-->");
  +            } else if (textRep instanceof Text) {
  +                context.writeSafeString(((Text)textRep).getData());
  +            }
               context.setPretty(oldPretty);
               return;
           }
  @@ -1727,5 +1730,51 @@
           if (obj == null || !(obj instanceof MessageElement))
               return false;
           return toString().equals(obj.toString());
  +    }
  +
  +    private void copyNode(org.w3c.dom.Node element) {
  +        copyNode(this, element);
  +    }
  +
  +    private void copyNode(MessageElement parent, org.w3c.dom.Node
element)
  +    {
  +        parent.setPrefix(element.getPrefix());
  +        if(element.getLocalName() != null) {
  +            parent.setQName(new QName(element.getNamespaceURI(),
element.getLocalName()));
  +        }
  +
  +        org.w3c.dom.NamedNodeMap attrs = element.getAttributes();
  +        for(int i = 0; i < attrs.getLength(); i++){
  +            org.w3c.dom.Node att = attrs.item(i);
  +        if (att.getNamespaceURI() != null &&
  +                att.getPrefix() != null &&
  +                att.getNamespaceURI().equals(Constants.NS_URI_XMLNS) &&
  +                att.getPrefix().equals("xmlns")) {
  +                Mapping map = new Mapping(att.getNodeValue(),
att.getLocalName());
  +                addMapping(map);
  +            }
  +            parent.addAttribute(att.getPrefix(),
  +                    att.getNamespaceURI(),
  +                    att.getLocalName(),
  +                    att.getNodeValue());
  +        }
  +
  +        org.w3c.dom.NodeList children = element.getChildNodes();
  +        for(int i = 0; i < children.getLength(); i++){
  +            org.w3c.dom.Node child = children.item(i);
  +            if(child.getNodeType()==TEXT_NODE || 
  +               child.getNodeType()==CDATA_SECTION_NODE || 
  +               child.getNodeType()==COMMENT_NODE ) {
  +                MessageElement childElement = new
MessageElement((CharacterData)child);
  +                parent.appendChild(childElement);
  +            } else {
  +                PrefixedQName qname = new
PrefixedQName(child.getNamespaceURI(),
  +                        child.getLocalName(),
  +                        child.getPrefix());
  +                MessageElement childElement = new MessageElement(qname);
  +                parent.appendChild(childElement);
  +                copyNode(childElement, child);
  +            }
  +        }
       }
   }
  
  
  
  1.8       +1 -1      ws-axis/java/test/wsdl/sequence/SequenceService.java
  
  Index: SequenceService.java
  ===================================================================
  RCS file: /home/cvs/ws-axis/java/test/wsdl/sequence/SequenceService.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- SequenceService.java	25 Feb 2004 14:03:05 -0000	1.7
  +++ SequenceService.java	24 Jun 2004 12:27:37 -0000	1.8
  @@ -78,7 +78,7 @@
                   success = true;
           }
   
  -        resultElement = retDoc.createElement("return");
  +        resultElement = retDoc.createElementNS(null,"return");
   
           String resultStr = "false";
           if (success) {
  
  
  
  1.111     +3 -0
ws-axis/java/src/org/apache/axis/encoding/SerializationContextImpl.java
  
  Index: SerializationContextImpl.java
  ===================================================================
  RCS file:
/home/cvs/ws-axis/java/src/org/apache/axis/encoding/SerializationContextImpl
java,v
  retrieving revision 1.110
  retrieving revision 1.111
  diff -u -r1.110 -r1.111
  --- SerializationContextImpl.java	8 Jun 2004 19:45:48 -0000
1.110
  +++ SerializationContextImpl.java	24 Jun 2004 12:27:37 -0000
1.111
  @@ -403,6 +403,9 @@
               if (prefix == null) {
                   if (defaultPrefix == null) {
                       prefix = "ns" + lastPrefixIndex++;
  +                    while(nsStack.getNamespaceURI(prefix)!=null) {
  +                        prefix = "ns" + lastPrefixIndex++;    
  +                    }
                   } else {
                       prefix = defaultPrefix;
                   }
  
  
  
  1.19      +3 -3      ws-axis/java/test/encoding/TestDOM.java
  
  Index: TestDOM.java
  ===================================================================
  RCS file: /home/cvs/ws-axis/java/test/encoding/TestDOM.java,v
  retrieving revision 1.18
  retrieving revision 1.19
  diff -u -r1.18 -r1.19
  --- TestDOM.java	18 Nov 2003 22:36:37 -0000	1.18
  +++ TestDOM.java	24 Jun 2004 12:27:38 -0000	1.19
  @@ -123,14 +123,14 @@
   
       public void testEmptyNode() throws Exception
       {
  -        SOAPBodyElement body = new
SOAPBodyElement(XMLUtils.newDocument().createElement("tmp"));
  +        SOAPBodyElement body = new
SOAPBodyElement(XMLUtils.newDocument().createElementNS(null,"tmp"));
           assertXMLEqual("<tmp/>",body.toString());
       }
   
       public void testNodeWithAttribute() throws Exception 
       {
  -        org.w3c.dom.Element element =
XMLUtils.newDocument().createElement("tmp");
  -        element.setAttribute("attrib", "foo");
  +        org.w3c.dom.Element element =
XMLUtils.newDocument().createElementNS(null,"tmp");
  +        element.setAttributeNS(null,"attrib", "foo");
           SOAPBodyElement body = new SOAPBodyElement(element);
           assertXMLEqual("<tmp attrib=\"foo\"/>",body.toString());
       }
  
  
  
  1.15      +75 -10    ws-axis/java/test/message/TestMessageElement.java
  
  Index: TestMessageElement.java
  ===================================================================
  RCS file: /home/cvs/ws-axis/java/test/message/TestMessageElement.java,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -u -r1.14 -r1.15
  --- TestMessageElement.java	10 Apr 2004 21:12:06 -0000	1.14
  +++ TestMessageElement.java	24 Jun 2004 12:27:38 -0000	1.15
  @@ -16,7 +16,6 @@
   
   package test.message;
   
  -import junit.framework.TestCase;
   import org.apache.axis.Message;
   import org.apache.axis.MessageContext;
   import org.apache.axis.client.AxisClient;
  @@ -26,30 +25,37 @@
   import org.apache.axis.message.MessageElement;
   import org.apache.axis.message.PrefixedQName;
   import org.apache.axis.soap.SOAPConstants;
  +import org.apache.axis.utils.XMLUtils;
  +import org.w3c.dom.Document;
  +import org.w3c.dom.Element;
  +import org.w3c.dom.CDATASection;
   import org.xml.sax.Attributes;
  +import test.AxisTestBase;
   
   import javax.xml.namespace.QName;
  +import javax.xml.soap.MessageFactory;
   import javax.xml.soap.Name;
  +import javax.xml.soap.SOAPBody;
  +import javax.xml.soap.SOAPBodyElement;
   import javax.xml.soap.SOAPElement;
  -import javax.xml.soap.MessageFactory;
  +import javax.xml.soap.SOAPEnvelope;
   import javax.xml.soap.SOAPMessage;
   import javax.xml.soap.SOAPPart;
  -import javax.xml.soap.SOAPEnvelope;
  -import javax.xml.soap.SOAPBody;
  -import javax.xml.soap.SOAPBodyElement;
  -import java.util.Iterator;
  -import java.io.StringReader;
  -import java.io.ByteArrayOutputStream;
  -import java.io.ObjectOutputStream;
  +import javax.xml.parsers.DocumentBuilderFactory;
  +import javax.xml.parsers.DocumentBuilder;
   import java.io.ByteArrayInputStream;
  +import java.io.ByteArrayOutputStream;
   import java.io.ObjectInputStream;
  +import java.io.ObjectOutputStream;
  +import java.io.StringReader;
  +import java.util.Iterator;
   
   /**
    * Test MessageElement class.
    *
    * @author Glyn Normington (glyn@apache.org)
    */
  -public class TestMessageElement extends TestCase {
  +public class TestMessageElement extends AxisTestBase {
   
       public TestMessageElement(String name) {
           super(name);
  @@ -241,6 +247,65 @@
   
           assertEquals("m1 is not the same as m2", m1, m2);
           assertEquals("m2 is not the same as m1", m2, m1);
  +    }
  +    
  +    public void testElementConstructor() throws Exception {
  +        String xmlIn = "<h:html xmlns:xdc=\"http://www.xml.com/books\"\n"
+
  +                       "
xmlns:h=\"http://www.w3.org/HTML/1998/html4\">\n" +
  +                       " <h:head><h:title>Book
Review</h:title></h:head>\n" +
  +                       " <h:body>\n" +
  +                       "  <xdc:bookreview>\n" +
  +                       "   <xdc:title>XML: A Primer</xdc:title>\n" +
  +                       "   <h:table>\n" +
  +                       "    <h:tr align=\"center\">\n" +
  +                       "     <h:td>Author</h:td><h:td>Price</h:td>\n"
+
  +                       "
<h:td>Pages</h:td><h:td>Date</h:td></h:tr>\n" +
  +                       "     <!-- here is a comment -->\n" +
  +                       "    <h:tr align=\"left\">\n" +
  +                       "     <h:td><xdc:author>Simon St.
Laurent</xdc:author></h:td>\n" +
  +                       "     <h:td><xdc:price>31.98</xdc:price></h:td>\n"
+
  +                       "     <h:td><xdc:pages>352</xdc:pages></h:td>\n"
+
  +                       "     <h:td><xdc:date>1998/01</xdc:date></h:td>\n"
+
  +                       "     <h:td><![CDATA[text content]]></h:td>\n"
+
  +                       "    </h:tr>\n" +
  +                       "   </h:table>\n" +
  +                       "  </xdc:bookreview>\n" +
  +                       " </h:body>\n" +
  +                       "</h:html>";
  +        
  +        Document doc = XMLUtils.newDocument(new
ByteArrayInputStream(xmlIn.getBytes()));
  +        MessageElement me = new MessageElement(doc.getDocumentElement());
  +        String xmlOut = me.getAsString();
  +        this.assertXMLEqual(xmlIn,xmlOut);
  +    }
  +    
  +    public void testElementConstructor2() throws Exception {
  +        String xmlIn = "<!-- This file can be used to deploy the
echoAttachments sample -->\n" +
  +                "<!-- using this command: java
org.apache.axis.client.AdminClient attachdeploy.wsdd -->\n" +
  +                "\n" +
  +                "<!-- This deploys the echo attachment service.  -->\n" +
  +                "<deployment xmlns=\"http://xml.apache.org/axis/wsdd/\"
xmlns:java=\"http://xml.apache.org/axis/wsdd/providers/java\"
xmlns:ns1=\"urn:EchoAttachmentsService\" >\n" +
  +                "  <service name=\"urn:EchoAttachmentsService\"
provider=\"java:RPC\" >\n" +
  +                "    <parameter name=\"className\"
value=\"samples.attachments.EchoAttachmentsService\"/>\n" +
  +                "    <parameter name=\"allowedMethods\" value=\"echo
echoDir\"/>\n" +
  +                "    <operation name=\"echo\" returnQName=\"returnqname\"
returnType=\"ns1:DataHandler\" >\n" +
  +                "        <parameter name=\"dh\"
type=\"ns1:DataHandler\"/>\n" +
  +                "      </operation>\n" +
  +                "\n" +
  +                " <typeMapping
deserializer=\"org.apache.axis.encoding.ser.JAFDataHandlerDeserializerFactor
y\"\n" +
  +                "
languageSpecificType=\"java:javax.activation.DataHandler\"
qname=\"ns1:DataHandler\"\n" +
  +                "
serializer=\"org.apache.axis.encoding.ser.JAFDataHandlerSerializerFactory\"\
n" +
  +                "
encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\"\n" +
  +                "     />\n" +
  +                "  </service>\n" +
  +                "\n" +
  +                "</deployment>";
  +        
  +        Document doc = XMLUtils.newDocument(new
ByteArrayInputStream(xmlIn.getBytes()));
  +        MessageElement me = new MessageElement(doc.getDocumentElement());
  +        String xmlOut = me.getAsString();
  +        System.out.println(xmlOut);
  +        this.assertXMLEqual(xmlIn,xmlOut);
       }
       
       public static void main(String[] args) throws Exception {
  
  
  

Mime
View raw message