Yes, yes, all well and good. I like tests too. +1 to that. But this is a document/literal .NET problem with an in/out parameter.
We still have a serious problem including tests against a .NET service in our test suite. In fact we have a bit of a serious problem with any and all interop tests that aren't covered by the stuff Sam has set up. I am open to any and all suggestions as to how we can fix this. Can we get a .NET windows machines running somewhere in the apache.org domain that we can deploy custom test services on, then include the endpoints in our test suite? How do you remotely manage a Win 2000 machine running .NET to deploy services? Can you do this? -- Tom Jordahl Macromedia -----Original Message----- From: Glen Daniels [mailto:[EMAIL PROTECTED]] Sent: Wednesday, April 03, 2002 5:12 PM To: '[EMAIL PROTECTED]' Subject: RE: cvs commit: xml-axis/java/src/org/apache/axis/wsdl/toJava Jav aBeanHelperWriter.java SchemaUtils.java +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:[EMAIL PROTECTED]] > Sent: Wednesday, April 03, 2002 4:56 PM > To: [EMAIL PROTECTED] > 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 > [EMAIL PROTECTED] > > > Tom Jordahl <[EMAIL PROTECTED]> on 04/03/2002 03:30:01 PM > > Please respond to [EMAIL PROTECTED] > > To: "'[EMAIL PROTECTED]'" <[EMAIL PROTECTED]> > 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: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]] > Sent: Tuesday, April 02, 2002 4:25 PM > To: [EMAIL PROTECTED] > 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); > > > > > > > >