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 gd...@apache.org on 2001/03/19 07:20:52 UTC

cvs commit: xml-soap/java/src/org/apache/soap/util/xml DOMUtils.java XMLJavaMappingRegistry.java XMLParserLiaison.java XercesParserLiaison.java

gdaniels    01/03/18 22:20:52

  Modified:    java/src/org/apache/soap Constants.java Envelope.java
                        Utils.java
               java/src/org/apache/soap/encoding SOAPMappingRegistry.java
               java/src/org/apache/soap/encoding/soapenc
                        ArraySerializer.java MapSerializer.java
                        ParameterSerializer.java QNameSerializer.java
                        SoapEncUtils.java UrTypeDeserializer.java
                        VectorSerializer.java
               java/src/org/apache/soap/rpc RPCMessage.java
               java/src/org/apache/soap/server DeploymentDescriptor.java
                        RPCRouter.java TypeMappingSerializer.java
               java/src/org/apache/soap/util/xml DOMUtils.java
                        XMLJavaMappingRegistry.java XMLParserLiaison.java
                        XercesParserLiaison.java
  Log:
  A few changes to interop better with Microsoft SOAP stacks,
  and also heading towards friendlier behaviour in general.
  
  * We now deserialize (but don't generate) multi-ref accessors.
    Check for the "href" attribute in a number of places, and
    deserialize the referenced element instead of the ref
    itself.  This required putting in DOMUtils.getElementByID(),
    which really should be dealt with by Xerces, but wasn't
    working.  If we can get the DOM version working, we can lose
    the DOMUtils one, but this works for now, and we'll get
    this nailed for Axis anyhow.
  
  * First slice at dealing with multiple Schema URIs.  Mostly
    changes to Constants and SOAPMappingRegistry - we now will
    happily ACCEPT schema types with either the 1999 schema
    URIs or the 2000/10 ones.  We SEND by default whatever the
    Constants.NS_URI_CURRENT_SCHEMA values say.  In the future
    we should a) be able to set our "default" schema on the fly,
    b) correctly respond with whatever schema URIs we were
    called with (for the server side), and c) easily deal with
    new schema revs if they happen.  NOTE: this needs to be
    consistency-checked with the 1999 and 2000 XSD specs.
  
  * There is now a new optional attribute in the deployment
    descriptor XML - if "checkMustUnderstands='true'" in the
    isd:service element, we are being told by the deployer
    that no header processing is done by this service.  In
    this case, to be a good SOAP citizen, we do a quick check
    for any headers marked "mustUnderstand='1'" in any messages
    we receive, and throw a MustUnderstand fault if we find any.
  
  * Add a read(String sourceDesc, InputStream inStream) method
    to XMLParserLiason and XercesParserLiason.  This can be used
    to hand an InputStream directly to the parser, which will
    then happily consume byte-order marks; this is currently
    not the case with the Reader-based system.  I did not check
    in the actual code to use this yet, as I don't fully grok its
    effect on the MIME processing code.
  
  * Add a default encoding style to the SOAPMappingRegistry.  If
    the query*() methods are called with a null encodingStyle
    (you aren't technically required to send one), we'll try
    whatever this is set to.  Right now the RPC code sets this
    to SOAP_ENC.
  
  Revision  Changes    Path
  1.15      +65 -2     xml-soap/java/src/org/apache/soap/Constants.java
  
  Index: Constants.java
  ===================================================================
  RCS file: /home/cvs/xml-soap/java/src/org/apache/soap/Constants.java,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -u -r1.14 -r1.15
  --- Constants.java	2001/01/19 09:25:54	1.14
  +++ Constants.java	2001/03/19 06:20:50	1.15
  @@ -82,10 +82,20 @@
       "http://schemas.xmlsoap.org/soap/envelope/";
     public static final String NS_URI_SOAP_ENC =
       "http://schemas.xmlsoap.org/soap/encoding/";
  -  public static final String NS_URI_SCHEMA_XSI =
  +  
  +  public static final String NS_URI_1999_SCHEMA_XSI =
       "http://www.w3.org/1999/XMLSchema-instance";
  -  public static final String NS_URI_SCHEMA_XSD =
  +  public static final String NS_URI_1999_SCHEMA_XSD =
       "http://www.w3.org/1999/XMLSchema";
  +  public static final String NS_URI_2000_SCHEMA_XSI =
  +    "http://www.w3.org/2000/10/XMLSchema-instance";
  +  public static final String NS_URI_2000_SCHEMA_XSD =
  +    "http://www.w3.org/2000/10/XMLSchema";
  +  public static final String NS_URI_CURRENT_SCHEMA_XSI =
  +    NS_URI_1999_SCHEMA_XSI;
  +  public static final String NS_URI_CURRENT_SCHEMA_XSD =
  +    NS_URI_1999_SCHEMA_XSD;
  +  
     public static final String NS_URI_XML_SOAP =
       "http://xml.apache.org/xml-soap";
     public static final String NS_URI_XML_SOAP_DEPLOYMENT =
  @@ -192,5 +202,58 @@
     public static String BAG_HTTPSESSION = "HttpSession" ;
     public static String BAG_HTTPSERVLETREQUEST = "HttpServletRequest" ;
     public static String BAG_HTTPSERVLETRESPONSE = "HttpServletResponse" ;
  +  
  +  //////////////////////////////////////////////////////
  +  // Type QNames for the various schemas
  +  public static final QName string1999QName =
  +      new QName(Constants.NS_URI_1999_SCHEMA_XSD, "string");
  +  public static final QName int1999QName =
  +    new QName(Constants.NS_URI_1999_SCHEMA_XSD, "int");
  +  public static final QName float1999QName =
  +    new QName(Constants.NS_URI_1999_SCHEMA_XSD, "float");
  +  public static final QName double1999QName =
  +    new QName(Constants.NS_URI_1999_SCHEMA_XSD, "double");
  +  public static final QName date1999QName =
  +    new QName(Constants.NS_URI_1999_SCHEMA_XSD, "date");
  +  public static final QName boolean1999QName =
  +    new QName(Constants.NS_URI_1999_SCHEMA_XSD, "boolean");
  +  public static final QName long1999QName =
  +    new QName(Constants.NS_URI_1999_SCHEMA_XSD, "long");
  +  public static final QName short1999QName =
  +    new QName(Constants.NS_URI_1999_SCHEMA_XSD, "short");
  +  public static final QName byte1999QName =
  +    new QName(Constants.NS_URI_1999_SCHEMA_XSD, "byte");
  +  public static final QName qName1999QName =
  +    new QName(Constants.NS_URI_1999_SCHEMA_XSD, "QName");
  +  public static final QName timeInst1999QName =
  +    new QName(Constants.NS_URI_1999_SCHEMA_XSD, "timeInstant");
  +  public static final QName object1999QName =
  +    new QName(Constants.NS_URI_1999_SCHEMA_XSD, "ur-type");
  +
  +  public static final QName string2000QName =
  +      new QName(Constants.NS_URI_2000_SCHEMA_XSD, "string");
  +  public static final QName int2000QName =
  +    new QName(Constants.NS_URI_2000_SCHEMA_XSD, "int");
  +  public static final QName float2000QName =
  +    new QName(Constants.NS_URI_2000_SCHEMA_XSD, "float");
  +  public static final QName double2000QName =
  +    new QName(Constants.NS_URI_2000_SCHEMA_XSD, "double");
  +  public static final QName date2000QName =
  +    new QName(Constants.NS_URI_2000_SCHEMA_XSD, "date");
  +  public static final QName boolean2000QName =
  +    new QName(Constants.NS_URI_2000_SCHEMA_XSD, "boolean");
  +  public static final QName long2000QName =
  +    new QName(Constants.NS_URI_2000_SCHEMA_XSD, "long");
  +  public static final QName short2000QName =
  +    new QName(Constants.NS_URI_2000_SCHEMA_XSD, "short");
  +  public static final QName byte2000QName =
  +    new QName(Constants.NS_URI_2000_SCHEMA_XSD, "byte");
  +  public static final QName qName2000QName =
  +    new QName(Constants.NS_URI_2000_SCHEMA_XSD, "QName");
  +  public static final QName timeInst2000QName =
  +    new QName(Constants.NS_URI_2000_SCHEMA_XSD, "timeInstant");
  +  public static final QName object2000QName =
  +    new QName(Constants.NS_URI_2000_SCHEMA_XSD, "anyType");
  +
   
   }
  
  
  
  1.7       +2 -2      xml-soap/java/src/org/apache/soap/Envelope.java
  
  Index: Envelope.java
  ===================================================================
  RCS file: /home/cvs/xml-soap/java/src/org/apache/soap/Envelope.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- Envelope.java	2001/02/14 02:29:27	1.6
  +++ Envelope.java	2001/03/19 06:20:50	1.7
  @@ -87,11 +87,11 @@
   
       // Declare the "xsi" namespace.
       declareNamespace(Constants.NS_PRE_SCHEMA_XSI,
  -                     Constants.NS_URI_SCHEMA_XSI);
  +                     Constants.NS_URI_CURRENT_SCHEMA_XSI);
   
       // Declare the "xsd" namespace.
       declareNamespace(Constants.NS_PRE_SCHEMA_XSD,
  -                     Constants.NS_URI_SCHEMA_XSD);
  +                     Constants.NS_URI_CURRENT_SCHEMA_XSD);
     }
   
     public void setAttribute(QName attrQName, String value)
  
  
  
  1.5       +16 -0     xml-soap/java/src/org/apache/soap/Utils.java
  
  Index: Utils.java
  ===================================================================
  RCS file: /home/cvs/xml-soap/java/src/org/apache/soap/Utils.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- Utils.java	2000/09/01 02:38:00	1.4
  +++ Utils.java	2001/03/19 06:20:50	1.5
  @@ -163,4 +163,20 @@
       details.addElement(elem);
       return details;
     }
  +  
  +  /**
  +   * Check for mustUnderstand headers, and throw a mustUnderstand
  +   * Fault if we find any.
  +   */
  +  public static void checkMustUnderstands(Header header) throws SOAPException
  +  {
  +      System.out.println("Checking mustUnderstands...");
  +      Vector entries = header.getHeaderEntries();
  +      for (int i = 0; i < entries.size(); i++) {
  +          Element el = (Element)entries.elementAt(i);
  +          String val = el.getAttributeNS(Constants.NS_URI_SOAP_ENV, Constants.ATTR_MUST_UNDERSTAND);
  +          if (val != null && val.equals("1"))
  +              throw new SOAPException("mustUnderstand", "Didn't understand header '" + el.getLocalName() + "'");
  +      }
  +  }
   }
  
  
  
  1.16      +223 -140  xml-soap/java/src/org/apache/soap/encoding/SOAPMappingRegistry.java
  
  Index: SOAPMappingRegistry.java
  ===================================================================
  RCS file: /home/cvs/xml-soap/java/src/org/apache/soap/encoding/SOAPMappingRegistry.java,v
  retrieving revision 1.15
  retrieving revision 1.16
  diff -u -r1.15 -r1.16
  --- SOAPMappingRegistry.java	2001/02/19 23:34:50	1.15
  +++ SOAPMappingRegistry.java	2001/03/19 06:20:50	1.16
  @@ -77,39 +77,218 @@
    * @author Sanjiva Weerawarana (sanjiva@watson.ibm.com)
    * @author Francisco Curbera (curbera@us.ibm.com)
    * @author Sam Ruby (rubys@us.ibm.com)
  + * @author Glen Daniels (gdaniels@allaire.com)
    */
   public class SOAPMappingRegistry extends XMLJavaMappingRegistry
   {
     private static final String soapEncURI = Constants.NS_URI_SOAP_ENC;
  -  private static final String schemaURI = Constants.NS_URI_SCHEMA_XSD;
  -  private static final QName stringQName = new QName(schemaURI, "string");
  -  private static final QName booleanQName = new QName(schemaURI, "boolean");
  -  private static final QName doubleQName = new QName(schemaURI, "double");
  -  private static final QName floatQName = new QName(schemaURI, "float");
  -  private static final QName longQName = new QName(schemaURI, "long");
  -  private static final QName intQName = new QName(schemaURI, "int");
  -  private static final QName shortQName = new QName(schemaURI, "short");
  -  private static final QName byteQName = new QName(schemaURI, "byte");
  -  private static final QName qNameQName = new QName(schemaURI, "QName");
  +  
     private static final QName arrayQName = new QName(soapEncURI, "Array");
  -  private static final QName timeQName = new QName(schemaURI, "timeInstant");
  -  private static final QName dateQName = new QName(schemaURI, "date");
  -  private static final QName objectQName = new QName(
  -                                 Constants.NS_URI_SCHEMA_XSD, "ur-type");
   
  +  private final StringDeserializer stringDeser = new StringDeserializer();
  +  private final IntDeserializer intDeser =  new IntDeserializer();
  +  private final FloatDeserializer floatDeser =  new FloatDeserializer();
  +  private final DoubleDeserializer doubleDeser =  new DoubleDeserializer();
  +  private final BooleanDeserializer booleanDeser =  new BooleanDeserializer();
  +  private final LongDeserializer longDeser =  new LongDeserializer();
  +  private final ShortDeserializer shortDeser =  new ShortDeserializer();
  +  private final ByteDeserializer byteDeser =  new ByteDeserializer();
  +
  +  private final QNameSerializer qNameSer = new QNameSerializer();
     private final ParameterSerializer paramSer = new ParameterSerializer();
     private final ArraySerializer arraySer = new ArraySerializer();
     private final VectorSerializer vectorSer = new VectorSerializer();
     private final MapSerializer mapSer = new MapSerializer();
     public static final MimePartSerializer partSer = new MimePartSerializer();
     private final XMLParameterSerializer xmlParamSer =
  -    new XMLParameterSerializer();
  +                                                    new XMLParameterSerializer();
     private final DateSerializer dateSer = new DateSerializer();
     private final CalendarSerializer calSer = new CalendarSerializer();
     private final UrTypeDeserializer objDeser = new UrTypeDeserializer();
  +  
  +  /** The following stuff is here to deal with the slight differences
  +   * between 1999 schema and 2000/10 schema.  This system allows us to
  +   * register type mappings for both sets of QNames, and to default to
  +   * whichever one is set as current.
  +   * 
  +   * !!! The order of the elements in these arrays is critical.  Be
  +   *     careful when editing.
  +   */
  +  QName schema1999QNames [] = {
  +    Constants.string1999QName,
  +    Constants.int1999QName,
  +    Constants.int1999QName,
  +    Constants.float1999QName,
  +    Constants.float1999QName,
  +    Constants.double1999QName,
  +    Constants.double1999QName,
  +    Constants.boolean1999QName,
  +    Constants.boolean1999QName,
  +    Constants.long1999QName,
  +    Constants.long1999QName,
  +    Constants.short1999QName,
  +    Constants.short1999QName,
  +    Constants.byte1999QName,
  +    Constants.byte1999QName,
  +    Constants.qName1999QName,
  +    Constants.date1999QName,
  +    Constants.timeInst1999QName,
  +    Constants.object1999QName,
  +    Constants.object1999QName,
  +    Constants.object1999QName,
  +    Constants.object1999QName,
  +    Constants.object1999QName,
  +  };
  +  
  +  QName schema2000QNames [] = {
  +    Constants.string2000QName,
  +    Constants.int2000QName,
  +    Constants.int2000QName,
  +    Constants.float2000QName,
  +    Constants.float2000QName,
  +    Constants.double2000QName,
  +    Constants.double2000QName,
  +    Constants.boolean2000QName,
  +    Constants.boolean2000QName,
  +    Constants.long2000QName,
  +    Constants.long2000QName,
  +    Constants.short2000QName,
  +    Constants.short2000QName,
  +    Constants.byte2000QName,
  +    Constants.byte2000QName,
  +    Constants.qName2000QName,
  +    Constants.date2000QName,
  +    Constants.timeInst2000QName,
  +    Constants.object2000QName,
  +    Constants.object2000QName,
  +    Constants.object2000QName,
  +    Constants.object2000QName,
  +    Constants.object2000QName,
  +  };
  +  
  +  public String schemaURI = Constants.NS_URI_1999_SCHEMA_XSD;
  +  QName [] schemaQNames = schema1999QNames;
  +  
  +  Class classes [] = {
  +    String.class,
  +    Integer.class,
  +    int.class,
  +    Float.class,
  +    float.class,
  +    Double.class,
  +    double.class,
  +    Boolean.class,
  +    boolean.class,
  +    Long.class,
  +    long.class,
  +    Short.class,
  +    short.class,
  +    Byte.class,
  +    byte.class,
  +    QName.class,
  +    GregorianCalendar.class,
  +    Date.class,
  +    javax.mail.internet.MimeBodyPart.class,
  +    java.io.InputStream.class,
  +    javax.activation.DataSource.class,
  +    javax.activation.DataHandler.class,
  +    Object.class,
  +    };
  +  
  +  Serializer ser = new Serializer()
  +    {
  +      public void marshall(String inScopeEncStyle, Class javaType, Object src,
  +                           Object context, Writer sink, NSStack nsStack,
  +                           XMLJavaMappingRegistry xjmr, SOAPContext ctx)
  +        throws IllegalArgumentException, IOException {
  +        nsStack.pushScope();
  +
  +        SoapEncUtils.generateStructureHeader(inScopeEncStyle,
  +                                             javaType,
  +                                             context,
  +                                             sink,
  +                                             nsStack,
  +                                             xjmr);
  +
  +        sink.write(Utils.cleanString(src.toString()) + "</" + context + '>');
  +
  +        nsStack.popScope();
  +      }
  +    };
   
  +  Serializer serializers [] = {
  +    ser,
  +    ser,
  +    ser,
  +    ser,
  +    ser,
  +    ser,
  +    ser,
  +    ser,
  +    ser,
  +    ser,
  +    ser,
  +    ser,
  +    ser,
  +    ser,
  +    ser,
  +    qNameSer,
  +    calSer,
  +    dateSer,
  +    partSer,
  +    partSer,
  +    partSer,
  +    partSer,
  +    null,
  +  };
  +  
  +  Deserializer deserializers [] = {
  +    stringDeser,
  +    null,
  +    intDeser,
  +    null,
  +    floatDeser,
  +    null,
  +    doubleDeser,
  +    null,
  +    booleanDeser,
  +    null,
  +    longDeser,
  +    null,
  +    shortDeser,
  +    null,
  +    byteDeser,
  +    qNameSer,
  +    calSer,
  +    dateSer,
  +    null,
  +    null,
  +    null,
  +    null,
  +    objDeser,
  +    };
  +  
     public SOAPMappingRegistry()
     {
  +    this(Constants.NS_URI_CURRENT_SCHEMA_XSD);
  +  }
  +  
  +  public SOAPMappingRegistry(String schemaURI)
  +  {
  +    // Set up the correct "current" schema typeset.
  +    if (schemaURI.equals(Constants.NS_URI_1999_SCHEMA_XSD)) {
  +      schemaQNames = schema1999QNames;
  +      mapSchemaTypes(schema2000QNames, false);
  +    } else if (schemaURI.equals(Constants.NS_URI_2000_SCHEMA_XSD)) {
  +      schemaQNames = schema2000QNames;
  +      mapSchemaTypes(schema1999QNames, false);
  +    } else {
  +      System.out.println("WARNING: Unrecognized Schema URI '" + schemaURI +
  +                         "' specified.  Defaulting to ");
  +    }
  +    
  +    mapSchemaTypes(schemaQNames, true);
  +    
       // Register parameter serializer for SOAP-ENC encoding style.
       mapTypes(soapEncURI, RPCConstants.Q_ELEM_PARAMETER, Parameter.class,
                paramSer, paramSer);
  @@ -121,36 +300,11 @@
       mapTypes(Constants.NS_URI_LITERAL_XML, RPCConstants.Q_ELEM_PARAMETER,
                Parameter.class, xmlParamSer, xmlParamSer);
   
  -    /*
  -     * Register inputstreams, data handlers, data sources as Mime parts.
  -     * The order is important! When deserializing an array of these objects,
  -     * DataHandler must be the target class.
  -     * Note that the QName is set to ur-type, so an array of attachments
  -     * will be serialized as that type. It is crucial that
  -     * java.lang.Object is mapped to ur-type behind this section.
  -     */
  -    mapTypes(soapEncURI, objectQName, javax.mail.internet.MimeBodyPart.class,
  -             partSer, null);
  -    mapTypes(soapEncURI, objectQName, java.io.InputStream.class,
  -             partSer, null);
  -    mapTypes(soapEncURI, objectQName, javax.activation.DataSource.class,
  -             partSer, null);
  -    mapTypes(soapEncURI, objectQName, javax.activation.DataHandler.class,
  -             partSer, null);
  -
  -    /*
  -      Map xsd:ur-type to java.lang.Object (no serializer/deserializer,
  -      just an association).
  -    */
  -    mapTypes(Constants.NS_URI_SOAP_ENC, objectQName,
  -             Object.class, null, objDeser);
  -
  -
       try {
         Class XMISerializer = 
  -        Class.forName("org.apache.soap.util.xml.XMISerializer");
  +                           Class.forName("org.apache.soap.util.xml.XMISerializer");
         Class XMIParameterSerializer =
  -        Class.forName("org.apache.soap.encoding.xmi.XMIParameterSerializer");
  +                                    Class.forName("org.apache.soap.encoding.xmi.XMIParameterSerializer");
   
         // Register default serializers for XMI encoding style.
         mapTypes(Constants.NS_URI_XMI_ENC, null, null,
  @@ -166,114 +320,43 @@
       } catch (ClassNotFoundException cnfe) {
       } catch (NoClassDefFoundError ncdfe) {
   
  -      // If the class can't be loaded, continue without it...
  +        // If the class can't be loaded, continue without it...
   
       }
   
  -    Serializer ser = new Serializer()
  -    {
  -      public void marshall(String inScopeEncStyle, Class javaType, Object src,
  -                           Object context, Writer sink, NSStack nsStack,
  -                           XMLJavaMappingRegistry xjmr, SOAPContext ctx)
  -        throws IllegalArgumentException, IOException {
  -        nsStack.pushScope();
  -
  -        SoapEncUtils.generateStructureHeader(inScopeEncStyle,
  -                                             javaType,
  -                                             context,
  -                                             sink,
  -                                             nsStack,
  -                                             xjmr);
  -
  -        sink.write(Utils.cleanString(src.toString()) + "</" + context + '>');
  -
  -        nsStack.popScope();
  -      }
  -    };
  -
  -    Deserializer deser = new Deserializer() {
  -      public Bean unmarshall(String inScopeEncStyle, QName elementType,
  -                             Node src, XMLJavaMappingRegistry xjmr, SOAPContext ctx)
  -        throws IllegalArgumentException {
  -        Element root = (Element)src;
  -        String value = DOMUtils.getChildCharacterData(root);
  -
  -        if (elementType.equals(stringQName)) {
  -          return new Bean(String.class, value);
  -        } else if (elementType.equals(booleanQName)) {
  -          return new Bean(boolean.class, new Boolean(value));
  -        } else if (elementType.equals(doubleQName)) {
  -          return new Bean(double.class, new Double(value));
  -        } else if (elementType.equals(floatQName)) {
  -          return new Bean(float.class, new Float(value));
  -        } else if (elementType.equals(longQName)) {
  -          return new Bean(long.class, new Long(value));
  -        } else if (elementType.equals(intQName)) {
  -          return new Bean(int.class, new Integer(value));
  -        } else if (elementType.equals(shortQName)) {
  -          return new Bean(short.class, new Short(value));
  -        } else if (elementType.equals(byteQName)) {
  -          return new Bean(byte.class, new Byte(value));
  -        }
  -        throw new IllegalArgumentException("I don't know how to " +
  -                                           "deserialize a '" + elementType +
  -                                           "' using encoding style '" +
  -                                           inScopeEncStyle + "'.");
  -      }
  -    };
  -
  -    /*
  -      Register mapping of element type to/from Java type along with
  -      the serializer and deserializer for it. Note that we register
  -      the same serializer for primitives and their object wrapper
  -      counterparts. What this means is that once encoded into
  -      SOAP_ENC, a primitive int and an Integer, for example, are
  -      indistinguishable. We believe (at least for now :-)) that this
  -      is the right thing to do .. that is, upon seeing an element
  -      like <foo xsi:type="xsd:int">53343</foo> we should always get
  -      a primitive int out of it.
  -    */
  -    mapTypes(soapEncURI, stringQName, String.class, ser, deser);
  -    mapTypes(soapEncURI, booleanQName, Boolean.class, ser, null);
  -    mapTypes(soapEncURI, booleanQName, boolean.class, ser, deser);
  -    mapTypes(soapEncURI, doubleQName, Double.class, ser, null);
  -    mapTypes(soapEncURI, doubleQName, double.class, ser, deser);
  -    mapTypes(soapEncURI, floatQName, Float.class, ser, null);
  -    mapTypes(soapEncURI, floatQName, float.class, ser, deser);
  -    mapTypes(soapEncURI, longQName, Long.class, ser, null);
  -    mapTypes(soapEncURI, longQName, long.class, ser, deser);
  -    mapTypes(soapEncURI, intQName, Integer.class, ser, null);
  -    mapTypes(soapEncURI, intQName, int.class, ser, deser);
  -    mapTypes(soapEncURI, shortQName, Short.class, ser, null);
  -    mapTypes(soapEncURI, shortQName, short.class, ser, deser);
  -    mapTypes(soapEncURI, byteQName, Byte.class, ser, null);
  -    mapTypes(soapEncURI, byteQName, byte.class, ser, deser);
  -
  -    QNameSerializer qSer = new QNameSerializer();
  -    mapTypes(soapEncURI, qNameQName, QName.class, qSer, qSer);
  -
       /**
  -     * Basic collection types - these should map fine to Perl, Python, C++...
  -     * (but an encoding like this needs to be agreed upon)
  -     */
  +    * Basic collection types - these should map fine to Perl, Python, C++...
  +    * (but an encoding like this needs to be agreed upon)
  +    */
       mapTypes(soapEncURI, new QName(Constants.NS_URI_XML_SOAP, "Vector"),
  -                Vector.class, vectorSer, vectorSer);
  +             Vector.class, vectorSer, vectorSer);
       mapTypes(soapEncURI, new QName(Constants.NS_URI_XML_SOAP, "Map"),
  -                Hashtable.class, mapSer, mapSer);
  +             Hashtable.class, mapSer, mapSer);
   
       /*
  -      Map a Java byte array to the SOAP-ENC:base64 subtype.
  +    Map a Java byte array to the SOAP-ENC:base64 subtype.
       */
       Base64Serializer base64Ser = new Base64Serializer();
       QName base64QName = new QName(soapEncURI, "base64");
       mapTypes(soapEncURI, base64QName, byte[].class, base64Ser, base64Ser);
  -    
  -    /** Dates
  -     */
  -    mapTypes(soapEncURI, timeQName, java.util.Date.class, dateSer, dateSer);
  -    mapTypes(soapEncURI, dateQName, java.util.GregorianCalendar.class,
  -             calSer, calSer);
     }
  +  
  +  /** Map a set of schema types defined in the arrays above.  If
  +   * the "serialize" arg is set to true, we'll map the serializer
  +   * side (i.e. when output gets generated it'll be as those QNames),
  +   * otherwise we just do deserializers.
  +   */
  +  public void mapSchemaTypes(QName [] schemaQNames, boolean serialize)
  +  {    
  +    for (int i = 0; i < schemaQNames.length; i++) {
  +      QName qName = schemaQNames[i];
  +      Class cls = classes[i];
  +      Serializer ser = serialize ? serializers[i] : null;
  +      Deserializer dser = deserializers[i];
  +      
  +      mapTypes(soapEncURI, qName, cls, ser, dser);
  +    }
  +  }
   
     /**
      * This function overrides the one in XMLJavaMappingRegistry for the sole
  @@ -325,9 +408,9 @@
             && encodingStyleURI != null
             && encodingStyleURI.equals(soapEncURI))
         {
  -		  if (javaType.isArray()) {
  -			  return arraySer;
  -		  }
  +        if (javaType.isArray()) {
  +          return arraySer;
  +        }
         }
         throw e;
       }
  
  
  
  1.6       +15 -2     xml-soap/java/src/org/apache/soap/encoding/soapenc/ArraySerializer.java
  
  Index: ArraySerializer.java
  ===================================================================
  RCS file: /home/cvs/xml-soap/java/src/org/apache/soap/encoding/soapenc/ArraySerializer.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- ArraySerializer.java	2001/01/08 12:25:14	1.5
  +++ ArraySerializer.java	2001/03/19 06:20:51	1.6
  @@ -169,14 +169,27 @@
                                 ? declEncStyle
                                 : inScopeEncStyle;
         QName declItemType = SoapEncUtils.getAttributeValue(tempEl,
  -        Constants.NS_URI_SCHEMA_XSI, Constants.ATTR_TYPE, "array item",
  +        Constants.NS_URI_CURRENT_SCHEMA_XSI, Constants.ATTR_TYPE, "array item",
           false);
         QName actualItemType = declItemType != null
                                ? declItemType
                                : arrayItemType;
  +	  
  +      // If it's a local reference, follow it.
  +      String href = tempEl.getAttribute(Constants.ATTR_REFERENCE);
  +      Element actualEl = tempEl;
  +      
  +      if(href != null && !href.equals("") && (href.charAt(0) == '#'))
  +      {
  +        href = href.substring(1);
  +        actualEl = DOMUtils.getElementByID(src.getOwnerDocument().getDocumentElement(),href);
  +        if (actualEl == null) {
  +          throw new IllegalArgumentException("No such ID '" + href + "'");
  +        }
  +      }
   
         Bean itemBean = xjmr.unmarshall(actualEncStyle, actualItemType,
  -                                      tempEl, ctx);
  +                                      actualEl, ctx);
   
         Array.set(array, i, itemBean.value);
   
  
  
  
  1.5       +1 -1      xml-soap/java/src/org/apache/soap/encoding/soapenc/MapSerializer.java
  
  Index: MapSerializer.java
  ===================================================================
  RCS file: /home/cvs/xml-soap/java/src/org/apache/soap/encoding/soapenc/MapSerializer.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- MapSerializer.java	2001/01/08 12:25:14	1.4
  +++ MapSerializer.java	2001/03/19 06:20:51	1.5
  @@ -199,7 +199,7 @@
             ? declEncStyle
             : inScopeEncStyle;
         QName declItemType = SoapEncUtils.getAttributeValue(targetEl,
  -          Constants.NS_URI_SCHEMA_XSI, Constants.ATTR_TYPE, STR_ITEM, false);
  +          Constants.NS_URI_CURRENT_SCHEMA_XSI, Constants.ATTR_TYPE, STR_ITEM, false);
   
         return xjmr.unmarshall(actualEncStyle, declItemType, targetEl, ctx);
     }
  
  
  
  1.7       +32 -2     xml-soap/java/src/org/apache/soap/encoding/soapenc/ParameterSerializer.java
  
  Index: ParameterSerializer.java
  ===================================================================
  RCS file: /home/cvs/xml-soap/java/src/org/apache/soap/encoding/soapenc/ParameterSerializer.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- ParameterSerializer.java	2001/01/09 05:35:26	1.6
  +++ ParameterSerializer.java	2001/03/19 06:20:51	1.7
  @@ -112,21 +112,51 @@
     {
       Element paramEl = (Element)src;
       String name = paramEl.getTagName();
  -    Bean bean;
  +    Bean bean = null;
   
       // If the element contains an href= parameter, shortcut to
       // MimePartSerializer.
       String href = paramEl.getAttribute(Constants.ATTR_REFERENCE);
       if(href != null && !href.equals(""))
       {
  +      // First, check to see if it's a local ref
  +      if (href.charAt(0) == '#') {
  +        href = href.substring(1);
  +        Element el = DOMUtils.getElementByID(src.getOwnerDocument().getDocumentElement(),href);
  +        if (el == null) {
  +          throw new IllegalArgumentException("No such ID '" + href + "'");
  +        }
  +        
  +        QName soapType = 
  +                        SoapEncUtils.getAttributeValue(paramEl,
  +                                                       Constants.NS_URI_CURRENT_SCHEMA_XSI,
  +                                                       Constants.ATTR_TYPE,
  +                                                       "parameter", false);
  +        
  +        if (soapType == null) {
  +          // no xsi:type attribute found: determine the type as the 
  +          // qualified name of the parameter element (if the parameter
  +          // element is qualified) or as the qname formed by an empty
  +          // namespace URI and the tag name of the parameter element.
  +          // is that a legal qname???
  +          String paramNamespaceURI = paramEl.getNamespaceURI();
  +          if (paramNamespaceURI != null) {
  +            soapType = new QName(paramNamespaceURI, name);
  +          } else {
  +            soapType = new QName("", name);
  +          }
  +          bean = xjmr.unmarshall(inScopeEncStyle, soapType, el, ctx);
  +        }
  +      } else {
           bean = (new MimePartSerializer()).unmarshall(inScopeEncStyle,
                                                        elementType, src,
                                                        xjmr, ctx);
  +      }
       }
       else {
         QName soapType = 
           SoapEncUtils.getAttributeValue(paramEl,
  -                                       Constants.NS_URI_SCHEMA_XSI,
  +                                       Constants.NS_URI_CURRENT_SCHEMA_XSI,
                                          Constants.ATTR_TYPE,
                                          "parameter", false);
         
  
  
  
  1.3       +1 -1      xml-soap/java/src/org/apache/soap/encoding/soapenc/QNameSerializer.java
  
  Index: QNameSerializer.java
  ===================================================================
  RCS file: /home/cvs/xml-soap/java/src/org/apache/soap/encoding/soapenc/QNameSerializer.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- QNameSerializer.java	2001/01/08 12:25:15	1.2
  +++ QNameSerializer.java	2001/03/19 06:20:51	1.3
  @@ -28,7 +28,7 @@
                                                 Constants.NS_URI_SOAP_ENC);
   		
   		String xsiNSPrefix =
  -				nsStack.getPrefixFromURI(Constants.NS_URI_SCHEMA_XSI, sink);
  +				nsStack.getPrefixFromURI(Constants.NS_URI_CURRENT_SCHEMA_XSI, sink);
   		String elementTypeNSPrefix =
   				nsStack.getPrefixFromURI(elementType.getNamespaceURI(), sink);
   
  
  
  
  1.5       +2 -2      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.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- SoapEncUtils.java	2000/09/01 03:52:46	1.4
  +++ SoapEncUtils.java	2001/03/19 06:20:51	1.5
  @@ -133,7 +133,7 @@
   
       // Get prefixes for the needed namespaces.
       String xsiNSPrefix = nsStack.getPrefixFromURI(
  -      Constants.NS_URI_SCHEMA_XSI, sink);
  +      Constants.NS_URI_CURRENT_SCHEMA_XSI, sink);
       String elementTypeNSPrefix = nsStack.getPrefixFromURI(
         elementType.getNamespaceURI(), sink);
   
  @@ -180,7 +180,7 @@
     public static boolean isNull(Element element)
     {
       String nullValue = DOMUtils.getAttributeNS(element,
  -                                               Constants.NS_URI_SCHEMA_XSI,
  +                                               Constants.NS_URI_CURRENT_SCHEMA_XSI,
                                                  Constants.ATTR_NULL);
   
       return nullValue != null
  
  
  
  1.2       +10 -1     xml-soap/java/src/org/apache/soap/encoding/soapenc/UrTypeDeserializer.java
  
  Index: UrTypeDeserializer.java
  ===================================================================
  RCS file: /home/cvs/xml-soap/java/src/org/apache/soap/encoding/soapenc/UrTypeDeserializer.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- UrTypeDeserializer.java	2001/02/19 23:34:51	1.1
  +++ UrTypeDeserializer.java	2001/03/19 06:20:51	1.2
  @@ -66,6 +66,7 @@
   import org.apache.soap.util.xml.*;
   import org.apache.soap.*;
   import org.apache.soap.rpc.*;
  +import org.apache.soap.encoding.SOAPMappingRegistry;
   
   /**
    * An <code>UrTypeDeserializer</code> deserializes <code>xsd:ur-type</code>
  @@ -83,7 +84,15 @@
     {
   	  Element root = (Element)src;
   	  if (!SoapEncUtils.isNull(root)) {
  -          throw new IllegalArgumentException("Can't yet deserialize non-null Objects");
  +      String href = root.getAttribute(Constants.ATTR_REFERENCE);
  +      if (href != null && !href.equals(""))
  +        return SOAPMappingRegistry.partSer.unmarshall(inScopeEncStyle,
  +                                                      elementType,
  +                                                      src,
  +                                                      xjmr,
  +                                                      ctx);
  +      
  +      throw new IllegalArgumentException("Can't yet deserialize non-null Objects");
   	  }
   
         return new Bean(Object.class, null);
  
  
  
  1.5       +4 -4      xml-soap/java/src/org/apache/soap/encoding/soapenc/VectorSerializer.java
  
  Index: VectorSerializer.java
  ===================================================================
  RCS file: /home/cvs/xml-soap/java/src/org/apache/soap/encoding/soapenc/VectorSerializer.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- VectorSerializer.java	2001/01/08 12:25:15	1.4
  +++ VectorSerializer.java	2001/03/19 06:20:51	1.5
  @@ -179,10 +179,10 @@
   		  String actualEncStyle = declEncStyle != null
   								  ? declEncStyle
   									: inScopeEncStyle;
  -		  QName declItemType = SoapEncUtils.getAttributeValue(tempEl,
  -															  Constants.NS_URI_SCHEMA_XSI, Constants.ATTR_TYPE, "Vector item",
  -															  false);
  -		  QName actualItemType = declItemType;
  +          QName declItemType = SoapEncUtils.getAttributeValue(tempEl,
  +                                                              Constants.NS_URI_CURRENT_SCHEMA_XSI, Constants.ATTR_TYPE, "Vector item",
  +                                                              false);
  +          QName actualItemType = declItemType;
   
                     Bean itemBean = xjmr.unmarshall(actualEncStyle, actualItemType,
                                                     tempEl, ctx);
  
  
  
  1.13      +5 -1      xml-soap/java/src/org/apache/soap/rpc/RPCMessage.java
  
  Index: RPCMessage.java
  ===================================================================
  RCS file: /home/cvs/xml-soap/java/src/org/apache/soap/rpc/RPCMessage.java,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- RPCMessage.java	2001/02/14 02:29:27	1.12
  +++ RPCMessage.java	2001/03/19 06:20:51	1.13
  @@ -387,6 +387,10 @@
           // I'm on the client unmarshalling a response.
           smr = respSMR;
         }
  +      
  +      // For RPC, default to SOAP section 5 encoding if no
  +      // encodingStyle attribute is set.
  +      smr.setDefaultEncodingStyle(Constants.NS_URI_SOAP_ENC);
   
         /*
           Sanity check: the name of the method element should be the
  @@ -407,7 +411,7 @@
           }
         } else {
           methodName = tagName;
  -      }
  +	  }
   
         Element tempEl = DOMUtils.getFirstChildElement(root);
   
  
  
  
  1.23      +30 -4     xml-soap/java/src/org/apache/soap/server/DeploymentDescriptor.java
  
  Index: DeploymentDescriptor.java
  ===================================================================
  RCS file: /home/cvs/xml-soap/java/src/org/apache/soap/server/DeploymentDescriptor.java,v
  retrieving revision 1.22
  retrieving revision 1.23
  diff -u -r1.22 -r1.23
  --- DeploymentDescriptor.java	2001/02/27 19:06:55	1.22
  +++ DeploymentDescriptor.java	2001/03/19 06:20:52	1.23
  @@ -105,6 +105,13 @@
     transient SOAPMappingRegistry cachedSMR;
     protected String[] faultListener;
     private transient SOAPFaultRouter fr;
  +  
  +  // Should I throw a mustUnderstand fault if I get
  +  // any mustUnderstand headers?  If you deploy a
  +  // service that doesn't process headers at all,
  +  // this option should technically be set to be
  +  // a good SOAP citizen.
  +  protected boolean checkMustUnderstands = false;
   
     private String defaultSMRClass = null;
     /**
  @@ -127,6 +134,16 @@
       return id;
     }
   
  +  public boolean shouldCheckMustUnderstands()
  +  {
  +      return checkMustUnderstands;
  +  }
  +  
  +  public void setCheckMustUnderstands(boolean doIt)
  +  {
  +      checkMustUnderstands = doIt;
  +  }
  +  
     /**
      * Type of the service: message or procedural service. Defaults to being
      * a procedural service. The difference is that if its procedural then
  @@ -308,6 +325,9 @@
       pw.println ("<isd:service xmlns:isd=\"" +
                   Constants.NS_URI_XML_SOAP_DEPLOYMENT + "\" id=\"" + id + "\"" +
                   (serviceType != SERVICE_TYPE_RPC ? " type=\"message\"" : "") +
  +                " checkMustUnderstands=\"" + (checkMustUnderstands ? "true" :
  +                                                                    "false") +
  +                                             "\"" +
                   ">");
   
       byte pt = providerType;
  @@ -439,6 +459,13 @@
                                             "missing in deployment descriptor");
       }
       dd.setID (id);
  +    
  +    // If we've been marked as checking mustUnderstands, do it.
  +    String checkMustUnderstands = DOMUtils.getAttribute(root, "checkMustUnderstands");
  +    if (checkMustUnderstands != null) {
  +      if (checkMustUnderstands.equals("true"))
  +        dd.checkMustUnderstands = true;
  +    }
   
       // check type of service
       String serviceTypeStr = DOMUtils.getAttribute (root, "type");
  @@ -602,8 +629,7 @@
         methods[i] = st.nextToken ();
       }
       dd.setMethods (methods);
  -
  -
  +    
       //read the fault listeners
       nl = root.getElementsByTagNameNS (Constants.NS_URI_XML_SOAP_DEPLOYMENT,
                                         "faultListener");
  @@ -729,11 +755,11 @@
             smr = (SOAPMappingRegistry)defaultSMRClass.newInstance();
           }
           catch (Exception e) {
  -          smr = new SOAPMappingRegistry();
  +           smr = new SOAPMappingRegistry(); 
           }
         }
         else {
  -        smr = new SOAPMappingRegistry ();
  +        smr = new SOAPMappingRegistry();
         }
       }
       if (maps != null) {
  
  
  
  1.9       +5 -0      xml-soap/java/src/org/apache/soap/server/RPCRouter.java
  
  Index: RPCRouter.java
  ===================================================================
  RCS file: /home/cvs/xml-soap/java/src/org/apache/soap/server/RPCRouter.java,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- RPCRouter.java	2001/01/16 14:26:41	1.8
  +++ RPCRouter.java	2001/03/19 06:20:52	1.9
  @@ -37,6 +37,11 @@
           "Unable to determine object id from call: is the method element " +
           "namespaced?");
       }
  +    
  +    // If I'm supposed to check mustUnderstands, do it now.
  +    if (dd.shouldCheckMustUnderstands() && callEnv.getHeader() != null) {
  +        Utils.checkMustUnderstands(callEnv.getHeader());
  +    }
   
       // now extract the call from the call envelope with the given
       // deployment information about the object. Note that I still
  
  
  
  1.8       +4 -4      xml-soap/java/src/org/apache/soap/server/TypeMappingSerializer.java
  
  Index: TypeMappingSerializer.java
  ===================================================================
  RCS file: /home/cvs/xml-soap/java/src/org/apache/soap/server/TypeMappingSerializer.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- TypeMappingSerializer.java	2001/01/09 05:15:04	1.7
  +++ TypeMappingSerializer.java	2001/03/19 06:20:52	1.8
  @@ -97,13 +97,13 @@
       sink.write (StringUtils.lineSeparator);
   
       // these namespaces being defined by the envelope stuff
  -    String xsiPrefix = nsStack.getPrefixFromURI (Constants.NS_URI_SCHEMA_XSI);
  -    String xsdPrefix = nsStack.getPrefixFromURI (Constants.NS_URI_SCHEMA_XSD);
  +    String xsiPrefix = nsStack.getPrefixFromURI (Constants.NS_URI_CURRENT_SCHEMA_XSI);
  +    String xsdPrefix = nsStack.getPrefixFromURI (Constants.NS_URI_CURRENT_SCHEMA_XSD);
       if ((xsiPrefix == null) || (xsdPrefix == null)) {
         throw new IllegalArgumentException ("required namespace names '" +
  -                                          Constants.NS_URI_SCHEMA_XSI + 
  +                                          Constants.NS_URI_CURRENT_SCHEMA_XSI + 
                                             "' and/or '" +
  -                                          Constants.NS_URI_SCHEMA_XSD + 
  +                                          Constants.NS_URI_CURRENT_SCHEMA_XSD + 
                                             "' is not defined.");
       }
   
  
  
  
  1.3       +21 -0     xml-soap/java/src/org/apache/soap/util/xml/DOMUtils.java
  
  Index: DOMUtils.java
  ===================================================================
  RCS file: /home/cvs/xml-soap/java/src/org/apache/soap/util/xml/DOMUtils.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- DOMUtils.java	2000/09/01 03:53:08	1.2
  +++ DOMUtils.java	2001/03/19 06:20:52	1.3
  @@ -262,4 +262,25 @@
   
       return null;
     }
  +
  +  public static Element getElementByID(Element el, String id)
  +  {
  +	  if (el == null)
  +		  return null;
  +	  String thisId = el.getAttribute("id");
  +	  if (id.equals(thisId))
  +		  return el;
  +	  
  +	  NodeList list = el.getChildNodes();
  +	  for (int i = 0; i < list.getLength(); i++) {
  +		  Node node = list.item(i);
  +		  if (node instanceof Element) {
  +			  Element ret = getElementByID((Element)node, id);
  +			  if (ret != null)
  +				  return ret;
  +		  }
  +	  }
  +	  
  +	  return null;
  +  }
   }
  
  
  
  1.6       +25 -0     xml-soap/java/src/org/apache/soap/util/xml/XMLJavaMappingRegistry.java
  
  Index: XMLJavaMappingRegistry.java
  ===================================================================
  RCS file: /home/cvs/xml-soap/java/src/org/apache/soap/util/xml/XMLJavaMappingRegistry.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- XMLJavaMappingRegistry.java	2001/01/08 12:25:30	1.5
  +++ XMLJavaMappingRegistry.java	2001/03/19 06:20:52	1.6
  @@ -79,6 +79,16 @@
     private Hashtable dsReg       = new Hashtable();
     private Hashtable xml2JavaReg = new Hashtable();
     private Hashtable java2XMLReg = new Hashtable();
  +  private String defaultEncodingStyle = null;
  +  
  +  /** Set the default encoding style.  If the query*() calls
  +   * are invoked with a null encodingStyleURI parameter, we'll
  +   * use this instead.
  +   */
  +  public void setDefaultEncodingStyle(String defEncStyle)
  +  {
  +      defaultEncodingStyle = defEncStyle;
  +  }
   
     // To register the default, set both types to null.
     public void mapTypes(String encodingStyleURI, QName elementType,
  @@ -108,6 +118,9 @@
     public Serializer querySerializer(Class javaType, String encodingStyleURI)
       throws IllegalArgumentException
     {
  +    if (encodingStyleURI == null) {
  +      encodingStyleURI = defaultEncodingStyle;
  +    }
       String java2XMLKey = getKey(javaType, encodingStyleURI);
       Serializer s = (Serializer)sReg.get(java2XMLKey);
   
  @@ -139,6 +152,10 @@
                                           String encodingStyleURI)
       throws IllegalArgumentException
     {
  +    if (encodingStyleURI == null) {
  +      encodingStyleURI = defaultEncodingStyle;
  +    }
  +
       String xml2JavaKey = getKey(elementType, encodingStyleURI);
       Deserializer ds = (Deserializer)dsReg.get(xml2JavaKey);
   
  @@ -168,6 +185,10 @@
     public QName queryElementType(Class javaType, String encodingStyleURI)
       throws IllegalArgumentException
     {
  +    if (encodingStyleURI == null) {
  +      encodingStyleURI = defaultEncodingStyle;
  +    }
  +
       String java2XMLkey = getKey(javaType, encodingStyleURI);
       QName elementType = (QName)java2XMLReg.get(java2XMLkey);
   
  @@ -187,6 +208,10 @@
     public Class queryJavaType(QName elementType, String encodingStyleURI)
       throws IllegalArgumentException
     {
  +    if (encodingStyleURI == null) {
  +      encodingStyleURI = defaultEncodingStyle;
  +    }
  +
       String xml2JavaKey = getKey(elementType, encodingStyleURI);
       Class javaType = (Class)xml2JavaReg.get(xml2JavaKey);
   
  
  
  
  1.3       +1 -0      xml-soap/java/src/org/apache/soap/util/xml/XMLParserLiaison.java
  
  Index: XMLParserLiaison.java
  ===================================================================
  RCS file: /home/cvs/xml-soap/java/src/org/apache/soap/util/xml/XMLParserLiaison.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- XMLParserLiaison.java	2000/05/30 10:24:46	1.2
  +++ XMLParserLiaison.java	2001/03/19 06:20:52	1.3
  @@ -71,6 +71,7 @@
   public interface XMLParserLiaison
   {
     public Document read (String sourceDesc, Reader reader);
  +  public Document read (String sourceDesc, InputStream inStream);
   
     public Document createDocument ();
   }
  
  
  
  1.4       +24 -0     xml-soap/java/src/org/apache/soap/util/xml/XercesParserLiaison.java
  
  Index: XercesParserLiaison.java
  ===================================================================
  RCS file: /home/cvs/xml-soap/java/src/org/apache/soap/util/xml/XercesParserLiaison.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- XercesParserLiaison.java	2000/09/01 03:53:11	1.3
  +++ XercesParserLiaison.java	2001/03/19 06:20:52	1.4
  @@ -98,6 +98,30 @@
       }
     }
   
  +  public Document read(String sourceDesc, InputStream inStream)
  +  {
  +    DOMParser parser = new DOMParser();
  +    InputSource in = new InputSource(inStream);
  +
  +    try
  +    {
  +      parser.setFeature("http://xml.org/sax/features/namespaces", true);
  +      parser.parse(in);
  +
  +      return parser.getDocument();
  +    }
  +    catch (SAXException e)
  +    {
  +      e.printStackTrace();
  +      return null;
  +    }
  +    catch (IOException e)
  +    {
  +      e.printStackTrace();
  +      return null;
  +    }
  +  }
  +
     public Document createDocument()
     {
       return new DocumentImpl();