axis-java-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Glen Daniels <gdani...@macromedia.com>
Subject RE: cvs commit: xml-axis/java/src/org/apache/axis/wsdl/toJava Jav aBeanHelperWriter.java SchemaUtils.java
Date Wed, 03 Apr 2002 22:11:44 GMT

+1 for a test which tests this, not to mention an audit of our existing tests at some point
to ensure relevance and avoid redundancy.  Clearly our coverage could be better.

--G

> -----Original Message-----
> From: Russell Butek [mailto:butek@us.ibm.com]
> Sent: Wednesday, April 03, 2002 4:56 PM
> To: axis-dev@xml.apache.org
> Subject: RE: cvs commit: xml-axis/java/src/org/apache/axis/wsdl/toJava
> Jav aBeanHelperWriter.java SchemaUtils.java
> 
> 
> Tom, shouldn't this be a test?  Rich wouldn't have checked 
> the code in if
> he'd broken the build.
> 
> Russell Butek
> butek@us.ibm.com
> 
> 
> Tom Jordahl <tomj@macromedia.com> on 04/03/2002 03:30:01 PM
> 
> Please respond to axis-dev@xml.apache.org
> 
> To:    "'axis-dev@xml.apache.org'" <axis-dev@xml.apache.org>
> cc:
> Subject:    RE: cvs commit: 
> xml-axis/java/src/org/apache/axis/wsdl/toJava
>        Jav  aBeanHelperWriter.java SchemaUtils.java
> 
> 
> 
> 
> Rich, Glen,
> 
> This change broke things for .NET document literal.
> Given this schema type:
> 
> <s:schema elementFormDefault="qualified" targetNamespace="
>  http://tempuri.org/">
>  <s:element name="calculateComplexRef">
>   <s:complexType>
>    <s:sequence>
>     <s:element minOccurs="0" maxOccurs="1" name="l" 
> type="s0:LoanInfo" />
>    </s:sequence>
>   </s:complexType>
>  </s:element>
>  <s:element name="calculateComplexRefResponse">
>   <s:complexType>
>    <s:sequence>
>     <s:element minOccurs="0" maxOccurs="1" name="l" 
> type="s0:LoanInfo" />
>    </s:sequence>
>   </s:complexType>
>  </s:element>
> </s:schema>
> 
> The stubs used to register a type like this:
> 
>         javax.xml.rpc.namespace.QName p0QName =
>           new 
> javax.xml.rpc.namespace.QName("http://tempuri.org/", "l");
>         call.addParameter(p0QName,
>                         new javax.xml.rpc.namespace.QName
>                           ("http://tempuri.org/", "LoanInfo"),
>                         javax.xml.rpc.ParameterMode.PARAM_MODE_INOUT);
>         
> call.setReturnType(org.apache.axis.encoding.XMLType.AXIS_VOID);
> 
> Now the code looks like this:
> 
>         javax.xml.rpc.namespace.QName p0QName =
>             new javax.xml.rpc.namespace.QName("", "l");
>         call.addParameter(p0QName,
>                           new javax.xml.rpc.namespace.QName
>                             ("http://tempuri.org/", "LoanInfo"),
>                           javax.xml.rpc.ParameterMode.INOUT);
>         
> call.setReturnType(org.apache.axis.encoding.XMLType.AXIS_VOID);
> 
> The code that drops the targetNamespace for the element seems 
> to be the
> problem:
> 
>   +          if (!forElement.value) {
>   +            // Unqualified nodeName
>   +            nodeName = new QName("", nodeName.getLocalPart());
> 
> 
> Rich, I don't understand why we would want to 'unqualify' the 
> elements.
> The full WSDL file attached from a .NET service.
> 
> --
> Tom Jordahl
> Macromedia
> 
> 
> 
> 
> -----Original Message-----
> From: scheu@apache.org [mailto:scheu@apache.org]
> Sent: Tuesday, April 02, 2002 4:25 PM
> To: xml-axis-cvs@apache.org
> Subject: cvs commit: xml-axis/java/src/org/apache/axis/wsdl/toJava
> JavaBeanHelperWriter.java SchemaUtils.java
> 
> 
> scheu       02/04/02 13:24:40
> 
>   Modified:    java/src/org/apache/axis/description TypeDesc.java
>                java/src/org/apache/axis/encoding/ser 
> BeanDeserializer.java
>                java/src/org/apache/axis/utils JavaUtils.java
>                java/src/org/apache/axis/wsdl/toJava
>                         JavaBeanHelperWriter.java SchemaUtils.java
>   Log:
>   A couple of minor fixes (Glen you may want to review these).
>   Given the discussion on the chat, the stuff in (2) probably needs
>   to be done for attributes.
> 
>     1) JavaUtils.xmlNameToJavaName code was broken if the xmlName is a
>        single
>        character capitalized name (reported by Ravi Kumar).
> 
>     2) SchemaUtils.  Changed the code slightly to set the 
> ElementDecl's
>        name
>        qname to either a qualified or unqualified name.  For example:
> 
>        <xsd:simpleType name="enum">
>           <xsd:restriction base="xsd:string">
>             <xsd:enumeration value="one"/>
>             <xsd:enumeration value="two"/>
>             <xsd:enumeration value="three"/>
>           </xsd:restriction>
>        </xsd:simpleType>
>        <xsd:complexType name="complexAll">
>           <xsd:all>
>             <xsd:element name="foo" type="simpleType"/>
>             <xsd:element ref="simpleType"/>
>           </xsd:all>
>         </xsd:complexType>
> 
>        There are two elements inside complexAll.  The first 
> one is named
>        "foo".
>        "foo" is an unqualified name and so would be serialized as
>        <foo>"bar"<foo>.
>        The second element is a reference to a defined root 
> element named
>        "simpleType", so
>        "simpleType" is a qualified name whose namespace context is the
>        target namespace.
>        "simpleType" could be serialized without a prefix (if 
> the default
>        namespace is
>        set correctly) or it could be serialized with a prefix the
>        corresponds to the
>        target namespace.
> 
>      3) Slight change to the JavaBeanHelperWriter to write 
> meta data if:
>          java name and xml names are different.
>          java name begins with a cap (we have run into too 
> many problems
>          with the
>             reverse mapping of such things).
>          element has a qualified name (namespace uri is set).
> 
>      4) Changed the BeanDeserializer to first look for the 
> qualified xml
>         name.  If not
>         found and there is no prefix, search for an 
> unqualified xml name.
> 
>      5) Temporary change to BeanDeserializer to get meta data 
> from a base
>      class.
> 
>   Revision  Changes    Path
>   1.8       +8 -3
>   xml-axis/java/src/org/apache/axis/description/TypeDesc.java
> 
>   Index: TypeDesc.java
>   ===================================================================
>   RCS file:
>   
> /home/cvs/xml-axis/java/src/org/apache/axis/description/TypeDe
> sc.java,v
>   retrieving revision 1.7
>   retrieving revision 1.8
>   diff -u -r1.7 -r1.8
>   --- TypeDesc.java     22 Mar 2002 14:38:45 -0000    1.7
>   +++ TypeDesc.java     2 Apr 2002 21:24:40 -0000     1.8
>   @@ -86,14 +86,19 @@
>        public static TypeDesc getTypeDescForClass(Class cls)
>        {
>            try {
>   -            Method getTypeDesc =
>   +            Method getTypeDesc = null;
>   +            try {
>   +                getTypeDesc =
>                        cls.getMethod("getTypeDesc", noClasses);
>   +            } catch (NoSuchMethodException e) {}
>                if (getTypeDesc == null) {
>                    // Look for a Helper Class
>                    ClassLoader cl = Thread.currentThread
>                    ().getContextClassLoader();
>                    Class helper = Class.forName(cls.getName() 
> + "_Helper",
>                    true, cl);
>   -                getTypeDesc =
>   -                    helper.getMethod("getTypeDesc", noClasses);
>   +                try {
>   +                    getTypeDesc =
>   +                        helper.getMethod("getTypeDesc", noClasses);
>   +                } catch (NoSuchMethodException e) {}
>                }
>                if (getTypeDesc != null) {
>                    return (TypeDesc)getTypeDesc.invoke(null,
> 
> 
> 
>   1.18      +41 -7
>   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/BeanD
> eserializer.java,v
> 
>   retrieving revision 1.17
>   retrieving revision 1.18
>   diff -u -r1.17 -r1.18
>   --- BeanDeserializer.java   2 Apr 2002 14:22:11 -0000     1.17
>   +++ BeanDeserializer.java   2 Apr 2002 21:24:40 -0000     1.18
>   @@ -167,15 +167,19 @@
>            prevQName = elemQName;
> 
>            if (typeDesc != null) {
>   -            // IF we're SOAP-encoded AND this is an 
> unprefixed element,
>   -            // ignore the actual namespace context for the 
> element, and
>   -            // just compare local names.
>   -            boolean ignoreNS = ((prefix == null || 
> prefix.equals("")) &&
>   -                                
> context.getMessageContext().isEncoded
>   ());
> 
>   +            // First lookup the field using the target 
> namespace context
>   +            // and local name.  If this fails and the 
> incoming element
>   +            // name is not prefixed, lookup the name assuming an
>   unqualified
>   +            // name.
>                String fieldName =
>   typeDesc.getFieldNameForElement(elemQName,
>   -
>   ignoreNS);
>   -
>   +                                                           
>     false);
>   +            if (fieldName == null && (prefix == null || 
> prefix.equals
>   (""))) {
>   +                fieldName =
>   +                    typeDesc.getFieldNameForElement(
>   +                      new QName("", 
> elemQName.getLocalPart()), false);
>   +            }
>   +
>                propDesc
>            = (BeanPropertyDescriptor)propertyMap.get(fieldName);
>            }
> 
>   @@ -183,6 +187,36 @@
>                // look for a field by this name.
>                propDesc = (BeanPropertyDescriptor)
>                propertyMap.get(localName);
>            }
>   +
>   +        // Currently the meta data does not consider inheritance.
>   +        // Glen is working on a fix.  In the meantime, the 
> following
>   +        // code attempts to get the meta data from the base class.
>   +        // (this fix does not work in all cases, but is 
> necessary to
>   +        // get comprehensive tests Animal - Cat 
> inheritance to work).
>   +        if (propDesc == null) {
>   +            Class superClass = javaType;
>   +            while (superClass != null && propDesc == null) {
>   +                superClass = superClass.getSuperclass();
>   +                if (superClass != null) {
>   +                    TypeDesc td =
>   TypeDesc.getTypeDescForClass(superClass);
>   +                    if (td != null) {
>   +                        String fieldName =
>   +                            td.getFieldNameForElement(elemQName,
>   +                                                      false);
>   +                        if (fieldName == null &&
>   +                            (prefix == null || 
> prefix.equals(""))) {
>   +                            fieldName =
>   +                                td.getFieldNameForElement(
>   +                                new QName("", 
> elemQName.getLocalPart()),
>   false);
>   +                        }
>   +
>   +                        propDesc =
>   +
>   (BeanPropertyDescriptor)propertyMap.get(fieldName);
>   +                    }
>   +                }
>   +            }
>   +        }
>   +
>            if (propDesc == null) {
>                // No such field
>                throw new SAXException(
> 
> 
> 
>   1.40      +1 -0
>   xml-axis/java/src/org/apache/axis/utils/JavaUtils.java
> 
>   Index: JavaUtils.java
>   ===================================================================
>   RCS file:
>   /home/cvs/xml-axis/java/src/org/apache/axis/utils/JavaUtils.java,v
>   retrieving revision 1.39
>   retrieving revision 1.40
>   diff -u -r1.39 -r1.40
>   --- JavaUtils.java    2 Apr 2002 19:07:17 -0000     1.39
>   +++ JavaUtils.java    2 Apr 2002 21:24:40 -0000     1.40
>   @@ -575,6 +575,7 @@
>                // character is also uppercase, to follow Introspector
>                rules.
>                if (Character.isUpperCase(nameArray[i]) &&
>                    ((i != firstRealChar) ||
>   +                    (nameLen == 1) ||
>                        (nameLen > 1 &&
>                    Character.isLowerCase(nameArray[1])))) {
>                    result.append(Character.toLowerCase(nameArray[i]));
>                }
> 
> 
> 
>   1.4       +12 -1
>   
> xml-axis/java/src/org/apache/axis/wsdl/toJava/JavaBeanHelperWr
> iter.java
> 
>   Index: JavaBeanHelperWriter.java
>   ===================================================================
>   RCS file:
>   
> /home/cvs/xml-axis/java/src/org/apache/axis/wsdl/toJava/JavaBe
> anHelperWriter.java,v
> 
>   retrieving revision 1.3
>   retrieving revision 1.4
>   diff -u -r1.3 -r1.4
>   --- JavaBeanHelperWriter.java     29 Mar 2002 22:13:05 -0000    1.3
>   +++ JavaBeanHelperWriter.java     2 Apr 2002 21:24:40 -0000     1.4
>   @@ -128,7 +128,18 @@
>                    TypeEntry type = elem.getType();
>                    String elemName = elem.getName().getLocalPart();
>                    String javaName = Utils.xmlNameToJava(elemName);
>   -                if (!javaName.equals(elemName)) {
>   +
>   +                // Meta data is needed if the default serializer
>   +                // action cannot map the javaName back to the
>   +                // element's qname.  This occurs if:
>   +                //  - the javaName and element name local part are
>   different.
>   +                //  - the javaName starts with uppercase 
> char (this is a
>   wierd
>   +                //    case and we have several problems 
> with the mapping
>   rules.
>   +                //    Seems best to gen meta data in this case.)
>   +                //  - the element name is qualified (has a 
> namespace
>   uri)
>   +                if (!javaName.equals(elemName) ||
>   +                    Character.isUpperCase(javaName.charAt(0)) ||
>   +                    !elem.getName().getNamespaceURI().equals("")) {
>                        // If we did some mangling, make sure 
> we'll write
>                        out the XML
>                        // the correct way.
>                        if (elementMappings == null)
> 
> 
> 
>   1.18      +15 -1
>   xml-axis/java/src/org/apache/axis/wsdl/toJava/SchemaUtils.java
> 
>   Index: SchemaUtils.java
>   ===================================================================
>   RCS file:
>   
> /home/cvs/xml-axis/java/src/org/apache/axis/wsdl/toJava/Schema
> Utils.java,v
> 
>   retrieving revision 1.17
>   retrieving revision 1.18
>   diff -u -r1.17 -r1.18
>   --- SchemaUtils.java  26 Mar 2002 22:51:24 -0000    1.17
>   +++ SchemaUtils.java  2 Apr 2002 21:24:40 -0000     1.18
>   @@ -341,10 +341,24 @@
>            QName nodeName = Utils.getNodeNameQName(elementNode);
>            BooleanHolder forElement = new BooleanHolder();
>            QName nodeType = Utils.getNodeTypeRefQName(elementNode,
>            forElement);
>   -        if (nodeType == null) { // The element may use an 
> anonymous type
>   +
>   +
>   +        // An element inside a complex type is either qualified or
>   unqualified.
>   +        // If the ref= attribute is used, the name of the 
> ref'd element
>   is used
>   +        // (which must be a root element).  If the ref= 
> attribute is not
>   +        // used, the name of the element is unqualified.
>   +
>   +        if (!forElement.value) {
>   +            // Unqualified nodeName
>   +            nodeName = new QName("", nodeName.getLocalPart());
>   +        } else {
>   +            nodeName = nodeType;
>   +        }
>   +        if (nodeType == null) {
>                nodeType = getElementAnonQName(elementNode);
>                forElement.value = false;
>            }
>   +
> 
>            TypeEntry type = 
> (TypeEntry)symbolTable.getTypeEntry(nodeType,
>                                                               
>   forElement.value);
> 
> 
> 
> 
> 
> 
> 
> 

Mime
View raw message