You are viewing a plain text version of this content. The canonical link for it is here.
Posted to soap-dev@xml.apache.org by du...@apache.org on 2002/06/10 05:52:56 UTC

cvs commit: xml-soap/java/src/org/apache/soap/encoding/soapenc SoapEncUtils.java

duftler     2002/06/09 20:52:56

  Modified:    java/src/org/apache/soap/encoding/soapenc SoapEncUtils.java
  Log:
  This patch enables the serialization logic to use xsi:nil when the
    2001 Schema version is employed.
  Also, the code seems to have been using the older xsi version, regardless
    of what Schema version was specified. It is now fixed to use the older
    versions of both xsi and xsd, when the user requests it.
  Submitted by:	Simon Fell & Matthew Duftler
  
  Revision  Changes    Path
  1.10      +24 -14    xml-soap/java/src/org/apache/soap/encoding/soapenc/SoapEncUtils.java
  
  Index: SoapEncUtils.java
  ===================================================================
  RCS file: /home/cvs/xml-soap/java/src/org/apache/soap/encoding/soapenc/SoapEncUtils.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- SoapEncUtils.java	29 May 2002 18:45:43 -0000	1.9
  +++ SoapEncUtils.java	10 Jun 2002 03:52:56 -0000	1.10
  @@ -160,10 +160,10 @@
       sink.write('<' + context.toString() + namespaceDecl);
   
       // Get prefixes for the needed namespaces.
  -    String xsiNSPrefix = nsStack.getPrefixFromURI(
  -      Constants.NS_URI_CURRENT_SCHEMA_XSI, sink);
  -    String elementTypeNSPrefix = nsStack.getPrefixFromURI(
  -      elementType.getNamespaceURI(), sink);
  +    String elementTypeNS = elementType.getNamespaceURI();
  +    String xsiNSPrefix = nsStack.getPrefixFromURI(elementTypeNS + "-instance",
  +                                                  sink);
  +    String elementTypeNSPrefix = nsStack.getPrefixFromURI(elementTypeNS, sink);
   
       sink.write(' ' + xsiNSPrefix + ':' + Constants.ATTR_TYPE + "=\"" +
                  elementTypeNSPrefix + ':' +
  @@ -198,18 +198,26 @@
   
       if (isNull)
       {
  -      sink.write(' ' + xsiNSPrefix + ':' + Constants.ATTR_NULL + "=\"" +
  +      sink.write(' ' + xsiNSPrefix + ':' + nilName(elementTypeNS) + "=\"" +
                    Constants.ATTRVAL_TRUE + "\"/");
       }
   
       sink.write('>');
     }
   
  +  private static String nilName(String currentSchemaXSD)
  +  {
  +    return (currentSchemaXSD == Constants.NS_URI_2001_SCHEMA_XSD)
  +           ? Constants.ATTR_NIL
  +           : Constants.ATTR_NULL;
  +  }
  +
     public static boolean isNull(Element element)
     {
  +    String elementTypeNS = getTypeQName(element).getNamespaceURI();
       String nullValue = DOMUtils.getAttributeNS(element,
  -                                               Constants.NS_URI_CURRENT_SCHEMA_XSI,
  -                                               Constants.ATTR_NULL);
  +                                               elementTypeNS + "-instance",
  +                                               nilName(elementTypeNS));
   
       return nullValue != null && decodeBooleanValue(nullValue);
     }
  @@ -293,22 +301,24 @@
     public static QName getTypeQName(Element el)
       throws IllegalArgumentException
     {
  -    // Try 1999
  -    QName typeQName = getAttributeValue(el, Constants.NS_URI_1999_SCHEMA_XSI,
  +    // Try 2001
  +    QName typeQName = getAttributeValue(el, Constants.NS_URI_2001_SCHEMA_XSI,
                                           Constants.ATTR_TYPE, null, false);
  +
       if (typeQName != null)
         return typeQName;
  -    
  +
       // Try 2000
       typeQName = getAttributeValue(el, Constants.NS_URI_2000_SCHEMA_XSI,
                                     Constants.ATTR_TYPE, null, false);
  +
       if (typeQName != null)
         return typeQName;
  -    
  -    // Try 2001
  -    typeQName = getAttributeValue(el, Constants.NS_URI_2001_SCHEMA_XSI,
  +
  +    // Try 1999
  +    typeQName = getAttributeValue(el, Constants.NS_URI_1999_SCHEMA_XSI,
                                     Constants.ATTR_TYPE, null, false);
  -    
  +
       return typeQName;
     }
   }