You are viewing a plain text version of this content. The canonical link for it is here.
Posted to soap-dev@ws.apache.org by sn...@apache.org on 2002/11/27 03:36:08 UTC

cvs commit: xml-soap/java/src/org/apache/soap/server TypeMappingSerializer.java

snichol     2002/11/26 18:36:08

  Modified:    java/src/org/apache/soap Envelope.java
               java/src/org/apache/soap/encoding/soapenc
                        QNameSerializer.java SoapEncUtils.java
               java/src/org/apache/soap/server TypeMappingSerializer.java
  Log:
  Where possible, use SOAPMappingRegistry#getSchemaURI rather than
  Constants#NS_URI_CURRENT_SCHEMA_XSD, so that, e.g., a Call serialized
  using a SOAPMappingRegistry based on the 1999 schema will serialize
  properly.
  
  Revision  Changes    Path
  1.14      +13 -6     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.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- Envelope.java	18 Nov 2002 21:52:05 -0000	1.13
  +++ Envelope.java	27 Nov 2002 02:36:08 -0000	1.14
  @@ -102,12 +102,6 @@
   
       // Declare the "SOAP-ENV" namespace.
       setAttribute(N_SOAP_ENV, Constants.NS_URI_SOAP_ENV);
  -
  -    // Declare the "xsi" namespace.
  -    setAttribute(N_SCHEMA_XSI, Constants.NS_URI_CURRENT_SCHEMA_XSI);
  -
  -    // Declare the "xsd" namespace.
  -    setAttribute(N_SCHEMA_XSD, Constants.NS_URI_CURRENT_SCHEMA_XSD);
     }
   
     /**
  @@ -223,6 +217,19 @@
         throw new IllegalArgumentException("An '" + Constants.Q_ELEM_ENVELOPE +
                                            "' must contain a: '" +
                                            Constants.Q_ELEM_BODY + "'.");
  +    }
  +
  +    if (xjmr instanceof SOAPMappingRegistry) {
  +      String schemaURI = ((SOAPMappingRegistry) xjmr).getSchemaURI();
  +      // Declare the "xsi" namespace.
  +      setAttribute(N_SCHEMA_XSI, schemaURI + "-instance");
  +      // Declare the "xsd" namespace.
  +      setAttribute(N_SCHEMA_XSD, schemaURI);
  +    } else {
  +      // Declare the "xsi" namespace.
  +      setAttribute(N_SCHEMA_XSI, Constants.NS_URI_CURRENT_SCHEMA_XSI);
  +      // Declare the "xsd" namespace.
  +      setAttribute(N_SCHEMA_XSD, Constants.NS_URI_CURRENT_SCHEMA_XSD);
       }
   
       // Initialize the namespace stack.
  
  
  
  1.5       +73 -4     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.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- QNameSerializer.java	17 May 2001 16:17:13 -0000	1.4
  +++ QNameSerializer.java	27 Nov 2002 02:36:08 -0000	1.5
  @@ -1,11 +1,75 @@
  +/*
  + * The Apache Software License, Version 1.1
  + *
  + *
  + * Copyright (c) 2000 The Apache Software Foundation.  All rights
  + * reserved.
  + *
  + * Redistribution and use in source and binary forms, with or without
  + * modification, are permitted provided that the following conditions
  + * are met:
  + *
  + * 1. Redistributions of source code must retain the above copyright
  + *    notice, this list of conditions and the following disclaimer.
  + *
  + * 2. Redistributions in binary form must reproduce the above copyright
  + *    notice, this list of conditions and the following disclaimer in
  + *    the documentation and/or other materials provided with the
  + *    distribution.
  + *
  + * 3. The end-user documentation included with the redistribution,
  + *    if any, must include the following acknowledgment:
  + *       "This product includes software developed by the
  + *        Apache Software Foundation (http://www.apache.org/)."
  + *    Alternately, this acknowledgment may appear in the software itself,
  + *    if and wherever such third-party acknowledgments normally appear.
  + *
  + * 4. The names "SOAP" and "Apache Software Foundation" must
  + *    not be used to endorse or promote products derived from this
  + *    software without prior written permission. For written
  + *    permission, please contact apache@apache.org.
  + *
  + * 5. Products derived from this software may not be called "Apache",
  + *    nor may "Apache" appear in their name, without prior written
  + *    permission of the Apache Software Foundation.
  + *
  + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  + * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
  + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  + * SUCH DAMAGE.
  + * ====================================================================
  + *
  + * This software consists of voluntary contributions made by many
  + * individuals on behalf of the Apache Software Foundation and was
  + * originally based on software copyright (c) 2000, International
  + * Business Machines, Inc., http://www.apache.org.  For more
  + * information on the Apache Software Foundation, please see
  + * <http://www.apache.org/>.
  + */
   package org.apache.soap.encoding.soapenc;
   
  +import java.io.IOException;
  +import java.io.Writer;
  +
   import org.apache.soap.Constants;
   import org.apache.soap.util.Bean;
  -import org.apache.soap.util.xml.*;
  +import org.apache.soap.util.xml.Deserializer;
  +import org.apache.soap.util.xml.DOMUtils;
  +import org.apache.soap.util.xml.NSStack;
  +import org.apache.soap.util.xml.QName;
  +import org.apache.soap.util.xml.Serializer;
  +import org.apache.soap.util.xml.XMLJavaMappingRegistry;
  +import org.apache.soap.encoding.SOAPMappingRegistry;
   import org.apache.soap.rpc.SOAPContext;
   import org.w3c.dom.*;
  -import java.io.*;
   
   /** A QNameSerializer serializes a QName as follows:
    * <elementName xmlns:ns="QNameURIPart">ns:QNameLocalPart</elementName>
  @@ -26,9 +90,14 @@
   		
   	    QName elementType = xjmr.queryElementType(javaType,
                                                 Constants.NS_URI_SOAP_ENC);
  -		
  +
  +        String schemaInstanceURI;
  +        if (xjmr instanceof SOAPMappingRegistry)
  +            schemaInstanceURI = ((SOAPMappingRegistry) xjmr).getSchemaURI() + "-instance";
  +        else
  +            schemaInstanceURI = Constants.NS_URI_CURRENT_SCHEMA_XSI;
   		String xsiNSPrefix =
  -				nsStack.getPrefixFromURI(Constants.NS_URI_CURRENT_SCHEMA_XSI, sink);
  +				nsStack.getPrefixFromURI(schemaInstanceURI, sink);
   		String elementTypeNSPrefix =
   				nsStack.getPrefixFromURI(elementType.getNamespaceURI(), sink);
   
  
  
  
  1.19      +7 -3      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.18
  retrieving revision 1.19
  diff -u -r1.18 -r1.19
  --- SoapEncUtils.java	6 Nov 2002 15:11:08 -0000	1.18
  +++ SoapEncUtils.java	27 Nov 2002 02:36:08 -0000	1.19
  @@ -61,6 +61,7 @@
   import org.w3c.dom.*;
   import org.apache.soap.util.xml.*;
   import org.apache.soap.*;
  +import org.apache.soap.encoding.SOAPMappingRegistry;
   import org.apache.soap.rpc.SOAPContext;
   
   /**
  @@ -178,12 +179,15 @@
   
       // Get prefixes for the needed namespaces.
       String elementTypeNS = elementType.getNamespaceURI();
  -    String xsiNamespaceURI = Constants.NS_URI_CURRENT_SCHEMA_XSI;
  +    String xsiNamespaceURI;
   
       if (elementTypeNS.startsWith("http://www.w3.org/")
  -        && elementTypeNS.endsWith("/XMLSchema"))
  -    {
  +        && elementTypeNS.endsWith("/XMLSchema")) {
         xsiNamespaceURI = elementTypeNS + "-instance";
  +    } else if (xjmr instanceof SOAPMappingRegistry) {
  +      xsiNamespaceURI = ((SOAPMappingRegistry) xjmr).getSchemaURI() + "-instance";
  +    } else {
  +      xsiNamespaceURI = Constants.NS_URI_CURRENT_SCHEMA_XSI;
       }
   
       String xsiNSPrefix = nsStack.getPrefixFromURI(xsiNamespaceURI, sink);
  
  
  
  1.12      +14 -5     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.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- TypeMappingSerializer.java	30 Aug 2002 21:39:01 -0000	1.11
  +++ TypeMappingSerializer.java	27 Nov 2002 02:36:08 -0000	1.12
  @@ -98,13 +98,22 @@
       sink.write (StringUtils.lineSeparator);
   
       // these namespaces being defined by the envelope stuff
  -    String xsiPrefix = nsStack.getPrefixFromURI (Constants.NS_URI_CURRENT_SCHEMA_XSI);
  -    String xsdPrefix = nsStack.getPrefixFromURI (Constants.NS_URI_CURRENT_SCHEMA_XSD);
  +    String schemaURI;
  +    String schemaInstanceURI;
  +    if (xjmr instanceof SOAPMappingRegistry) {
  +      schemaURI = ((SOAPMappingRegistry) xjmr).getSchemaURI();
  +      schemaInstanceURI = schemaURI + "-instance";
  +    } else {
  +      schemaURI = Constants.NS_URI_CURRENT_SCHEMA_XSD;
  +      schemaInstanceURI = Constants.NS_URI_CURRENT_SCHEMA_XSI;
  +    }
  +    String xsiPrefix = nsStack.getPrefixFromURI(schemaInstanceURI);
  +    String xsdPrefix = nsStack.getPrefixFromURI(schemaURI);
       if ((xsiPrefix == null) || (xsdPrefix == null)) {
  -      throw new IllegalArgumentException ("required namespace names '" +
  -                                          Constants.NS_URI_CURRENT_SCHEMA_XSI + 
  +      throw new IllegalArgumentException ("required namespace name for '" +
  +                                          schemaInstanceURI +
                                             "' and/or '" +
  -                                          Constants.NS_URI_CURRENT_SCHEMA_XSD + 
  +                                          schemaURI +
                                             "' is not defined.");
       }