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 to...@apache.org on 2002/09/19 22:25:13 UTC

cvs commit: xml-axis/java/src/org/apache/axis/description FieldDesc.java

tomj        2002/09/19 13:25:13

  Modified:    java/test/wsdl/extensibility build.xml
                        ExtensibilityQueryTestCase.java server-deploy.wsdd
               java/test/encoding TestBeanDeser2.java TestDeser.java
               java/src/org/apache/axis/wsdl/toJava
                        JavaBeanHelperWriter.java
               java/src/org/apache/axis/encoding/ser BeanDeserializer.java
                        BeanSerializer.java
               java/src/org/apache/axis/description FieldDesc.java
  Log:
  Fix bug 12339 - xsd:date uses Calendar Serializer/Deserializer instead of Date
  
  - Enhanced the FieldDesc class to have getter/setter for xmlType QName.
  
  - JavaBeanHelper will set this element for fields (but not array types).
  
  - The BeanDeserializer now uses the xmlType in the FieldDesc when looking
    up the correct deserializer for the bean element.
  
  - The BeanSerializer passes the xmlType in preference to looking up the
    QName of the java class.  This prevents the wrong serializer from getting
    used if a class is mapped to more than one XML type (i.e. java.utils.Date).
  
  Test fixes and improvements:
  
  - Fix up the namespaces (which now count) in Deserailization test
  - Added a few new assertions to TestBeanDeser2.java
  
  Extensibility WSDL test:
  - Correct type mappings in config WSDD and client
  - Improve the way we call AdminClient and print a reasonable error
  - Copy the Extensibility test server-config.wsdd to the work directory
  
  Revision  Changes    Path
  1.8       +1 -0      xml-axis/java/test/wsdl/extensibility/build.xml
  
  Index: build.xml
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/test/wsdl/extensibility/build.xml,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- build.xml	10 Sep 2002 16:06:53 -0000	1.7
  +++ build.xml	19 Sep 2002 20:25:12 -0000	1.8
  @@ -74,6 +74,7 @@
         <fileset dir="${axis.home}/test/wsdl/extensibility">
           <include name="*TestCase.java"/>
           <include name="*Impl.java"/>
  +        <include name="server-deploy.wsdd"/>
         </fileset>
       </copy>
   
  
  
  
  1.13      +30 -2     xml-axis/java/test/wsdl/extensibility/ExtensibilityQueryTestCase.java
  
  Index: ExtensibilityQueryTestCase.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/test/wsdl/extensibility/ExtensibilityQueryTestCase.java,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- ExtensibilityQueryTestCase.java	18 Aug 2002 14:19:50 -0000	1.12
  +++ ExtensibilityQueryTestCase.java	19 Sep 2002 20:25:12 -0000	1.13
  @@ -9,6 +9,7 @@
   
   import org.apache.axis.EngineConfiguration;
   import org.apache.axis.AxisEngine;
  +import org.apache.axis.utils.Options;
   import org.apache.axis.message.MessageElement;
   import org.apache.axis.client.AdminClient;
   import org.apache.axis.encoding.TypeMappingRegistry;
  @@ -21,6 +22,10 @@
   import javax.xml.rpc.encoding.TypeMapping;
   import javax.xml.namespace.QName;
   import java.util.Calendar;
  +import java.io.FileInputStream;
  +import java.io.IOException;
  +import java.io.InputStream;
  +import java.io.FileNotFoundException;
   
   public class ExtensibilityQueryTestCase extends junit.framework.TestCase {
       public ExtensibilityQueryTestCase(String name) {
  @@ -56,11 +61,15 @@
               bookQuery.setBookQuery(book);
               MessageElement el = new MessageElement("foo", "Bar", bookQuery);
               expression.set_any(new MessageElement [] { el });
  +            // call the operation
               ExtensibilityType any = binding.query(expression);
  +            // validate results
               MessageElement [] anyContent = any.get_any();
               assertEquals(1, anyContent.length);
               QueryResultElement resEl = (QueryResultElement )anyContent[0].getObjectValue();
  +            assertNotNull("QueryResultElement back from anyContent[0].getObjectValue()", resEl);
               ResultListType result = resEl.getResultList();
  +            assertNotNull("ResultListType back from getResultList()", result);
               QueryResultType[] queryResult = result.getResult();
               assertTrue(queryResult.length == 2); 
               isValid(queryResult[0], "Computer Science", "The Grid"); 
  @@ -86,7 +95,7 @@
           TypeMapping mapping = registry.createTypeMapping();
           addBeanMapping(mapping, "FindBooksQueryExpressionElement", FindBooksQueryExpressionElement.class);
           addBeanMapping(mapping, "BookType", BookType.class);
  -        addBeanMapping(mapping, "resultList", ResultListType.class);
  +        addBeanMapping(mapping, "ResultListType", ResultListType.class);
           addBeanMapping(mapping, "QueryResultType", QueryResultType.class);
           addBeanMapping(mapping, "QueryResultElement", QueryResultElement.class);
           registry.register("",mapping);
  @@ -103,7 +112,26 @@
       }
   
       private void deployServer() {
  -        AdminClient.main(new String[] { "test/wsdl/extensibility/server-deploy.wsdd" });
  +        final String INPUT_FILE = "server-deploy.wsdd";
  +
  +        InputStream is = getClass().getResourceAsStream(INPUT_FILE);
  +        if (is == null) {
  +            // try current directory
  +            try {
  +                is = new FileInputStream(INPUT_FILE);
  +            } catch (FileNotFoundException e) {
  +                is = null;
  +            }
  +        }
  +        assertNotNull("Unable to find " + INPUT_FILE + ". Make sure it is on the classpath or in the current directory.", is);
  +        AdminClient admin = new AdminClient();
  +        try {
  +            Options opts = new Options( null );
  +            opts.setDefaultURL("http://localhost:8080/axis/services/AdminService");
  +            admin.process(opts, is);
  +        } catch (Exception e) {
  +            assertTrue("Unable to deploy " + INPUT_FILE + ". ERROR: " + e, false);
  +        }
       }
   }
   
  
  
  
  1.6       +1 -1      xml-axis/java/test/wsdl/extensibility/server-deploy.wsdd
  
  Index: server-deploy.wsdd
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/test/wsdl/extensibility/server-deploy.wsdd,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- server-deploy.wsdd	16 Aug 2002 11:07:10 -0000	1.5
  +++ server-deploy.wsdd	19 Sep 2002 20:25:12 -0000	1.6
  @@ -63,7 +63,7 @@
         />
   
           <typeMapping
  -           qname="query:bookQuery"
  +           qname="query:BookType"
              type="java:test.wsdl.extensibility.BookType"
              serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"
              deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"
  
  
  
  1.2       +1 -0      xml-axis/java/test/encoding/TestBeanDeser2.java
  
  Index: TestBeanDeser2.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/test/encoding/TestBeanDeser2.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- TestBeanDeser2.java	28 Jun 2002 12:36:51 -0000	1.1
  +++ TestBeanDeser2.java	19 Sep 2002 20:25:12 -0000	1.2
  @@ -124,6 +124,7 @@
                "</multiRef>";
   
           test.encoding.beans.SbTravelRequest travelRequest = (test.encoding.beans.SbTravelRequest) deserialize(response);
  +        assertNotNull("supPliers array missing", travelRequest.supPliers);
           assertTrue(travelRequest.supPliers.length==1);
           assertTrue(travelRequest.supPliers[0].searchType.intValue()==0);
           assertTrue(travelRequest.supPliers[0].supplierCode.equals("SC**"));
  
  
  
  1.40      +10 -10    xml-axis/java/test/encoding/TestDeser.java
  
  Index: TestDeser.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/test/encoding/TestDeser.java,v
  retrieving revision 1.39
  retrieving revision 1.40
  diff -u -r1.39 -r1.40
  --- TestDeser.java	28 Jun 2002 06:17:55 -0000	1.39
  +++ TestDeser.java	19 Sep 2002 20:25:12 -0000	1.40
  @@ -50,7 +50,7 @@
               "<soap:Envelope " +
                 "xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\" " +
                 "xmlns:soapenc=\"http://schemas.xmlsoap.org/soap/encoding/\" " +
  -              "xmlns:me=\"urn:me\" " +
  +              "xmlns:me=\"http://soapinterop.org/xsd\" " +
                 "xmlns:xsi=\"" + NS_XSI + "\" " +
                 "xmlns:xsd=\"" + NS_XSD + "\">\n" +
                 "<soap:Body>\n" +
  @@ -66,33 +66,33 @@
           tm.setSupportedEncodings(new String[] {Constants.URI_DEFAULT_SOAP_ENC});
           tmr.register(Constants.URI_DEFAULT_SOAP_ENC, tm);
           tm.register(java.lang.String[].class, 
  -                    new QName("urn:me", "ArrayOfString"),
  +                    new QName("http://soapinterop.org/xsd", "ArrayOfString"),
                       new org.apache.axis.encoding.ser.ArraySerializerFactory(),
                       new org.apache.axis.encoding.ser.ArrayDeserializerFactory());
           tm.register(java.lang.Object[].class, 
  -                    new QName("urn:me", "ArrayOfObject"),
  +                    new QName("http://soapinterop.org/xsd", "ArrayOfObject"),
                       new org.apache.axis.encoding.ser.ArraySerializerFactory(),
                       new org.apache.axis.encoding.ser.ArrayDeserializerFactory());
           tm.register(samples.echo.SOAPStruct.class, 
  -                    new QName("urn:me", "SOAPStruct"),
  +                    new QName("http://soapinterop.org/xsd", "SOAPStruct"),
                       new org.apache.axis.encoding.ser.BeanSerializerFactory(
                             samples.echo.SOAPStruct.class,
  -                          new QName("urn:me", "SOAPStruct")),
  +                          new QName("http://soapinterop.org/xsd", "SOAPStruct")),
                       new org.apache.axis.encoding.ser.BeanDeserializerFactory(
                             samples.echo.SOAPStruct.class,
  -                          new QName("urn:me", "SOAPStruct")));
  +                          new QName("http://soapinterop.org/xsd", "SOAPStruct")));
           tm.register(samples.echo.SOAPStruct[].class, 
  -                    new QName("urn:me", "ArrayOfSOAPStruct"),
  +                    new QName("http://soapinterop.org/xsd", "ArrayOfSOAPStruct"),
                       new org.apache.axis.encoding.ser.ArraySerializerFactory(),
                       new org.apache.axis.encoding.ser.ArrayDeserializerFactory());
           tm.register(samples.echo.SOAPStructStruct.class,
  -                    new QName("urn:me", "SOAPStructStruct"),
  +                    new QName("http://soapinterop.org/xsd", "SOAPStructStruct"),
                       new org.apache.axis.encoding.ser.BeanSerializerFactory(
                             samples.echo.SOAPStructStruct.class,
  -                          new QName("urn:me", "SOAPStructStruct")),
  +                          new QName("http://soapinterop.org/xsd", "SOAPStructStruct")),
                       new org.apache.axis.encoding.ser.BeanDeserializerFactory(
                             samples.echo.SOAPStructStruct.class,
  -                          new QName("urn:me", "SOAPStructStruct")));
  +                          new QName("http://soapinterop.org/xsd", "SOAPStructStruct")));
       }
   
       /**
  
  
  
  1.24      +19 -7     xml-axis/java/src/org/apache/axis/wsdl/toJava/JavaBeanHelperWriter.java
  
  Index: JavaBeanHelperWriter.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/wsdl/toJava/JavaBeanHelperWriter.java,v
  retrieving revision 1.23
  retrieving revision 1.24
  diff -u -r1.23 -r1.24
  --- JavaBeanHelperWriter.java	18 Sep 2002 19:14:12 -0000	1.23
  +++ JavaBeanHelperWriter.java	19 Sep 2002 20:25:12 -0000	1.24
  @@ -60,6 +60,7 @@
   import java.util.Vector;
   
   import javax.xml.namespace.QName;
  +import javax.xml.rpc.holders.BooleanHolder;
   
   import org.apache.axis.utils.Messages;
   
  @@ -236,10 +237,12 @@
   
               if (attributes != null) {
                   for (int i = 0; i < attributes.size(); i += 2) {
  +                    TypeEntry te = (TypeEntry) attributes.get(i);
                       QName attrName = (QName) attributes.get(i + 1);
                       String attrLocalName = attrName.getLocalPart();
                       String fieldName = Utils.xmlNameToJava(attrLocalName);
                       fieldName = getAsFieldName(fieldName);
  +                    QName attrXmlType = te.getQName();
                       pw.print("        ");
                       if (!wroteFieldType) {
                           pw.print("org.apache.axis.description.FieldDesc ");
  @@ -247,10 +250,10 @@
                       }
                       pw.println("field = new org.apache.axis.description.AttributeDesc();");
                       pw.println("        field.setFieldName(\"" + fieldName + "\");");
  -                    pw.print("        field.setXmlName(");
  -                    pw.print("new javax.xml.namespace.QName(\"");
  -                    pw.print(attrName.getNamespaceURI() +  "\", \"");
  -                    pw.println(attrName.getLocalPart() + "\"));");
  +                    pw.println("        field.setXmlName(" + Utils.getNewQName(attrName) + ");");
  +                    if (attrXmlType != null) {
  +                        pw.println("        field.setXmlType(" + Utils.getNewQName(attrXmlType) + ");");
  +                    }
                       pw.println("        typeDesc.addFieldDesc(field);");
                   }
               }
  @@ -267,6 +270,14 @@
                       String fieldName = Utils.xmlNameToJava(elemLocalName);
                       fieldName = getAsFieldName(fieldName);
                       QName xmlName = elem.getName();
  +                    
  +                    // Some special handling for arrays
  +                    QName xmlType = elem.getType().getQName();
  +                    if (xmlType != null && xmlType.getLocalPart().indexOf("[") > 0) {
  +                        // Skip array types, because they are special
  +                        xmlType = null;
  +                    }
  +                    
                       pw.print("        ");
                       if (!wroteFieldType) {
                           pw.print("org.apache.axis.description.FieldDesc ");
  @@ -274,9 +285,10 @@
                       }
                       pw.println("field = new org.apache.axis.description.ElementDesc();");
                       pw.println("        field.setFieldName(\"" + fieldName + "\");");
  -                    pw.print(  "        field.setXmlName(new javax.xml.namespace.QName(\"");
  -                    pw.println(xmlName.getNamespaceURI() + "\", \"" +
  -                               xmlName.getLocalPart() + "\"));");
  +                    pw.println("        field.setXmlName(" + Utils.getNewQName(xmlName) + ");");
  +                    if (xmlType != null) {
  +                        pw.println("        field.setXmlType(" + Utils.getNewQName(xmlType) + ");");
  +                    }
                       if (elem.getMinOccursIs0()) {
                           pw.println("        field.setMinOccursIs0(true);");
                       }
  
  
  
  1.54      +8 -0      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.53
  retrieving revision 1.54
  diff -u -r1.53 -r1.54
  --- BeanDeserializer.java	18 Sep 2002 16:10:35 -0000	1.53
  +++ BeanDeserializer.java	19 Sep 2002 20:25:12 -0000	1.54
  @@ -56,6 +56,7 @@
   
   import org.apache.axis.Constants;
   import org.apache.axis.description.TypeDesc;
  +import org.apache.axis.description.FieldDesc;
   import org.apache.axis.encoding.DeserializationContext;
   import org.apache.axis.encoding.Deserializer;
   import org.apache.axis.encoding.DeserializerImpl;
  @@ -189,6 +190,7 @@
           throws SAXException
       {
           BeanPropertyDescriptor propDesc = null;
  +        FieldDesc fieldDesc = null;
   
           String encodingStyle = context.getMessageContext().getEncodingStyle();
           boolean isEncoded = Constants.isSOAP_ENC(encodingStyle);
  @@ -206,6 +208,7 @@
               String fieldName = typeDesc.getFieldNameForElement(elemQName, 
                                                                  isEncoded);
               propDesc = (BeanPropertyDescriptor)propertyMap.get(fieldName);
  +            fieldDesc = typeDesc.getFieldByName(fieldName); 
           }
   
           if (propDesc == null) {
  @@ -255,6 +258,11 @@
           QName childXMLType = context.getTypeFromXSITypeAttr(namespace, 
                                                               localName,
                                                               attributes);
  +        
  +        // If no xsi:type, check the meta-data for the field
  +        if (childXMLType == null && fieldDesc != null) {
  +            childXMLType = fieldDesc.getXmlType();
  +        }
           
           // Get Deserializer for child, default to using DeserializerImpl
           Deserializer dSer = getDeserializer(childXMLType, propDesc.getType(), 
  
  
  
  1.57      +8 -1      xml-axis/java/src/org/apache/axis/encoding/ser/BeanSerializer.java
  
  Index: BeanSerializer.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/encoding/ser/BeanSerializer.java,v
  retrieving revision 1.56
  retrieving revision 1.57
  diff -u -r1.56 -r1.57
  --- BeanSerializer.java	18 Sep 2002 16:10:35 -0000	1.56
  +++ BeanSerializer.java	19 Sep 2002 20:25:12 -0000	1.57
  @@ -161,6 +161,7 @@
                   if (propName.equals("class"))
                       continue;
                   QName qname = null;
  +                QName xmlType = null;
                   boolean isOmittable = false;
   
                   // If we have type metadata, check to see what we're doing
  @@ -184,6 +185,7 @@
                               qname = field.getXmlName();
                           }
                           isOmittable = field.isMinOccursIs0();
  +                        xmlType = field.getXmlType();
                       }
                   }
   
  @@ -193,6 +195,11 @@
                       qname = new QName("", propName);
                   }
   
  +                if (xmlType == null) {
  +                    // look up the type QName using the class
  +                    xmlType = context.getQNameForClass(propertyDescriptor[i].getType());
  +                }
  +                
                   // Read the value from the property
                   if(propertyDescriptor[i].isReadable()) {
                       if (!propertyDescriptor[i].isIndexed()) {
  @@ -210,7 +217,7 @@
                           context.serialize(qname,
                                             null,
                                             propValue,
  -                                          context.getQNameForClass(propertyDescriptor[i].getType()),
  +                                          xmlType,
                                             true,
                                             null);
                       } else {
  
  
  
  1.7       +14 -0     xml-axis/java/src/org/apache/axis/description/FieldDesc.java
  
  Index: FieldDesc.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/description/FieldDesc.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- FieldDesc.java	21 Aug 2002 18:48:43 -0000	1.6
  +++ FieldDesc.java	19 Sep 2002 20:25:13 -0000	1.7
  @@ -126,6 +126,20 @@
       }
   
       /**
  +     * Returns the XML type (e.g. xsd:string) for this field
  +     */ 
  +    public QName getXmlType() {
  +        return xmlType;
  +    }
  +
  +    /**
  +     * Returns the XML type (e.g. xsd:string) for this field
  +     */ 
  +    public void setXmlType(QName xmlType) {
  +        this.xmlType = xmlType;
  +    }
  +
  +    /**
        * Check if this is an element or an attribute.
        *
        * @return true if this is an ElementDesc, or false if an AttributeDesc