snichol     2002/10/22 21:05:22

  Modified:    java/src/org/apache/soap/util/xml
                        XMLJavaMappingRegistry.java
  Log:
  In mapTypes, only map Java type to XML type if a serializer was provided,
  and only map XML type to Java type if a deserializer was provided.
  
  Revision  Changes    Path
  1.9       +106 -6    
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.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- XMLJavaMappingRegistry.java       4 Oct 2002 13:34:17 -0000       1.8
  +++ XMLJavaMappingRegistry.java       23 Oct 2002 04:05:22 -0000      1.9
  @@ -67,30 +67,63 @@
   import org.apache.soap.encoding.SOAPMappingRegistry;
   
   /**
  - * An <code>XMLJavaMappingRegistry</code> ...
  + * An <code>XMLJavaMappingRegistry</code>, which maps
  + * <ul>
  + * <li>Java types to Serializers</li>
  + * <li>XML types to Deserializers</li>
  + * <li>Java types to XML types</li>
  + * <li>XML types to Java types</li>
  + * </ul>
    *
    * @author Matthew J. Duftler ([EMAIL PROTECTED])
    * @author Sanjiva Weerawarana ([EMAIL PROTECTED])
    * @author Francisco Curbera ([EMAIL PROTECTED])
  + * @author Scott Nichol ([EMAIL PROTECTED])
    */
   public class XMLJavaMappingRegistry
   {
  +  /** Java type to Serializer */
     private Hashtable sReg        = new Hashtable();
  +  /** XML type to Deserializer */
     private Hashtable dsReg       = new Hashtable();
  +  /** XML type to Java type */
     private Hashtable xml2JavaReg = new Hashtable();
  +  /** Java type to XML type */
     private Hashtable java2XMLReg = new Hashtable();
  +  /** Encoding to use if none specified */
     private String defaultEncodingStyle = null;
     
  -  /** Set the default encoding style.  If the query*() calls
  +  /**
  +   * Sets the default encoding style.  If the query*() calls
      * are invoked with a null encodingStyleURI parameter, we'll
      * use this instead.
  +   *
  +   * @param defEncStyle The default encoding style.
      */
     public void setDefaultEncodingStyle(String defEncStyle)
     {
         defaultEncodingStyle = defEncStyle;
     }
   
  -  // To register the default, set both types to null.
  +  /**
  +   * Adds type and serializer mappings.  If a serializer is specified,
  +   * a mapping from the Java type to the serializer is added.  If a
  +   * deserializer is specifed, a mapping from the XML type to the
  +   * deserializer is added.  If both XML and Java types are specified,
  +   * a mapping from the Java type to the XML type is added if a serializer
  +   * is specified, and a mapping from the XML type to the Java type is
  +   * added if a deserializer is specified.
  +   *
  +   * To register a default serializer and/or deserializer, set the
  +   * corresponding type to null.
  +   *
  +   * @param encodingStyleURI The encoding style for the map.  The 
  +   *        encoding style qualifies the types.
  +   * @param elementType The XML type.
  +   * @param javaType The Java type.
  +   * @param s The serializer.
  +   * @param ds The deserializer.
  +   */
     public void mapTypes(String encodingStyleURI, QName elementType,
                          Class javaType, Serializer s, Deserializer ds)
     {
  @@ -110,8 +143,12 @@
       // Only map types if both types are provided.
       if (elementType != null && javaType != null)
       {
  -      java2XMLReg.put(java2XMLKey, elementType);
  -      xml2JavaReg.put(xml2JavaKey, javaType);
  +      // Only map Java to XML if a serializer was provided
  +      if (s != null)
  +        java2XMLReg.put(java2XMLKey, elementType);
  +      // Only map XML to Java if a deserializer was provided
  +      if (ds != null)
  +        xml2JavaReg.put(xml2JavaKey, javaType);
       }
     }
   
  @@ -119,6 +156,11 @@
      * This version returns null if the serializer is not found. It is 
      * intended for internal usage (its used for chaining registries,
      * for example).
  +   *
  +   * @param javaType The Java type.
  +   * @param encodingStyleURI The encoding style.
  +   * @return The serializer for the Java type and encoding style, null
  +   *         if one is not found.
      */
     protected Serializer querySerializer_(Class javaType,
                                           String encodingStyleURI)
  @@ -141,8 +183,13 @@
     }
   
     /**
  -   * This version calls the protected method to do the work and if its
  +   * This version calls the protected method to do the work and if it's
      * not found throws an exception. 
  +   *
  +   * @param javaType The Java type.
  +   * @param encodingStyleURI The encoding style.
  +   * @return The serializer for the Java type and encoding style.
  +   * @exception IllegalArgumentException If no serializer is found for the type.
      */
     public Serializer querySerializer(Class javaType, String encodingStyleURI)
       throws IllegalArgumentException
  @@ -166,6 +213,11 @@
      * This version returns null if the deserializer is not found. It is 
      * intended for internal usage (its used for chaining registries,
      * for example).
  +   *
  +   * @param elementType The XML type.
  +   * @param encodingStyleURI The encoding style.
  +   * @return The deserializer for the XML type and encoding style, null
  +   *         if one is not found.
      */
     protected Deserializer queryDeserializer_(QName elementType,
                                               String encodingStyleURI)
  @@ -191,6 +243,11 @@
     /**
      * This version calls the protected method to do the work and if its
      * not found throws an exception. 
  +   *
  +   * @param elementType The XML type.
  +   * @param encodingStyleURI The encoding style.
  +   * @return The deserializer for the XML type and encoding style.
  +   * @exception IllegalArgumentException If no deserializer is found for the type.
      */
     public Deserializer queryDeserializer(QName elementType,
                                           String encodingStyleURI)
  @@ -214,6 +271,11 @@
      * This version returns null if the element type is not found. It is 
      * intended for internal usage (its used for chaining registries,
      * for example).
  +   *
  +   * @param javaType The Java type.
  +   * @param encodingStyleURI The encoding style.
  +   * @return The XML type for the Java type and encoding style, null
  +   *         if one is not found.
      */
     protected QName queryElementType_(Class javaType, String encodingStyleURI)
     {
  @@ -228,6 +290,11 @@
     /**
      * This version calls the protected method to do the work and if its
      * not found throws an exception. 
  +   *
  +   * @param javaType The Java type.
  +   * @param encodingStyleURI The encoding style.
  +   * @return The XML type for the Java type and encoding style.
  +   * @exception IllegalArgumentException If no XML type is found for the Java type.
      */
     public QName queryElementType(Class javaType, String encodingStyleURI)
       throws IllegalArgumentException
  @@ -250,6 +317,11 @@
      * This version returns null if the Java type is not found. It is 
      * intended for internal usage (its used for chaining registries,
      * for example).
  +   *
  +   * @param elementType The XML type.
  +   * @param encodingStyleURI The encoding style.
  +   * @return The Java type for the XML type and encoding style, null
  +   *         if one is not found.
      */
     protected Class queryJavaType_(QName elementType, String encodingStyleURI)
     {
  @@ -264,6 +336,11 @@
     /**
      * This version calls the protected method to do the work and if its
      * not found throws an exception. 
  +   *
  +   * @param elementType The XML type.
  +   * @param encodingStyleURI The encoding style.
  +   * @return The Java type for the XML type and encoding style.
  +   * @exception IllegalArgumentException If no Java type is found for the XML type.
      */
     public Class queryJavaType(QName elementType, String encodingStyleURI)
       throws IllegalArgumentException
  @@ -282,6 +359,11 @@
       }
     }
   
  +  /**
  +   * Marshalls a Java object using the serializer for its type.
  +   *
  +   * @deprecated ParameterSerializer delegates to other serializers.
  +   */
     public void marshall(String inScopeEncStyle, Class javaType, Object src,
                          Object context, Writer sink, NSStack nsStack,
                          SOAPContext ctx)
  @@ -293,6 +375,11 @@
                  sink, nsStack, this, ctx);
     }
   
  +  /**
  +   * Unmarshalls a Java object using the deserializer for its XML type.
  +   *
  +   * @deprecated ParameterDeserializer delegates to other serializers.
  +   */
     public Bean unmarshall(String inScopeEncStyle, QName elementType,
                            Node src, SOAPContext ctx)
       throws IllegalArgumentException
  @@ -314,12 +401,25 @@
       return ds.unmarshall(inScopeEncStyle, elementType, src, this, ctx);
     }
   
  +  /**
  +   * Creates a key for the registry Hashtables.
  +   *
  +   * @param type The Java type (as a Class) or the XML type (as a QName).
  +   * @param encodingStyleURI The encoding style.
  +   * @return The key.
  +   */
     private static String getKey(Object type, String encodingStyleURI)
     {
       String strObj = String.valueOf(type);
       return new StringBuffer(strObj.length() + 3 + 
encodingStyleURI.length()).append(strObj).append(" + 
").append(encodingStyleURI).toString();
     }
   
  +  /**
  +   * Gets the name of a Java class.
  +   *
  +   * @param javaType The Java class.
  +   * @return The name of the Java class.
  +   */
     protected static String getClassName(Class javaType)
     {
       return javaType != null ? StringUtils.getClassName(javaType) : "null";
  
  
  

--
To unsubscribe, e-mail:   <mailto:soap-dev-unsubscribe@;xml.apache.org>
For additional commands, e-mail: <mailto:soap-dev-help@;xml.apache.org>

Reply via email to