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/03/20 14:44:57 UTC

cvs commit: xml-axis/java/test/encoding RETURN.java TestBeanDeser.java PackageTests.java

dims        02/03/20 05:44:57

  Modified:    java/src/org/apache/axis/encoding/ser BeanDeserializer.java
               java/test/encoding PackageTests.java
  Added:       java/test/encoding RETURN.java TestBeanDeser.java
  Log:
  - Convert xml name to java name before looking into the propertyMap.
  - Adding a new test case for testing the scenario where we fail (without the above fix.)
  
  Revision  Changes    Path
  1.14      +1 -1      xml-axis/java/src/org/apache/axis/encoding/ser/BeanDeserializer.java
  
  Index: BeanDeserializer.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/encoding/ser/BeanDeserializer.java,v
  retrieving revision 1.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- BeanDeserializer.java	18 Mar 2002 16:15:16 -0000	1.13
  +++ BeanDeserializer.java	20 Mar 2002 13:44:57 -0000	1.14
  @@ -161,7 +161,7 @@
   
           if (propDesc == null) {
               // look for a field by this name.
  -            propDesc = (BeanPropertyDescriptor) propertyMap.get(localName);
  +            propDesc = (BeanPropertyDescriptor) propertyMap.get(JavaUtils.xmlNameToJava(localName));
           }
           if (propDesc == null) {
               // No such field
  
  
  
  1.14      +1 -0      xml-axis/java/test/encoding/PackageTests.java
  
  Index: PackageTests.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/test/encoding/PackageTests.java,v
  retrieving revision 1.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- PackageTests.java	25 Feb 2002 15:24:14 -0000	1.13
  +++ PackageTests.java	20 Mar 2002 13:44:57 -0000	1.14
  @@ -32,6 +32,7 @@
           suite.addTestSuite(TestXsiType.class);
           suite.addTestSuite(TestOutputter.class);
           suite.addTestSuite(TestAttributes.class);
  +        suite.addTestSuite(TestBeanDeser.class);
   
           return suite;
       }
  
  
  
  1.1                  xml-axis/java/test/encoding/RETURN.java
  
  Index: RETURN.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.encoding;
  
  public class RETURN implements java.io.Serializable {
      private java.lang.String TYPE;
      private java.lang.String ID;
      private java.lang.String NUMBER;
      private java.lang.String MESSAGE;
      private java.lang.String LOGNO;
      private java.lang.String LOGMSGNO;
      private java.lang.String MESSAGEV1;
      private java.lang.String MESSAGEV2;
      private java.lang.String MESSAGEV3;
      private java.lang.String MESSAGEV4;
  
      public RETURN() {
      }
  
      public java.lang.String getTYPE() {
          return TYPE;
      }
  
      public void setTYPE(java.lang.String TYPE) {
          this.TYPE = TYPE;
      }
  
      public java.lang.String getID() {
          return ID;
      }
  
      public void setID(java.lang.String ID) {
          this.ID = ID;
      }
  
      public java.lang.String getNUMBER() {
          return NUMBER;
      }
  
      public void setNUMBER(java.lang.String NUMBER) {
          this.NUMBER = NUMBER;
      }
  
      public java.lang.String getMESSAGE() {
          return MESSAGE;
      }
  
      public void setMESSAGE(java.lang.String MESSAGE) {
          this.MESSAGE = MESSAGE;
      }
  
      public java.lang.String getLOGNO() {
          return LOGNO;
      }
  
      public void setLOGNO(java.lang.String LOGNO) {
          this.LOGNO = LOGNO;
      }
  
      public java.lang.String getLOGMSGNO() {
          return LOGMSGNO;
      }
  
      public void setLOGMSGNO(java.lang.String LOGMSGNO) {
          this.LOGMSGNO = LOGMSGNO;
      }
  
      public java.lang.String getMESSAGEV1() {
          return MESSAGEV1;
      }
  
      public void setMESSAGEV1(java.lang.String MESSAGEV1) {
          this.MESSAGEV1 = MESSAGEV1;
      }
  
      public java.lang.String getMESSAGEV2() {
          return MESSAGEV2;
      }
  
      public void setMESSAGEV2(java.lang.String MESSAGEV2) {
          this.MESSAGEV2 = MESSAGEV2;
      }
  
      public java.lang.String getMESSAGEV3() {
          return MESSAGEV3;
      }
  
      public void setMESSAGEV3(java.lang.String MESSAGEV3) {
          this.MESSAGEV3 = MESSAGEV3;
      }
  
      public java.lang.String getMESSAGEV4() {
          return MESSAGEV4;
      }
  
      public void setMESSAGEV4(java.lang.String MESSAGEV4) {
          this.MESSAGEV4 = MESSAGEV4;
      }
  
      // Type metadata
      private static org.apache.axis.description.TypeDesc typeDesc =
          new org.apache.axis.description.TypeDesc();
  
      static {
          org.apache.axis.description.FieldDesc field = new org.apache.axis.description.ElementDesc();
          field.setFieldName("LOGNO");
          field.setXmlName(new javax.xml.rpc.namespace.QName("urn:test.encoding", "LOG_NO"));
          typeDesc.addFieldDesc(field);
          field = new org.apache.axis.description.ElementDesc();
          field.setFieldName("MESSAGEV4");
          field.setXmlName(new javax.xml.rpc.namespace.QName("urn:test.encoding", "MESSAGE_V4"));
          typeDesc.addFieldDesc(field);
          field = new org.apache.axis.description.ElementDesc();
          field.setFieldName("MESSAGEV3");
          field.setXmlName(new javax.xml.rpc.namespace.QName("urn:test.encoding", "MESSAGE_V3"));
          typeDesc.addFieldDesc(field);
          field = new org.apache.axis.description.ElementDesc();
          field.setFieldName("MESSAGEV2");
          field.setXmlName(new javax.xml.rpc.namespace.QName("urn:test.encoding", "MESSAGE_V2"));
          typeDesc.addFieldDesc(field);
          field = new org.apache.axis.description.ElementDesc();
          field.setFieldName("MESSAGEV1");
          field.setXmlName(new javax.xml.rpc.namespace.QName("urn:test.encoding", "MESSAGE_V1"));
          typeDesc.addFieldDesc(field);
          field = new org.apache.axis.description.ElementDesc();
          field.setFieldName("LOGMSGNO");
          field.setXmlName(new javax.xml.rpc.namespace.QName("urn:test.encoding", "LOG_MSG_NO"));
          typeDesc.addFieldDesc(field);
      };
  
      /**
       * Return type metadata object
       */
      public static org.apache.axis.description.TypeDesc getTypeDesc() {
          return typeDesc;
      }
  
      public boolean equals(Object obj) {
          // compare elements
          RETURN other = (RETURN) obj;
          if (obj == null) return false;
          if (this == obj) return true;
          if (! (obj instanceof RETURN)) return false;
          return
              ((TYPE==null && other.getTYPE()==null) || 
               (TYPE!=null &&
                TYPE.equals(other.getTYPE()))) &&
              ((ID==null && other.getID()==null) || 
               (ID!=null &&
                ID.equals(other.getID()))) &&
              ((NUMBER==null && other.getNUMBER()==null) || 
               (NUMBER!=null &&
                NUMBER.equals(other.getNUMBER()))) &&
              ((MESSAGE==null && other.getMESSAGE()==null) || 
               (MESSAGE!=null &&
                MESSAGE.equals(other.getMESSAGE()))) &&
              ((LOGNO==null && other.getLOGNO()==null) || 
               (LOGNO!=null &&
                LOGNO.equals(other.getLOGNO()))) &&
              ((LOGMSGNO==null && other.getLOGMSGNO()==null) || 
               (LOGMSGNO!=null &&
                LOGMSGNO.equals(other.getLOGMSGNO()))) &&
              ((MESSAGEV1==null && other.getMESSAGEV1()==null) || 
               (MESSAGEV1!=null &&
                MESSAGEV1.equals(other.getMESSAGEV1()))) &&
              ((MESSAGEV2==null && other.getMESSAGEV2()==null) || 
               (MESSAGEV2!=null &&
                MESSAGEV2.equals(other.getMESSAGEV2()))) &&
              ((MESSAGEV3==null && other.getMESSAGEV3()==null) || 
               (MESSAGEV3!=null &&
                MESSAGEV3.equals(other.getMESSAGEV3()))) &&
              ((MESSAGEV4==null && other.getMESSAGEV4()==null) || 
               (MESSAGEV4!=null &&
                MESSAGEV4.equals(other.getMESSAGEV4())));
      }
  }
  
  
  
  1.1                  xml-axis/java/test/encoding/TestBeanDeser.java
  
  Index: TestBeanDeser.java
  ===================================================================
  package test.encoding;
  
  import junit.framework.TestCase;
  import org.apache.axis.Constants;
  import org.apache.axis.Message;
  import org.apache.axis.MessageContext;
  import org.apache.axis.encoding.TypeMapping;
  import org.apache.axis.encoding.TypeMappingRegistry;
  import org.apache.axis.message.RPCElement;
  import org.apache.axis.message.RPCParam;
  import org.apache.axis.message.SOAPEnvelope;
  import org.apache.axis.server.AxisServer;
  import org.apache.axis.utils.JavaUtils;
  
  import javax.xml.rpc.namespace.QName;
  import java.lang.reflect.Array;
  import java.util.Iterator;
  import java.util.List;
  import java.util.Map;
  import java.util.Set;
  import java.util.Vector;
  
  /**
   * Test deserialization of SOAP responses
   */
  public class TestBeanDeser extends TestCase {
  
      private String header;
      private String footer;
      private AxisServer server = new AxisServer();
  
      public TestBeanDeser(String name) {
          this(name, Constants.URI_CURRENT_SCHEMA_XSI,
                  Constants.URI_CURRENT_SCHEMA_XSD);
      }
  
      public TestBeanDeser(String name, String NS_XSI, String NS_XSD) {
          super(name);
  
          header =
              "<?xml version=\"1.0\"?>\n" +
              "<SOAP-ENV:Envelope\n" +
              "xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\"\n" +
              "xmlns:SOAP-ENC=\"http://schemas.xmlsoap.org/soap/encoding/\"\n" +
              "xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"\n" +
              "xmlns:xsd-cr=\"http://www.w3.org/2000/10/XMLSchema\"\n" +
              "xmlns:xsd-lc=\"http://www.w3.org/1999/XMLSchema\"\n" +
              "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n" +
              "SOAP-ENV:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\">\n"+
              "<SOAP-ENV:Body>\n";
          footer =
              "</SOAP-ENV:Body>\n"+
              "</SOAP-ENV:Envelope>\n";
  
          TypeMappingRegistry tmr = server.getTypeMappingRegistry();
          TypeMapping tm = (TypeMapping) tmr.createTypeMapping();
          tm.setSupportedNamespaces(new String[]{Constants.URI_CURRENT_SOAP_ENC});
          tmr.register(Constants.URI_CURRENT_SOAP_ENC, tm);
          tm.register(test.encoding.RETURN.class,
                  new QName("urn:test.encoding", "RETURN"),
                  new org.apache.axis.encoding.ser.BeanSerializerFactory(
                          test.encoding.RETURN.class,
                          new QName("urn:test.encoding", "RETURN")),
                  new org.apache.axis.encoding.ser.BeanDeserializerFactory(
                          test.encoding.RETURN.class,
                          new QName("urn:test.encoding", "RETURN")));
      }
  
      /**
       * Verify that two objects have the same value, handling arrays...
       */
      private static boolean equals(Object obj1, Object obj2) {
          if ((obj1 == null) || (obj2 == null)) return (obj1 == obj2);
          if (obj1.equals(obj2)) return true;
          return false;
      }
  
      /**
       * Verify that a given XML deserialized produces the expected result
       */
      protected void deserialize(String data, Object expected)
              throws Exception {
          deserialize(data, expected, false);
      }
  
      protected void deserialize(String data, Object expected, boolean tryConvert)
              throws Exception {
          Message message = new Message(header + data + footer);
          message.setMessageContext(new MessageContext(server));
  
          SOAPEnvelope envelope = (SOAPEnvelope) message.getSOAPPart().getAsSOAPEnvelope();
          assertNotNull("SOAP envelope should not be null", envelope);
  
          RPCElement body = (RPCElement) envelope.getFirstBody();
          assertNotNull("SOAP body should not be null", body);
  
          Vector arglist = body.getParams();
          assertNotNull("arglist", arglist);
          assertTrue("param.size()<=0 {Should be > 0}", arglist.size() > 0);
  
          RPCParam param = (RPCParam) arglist.get(0);
          assertNotNull("SOAP param should not be null", param);
  
          Object result = param.getValue();
          if (!equals(result, expected)) {
              // Try to convert to the expected class
              if (tryConvert) {
                  Object result2 = JavaUtils.convert(result, expected.getClass());
                  if (!equals(result2, expected)) {
                      assertEquals("The result is not what is expected.", expected, result);
                  }
              } else {
                  assertEquals("The result is not what is expected.", expected, result);
              }
          }
      }
  
      // Struct Return
      public void testReturn() throws Exception {
          test.encoding.RETURN ret = new test.encoding.RETURN();
          ret.setTYPE("000");
          ret.setID("001");
          ret.setNUMBER("002");
          ret.setMESSAGE("003");
          ret.setLOGNO("004");
          ret.setLOGMSGNO("005");
          ret.setMESSAGEV1("006");
          ret.setMESSAGEV2("007");
          ret.setMESSAGEV3("008");
          ret.setMESSAGEV4("009");
          String response =
                  "<ser-root:SrvResponse xmlns:ser-root=\"urn:test.encoding\">\n"+
                  "  <ser-root:RETURN xsi:type=\"ser-root:RETURN\">\n"+
                  "    <TYPE xsi:type=\"xsd:string\">000</TYPE>\n"+
                  "    <ID xsi:type=\"xsd:string\">001</ID>\n"+
                  "    <NUMBER xsi:type=\"xsd:string\">002</NUMBER>\n"+
                  "    <MESSAGE xsi:type=\"xsd:string\">003</MESSAGE>\n"+
                  "    <LOG_NO xsi:type=\"xsd:string\">004</LOG_NO>\n"+
                  "    <LOG_MSG_NO xsi:type=\"xsd:string\">005</LOG_MSG_NO>\n"+
                  "    <MESSAGE_V1 xsi:type=\"xsd:string\">006</MESSAGE_V1>\n"+
                  "    <MESSAGE_V2 xsi:type=\"xsd:string\">007</MESSAGE_V2>\n"+
                  "    <MESSAGE_V3 xsi:type=\"xsd:string\">008</MESSAGE_V3>\n"+
                  "    <MESSAGE_V4 xsi:type=\"xsd:string\">009</MESSAGE_V4>\n"+
                  "  </ser-root:RETURN>\n"+
                  "</ser-root:SrvResponse>";
          deserialize(response,ret,true);
      }
  
      public static void main(String [] args) throws Exception
      {
          TestBeanDeser tester = new TestBeanDeser("test");
          tester.testReturn();
      }
  }