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 Tom Jordahl <to...@macromedia.com> on 2004/10/11 17:52:58 UTC
RE: cvs commit: ws-axis/java/src/org/apache/axis/encoding/ser Arr
aySerializer.java
Glen,
I wanted to turn off the xsi:type for encoded arrays that have a type
declaration in the top level element.
I was attempting to get back to the Axis 1.1 array serialization, which
turned these types off unconditionally.
Do you have a test you can run on the current code to see if changing this
breaks things?
--
Tom Jordahl
Macromedia Server Development
> -----Original Message-----
> From: Glen Daniels [mailto:glen@thoughtcraft.com]
> Sent: Monday, October 11, 2004 11:11 AM
> To: axis-dev@ws.apache.org
> Subject: RE: cvs commit: ws-axis/java/src/org/apache/axis/encoding/ser
> ArraySerializer.java
>
>
> Hi Tom:
>
> Please be sure that we still send xsi:type if necessary on array items
> after
> this change. Consider the case where we have an array of BaseType, and
> send
> three BaseTypes followed by a SubType. At LEAST the SubType element
> should
> definitely have xsi:type on it!
>
> Why was setting xsi:type on each element a problem??
>
> --Glen
>
> > -----Original Message-----
> > From: tomj@apache.org [mailto:tomj@apache.org]
> > Sent: Monday, October 11, 2004 7:15 AM
> > To: ws-axis-cvs@apache.org
> > Subject: cvs commit:
> > ws-axis/java/src/org/apache/axis/encoding/ser ArraySerializer.java
> >
> > tomj 2004/10/11 07:15:17
> >
> > Modified: java/src/org/apache/axis/encoding/ser
> > ArraySerializer.java
> > Log:
> > Fix regression problems with SOAP encoded arrays:
> >
> > - Don't use "currentXMLType" from context if we are encoded, get the
> > type of the array from the componentType.
> > - Always set the xsi:type attribute of encoded arrays to
> > soapenc:Array
> > - If we are doing encoded arrays, don't send xsi:type for
> > each element
> >
> > Revision Changes Path
> > 1.57 +33 -19
> > ws-axis/java/src/org/apache/axis/encoding/ser/ArraySerializer.java
> >
> > Index: ArraySerializer.java
> > ===================================================================
> > RCS file:
> > /home/cvs/ws-axis/java/src/org/apache/axis/encoding/ser/ArrayS
> > erializer.java,v
> > retrieving revision 1.56
> > retrieving revision 1.57
> > diff -u -r1.56 -r1.57
> > --- ArraySerializer.java 29 Jul 2004 21:40:26 -0000 1.56
> > +++ ArraySerializer.java 11 Oct 2004 14:15:17 -0000 1.57
> > @@ -125,14 +125,17 @@
> >
> > // Get the QName of the componentType.
> > // If not found, look at the super classes
> > - QName componentQName = context.getCurrentXMLType();
> > - if (componentQName != null) {
> > - if ((componentQName.equals(xmlType) ||
> > - componentQName.equals(soap.getArrayType()))) {
> > - componentQName = null;
> > + QName componentQName = null;
> > + if (!encoded) {
> > + componentQName = context.getCurrentXMLType();
> > + if (componentQName != null) {
> > + if ((componentQName.equals(xmlType) ||
> > + componentQName.equals(soap.getArrayType()))) {
> > + componentQName = null;
> > + }
> > }
> > }
> > -
> > +
> > if (componentQName == null) {
> > componentQName =
> > context.getQNameForClass(componentType);
> > }
> > @@ -292,29 +295,37 @@
> > // and may be useful for operation
> > overloading.
> > // Cons: More interop test failures (as of
> > 2/6/2002).
> > //
> > + String qname =
> > + context.getPrefixForURI(schema.getXsiURI(),
> > + "xsi") + ":type";
> > + QName soapArray;
> > + if (soap == SOAPConstants.SOAP12_CONSTANTS) {
> > + soapArray = Constants.SOAP_ARRAY12;
> > + } else {
> > + soapArray = Constants.SOAP_ARRAY;
> > + }
> > +
> > int typeI = attrs.getIndex(schema.getXsiURI(),
> > "type");
> > if (typeI != -1) {
> > - String qname =
> > - context.getPrefixForURI(schema.getXsiURI(),
> > - "xsi") + ":type";
> > - QName soapArray;
> > - if (soap == SOAPConstants.SOAP12_CONSTANTS) {
> > - soapArray = Constants.SOAP_ARRAY12;
> > - } else {
> > - soapArray = Constants.SOAP_ARRAY;
> > - }
> > -
> > attrs.setAttribute(typeI,
> > schema.getXsiURI(),
> > "type",
> > qname,
> > "CDATA",
> >
> > context.qName2String(soapArray));
> > + } else {
> > + attrs.addAttribute(schema.getXsiURI(),
> > + "type",
> > + qname,
> > + "CDATA",
> > +
> > context.qName2String(soapArray));
> > }
> > +
> > attributes = attrs;
> > }
> >
> > + Boolean sendType = null;
> > // For the maxOccurs case, each item is named with
> > the QName
> > // we got in the arguments. For normal array
> > case, we write an element with
> > // that QName, and then serialize each item as <item>
> > @@ -324,8 +335,11 @@
> > serializeAttr = null; // since we are putting
> > them here
> > context.startElement(name, attributes);
> > elementName = Constants.QNAME_LITERAL_ITEM;
> > + // If we are doing SOAP encoded arrays, no
> > need to add xsi:type to the items
> > + sendType = Boolean.FALSE;
> > }
> >
> > +
> > if (dim2Len < 0) {
> > // Normal case, serialize each array element
> > if (list == null) {
> > @@ -336,7 +350,7 @@
> > context.serialize(elementName,
> > serializeAttr, aValue,
> > componentQName, //
> > prefered type QName
> > true, // Send null values
> > - null); // Respect
> > default type config
> > + sendType); // Add xsi:type?
> > }
> > } else {
> > for (Iterator iterator = list.iterator();
> > iterator.hasNext();) {
> > @@ -346,7 +360,7 @@
> > context.serialize(elementName,
> > serializeAttr, aValue,
> > componentQName, //
> > prefered type QName
> > true, // Send null values
> > - null); // Respect
> > default type config
> > + sendType); // Add xsi:type?
> >
> > }
> > }
> > @@ -355,7 +369,7 @@
> > for (int index = 0; index < len; index++) {
> > for (int index2 = 0; index2 < dim2Len; index2++) {
> > Object aValue =
> > Array.get(Array.get(value, index), index2);
> > - context.serialize(elementName, null,
> > aValue, componentQName, true, null);
> > + context.serialize(elementName, null,
> > aValue, componentQName, true, sendType);
> > }
> > }
> > }
> >
> >
> >
> >
> >