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

2003-01-08 Thread snichol
snichol 2003/01/08 11:57:24

  Modified:java/src/org/apache/soap/encoding SOAPMappingRegistry.java
  Log:
  Provide mappings so that null DataHandlers can be serialized and
  de-serialized.
  
  Revision  ChangesPath
  1.37  +44 -20
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.36
  retrieving revision 1.37
  diff -u -r1.36 -r1.37
  --- SOAPMappingRegistry.java  28 Nov 2002 00:32:51 -  1.36
  +++ SOAPMappingRegistry.java  8 Jan 2003 19:57:24 -   1.37
  @@ -92,6 +92,7 @@
 private static String soapEncURI = Constants.NS_URI_SOAP_ENC;
   
 private static QName arrayQName = new QName(soapEncURI, "Array");
  +  private static QName dataHandlerQName = new QName(Constants.NS_URI_XML_SOAP, 
"DataHandler");
   
 // create all the standard serializers/deserializers as static vars.
 // these fill into all the various base registries.
  @@ -149,10 +150,10 @@
   Constants.qName1999QName,
   Constants.date1999QName,
   Constants.timeInst1999QName,
  -Constants.object1999QName,
  -Constants.object1999QName,
  -Constants.object1999QName,
  -Constants.object1999QName,
  +dataHandlerQName, // for null DataHandler
  +dataHandlerQName, // for null DataHandler
  +dataHandlerQName, // for null DataHandler
  +dataHandlerQName, // for null DataHandler
   Constants.object1999QName,
 };
   
  @@ -177,10 +178,10 @@
   Constants.qName2000QName,
   Constants.date2000QName,
   Constants.timeInst2000QName,
  -Constants.object2000QName,
  -Constants.object2000QName,
  -Constants.object2000QName,
  -Constants.object2000QName,
  +dataHandlerQName, // for null DataHandler
  +dataHandlerQName, // for null DataHandler
  +dataHandlerQName, // for null DataHandler
  +dataHandlerQName, // for null DataHandler
   Constants.object2000QName,
 };
   
  @@ -205,10 +206,10 @@
   Constants.qName2001QName,
   Constants.date2001QName,
   Constants.timeInst2001QName,
  -Constants.object2001QName,
  -Constants.object2001QName,
  -Constants.object2001QName,
  -Constants.object2001QName,
  +dataHandlerQName, // for null DataHandler
  +dataHandlerQName, // for null DataHandler
  +dataHandlerQName, // for null DataHandler
  +dataHandlerQName, // for null DataHandler
   Constants.object2001QName,
 };
   
  @@ -303,10 +304,10 @@
   qNameSer,
   calSer,
   dateSer,
  -null,
  -null,
  -null,
  -null,
  +null,  // MimeBodyPart
  +null,  // InputStream
  +null,  // DataSource
  +partSer,   // for null DataHandler
   objDeser,
 };
   
  @@ -624,12 +625,23 @@
 protected Serializer querySerializer_(Class javaType,
   String encodingStyleURI)
 {
  -Serializer s = super.querySerializer_(javaType, encodingStyleURI);
  +Serializer s = super.querySerializerNoDefault_(javaType, encodingStyleURI);
   if (s != null) {
 return s;
   }
   if (parent != null) {
  -  s = parent.querySerializer_(javaType, encodingStyleURI);
  +  s = parent.querySerializerNoDefault_(javaType, encodingStyleURI);
  +  if (s != null) {
  +return s;
  +  }
  +}
  +
  +s = super.querySerializerNoDefault_(null, encodingStyleURI);
  +if (s != null) {
  +  return s;
  +}
  +if (parent != null) {
  +  s = parent.querySerializerNoDefault_(null, encodingStyleURI);
 if (s != null) {
   return s;
 }
  @@ -653,16 +665,28 @@
 protected Deserializer queryDeserializer_(QName elementType,
   String encodingStyleURI)
 {
  -Deserializer ds = super.queryDeserializer_(elementType, encodingStyleURI);
  +Deserializer ds = super.queryDeserializerNoDefault_(elementType, 
encodingStyleURI);
   if (ds != null) {
 return ds;
   }
   if (parent != null) {
  -  ds = parent.queryDeserializer_(elementType, encodingStyleURI);
  +  ds = parent.queryDeserializerNoDefault_(elementType, encodingStyleURI);
 if (ds != null) {
   return ds;
 }
   }
  +
  +ds = super.queryDeserializerNoDefault_(null, encodingStyleURI);
  +if (ds != null) {
  +  return ds;
  +}
  +if (parent != null) {
  +  ds = parent.queryDeserializerNoDefault_(null, encodingStyleURI);
  +  if (ds != null) {
  +return ds;
  +  }
  +}
  +
   return null;
 }
   
  
  
  

--
To unsubscribe, e-mail:   
For additional commands, e-mail: 




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

2003-01-08 Thread snichol
snichol 2003/01/08 12:20:44

  Modified:java/src/org/apache/soap/server RPCRouter.java
   java/src/org/apache/soap/util/xml
XMLJavaMappingRegistry.java
  Log:
  Oops.  The previous commit to SOAPMappingRegistry depended on
  uncommitted changes to XMLJavaMappingRegistry.  The changes are used by
  RPCRouter.  I've tested them some.  Although I intended more changes in
  this area, why not just commit what I've got now.
  
  Revision  ChangesPath
  1.19  +23 -1 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.18
  retrieving revision 1.19
  diff -u -r1.18 -r1.19
  --- RPCRouter.java4 Dec 2002 03:33:01 -   1.18
  +++ RPCRouter.java8 Jan 2003 20:20:43 -   1.19
  @@ -10,6 +10,7 @@
   import org.apache.soap.*;
   import org.apache.soap.rpc.*;
   import org.apache.soap.util.StringUtils;
  +import org.apache.soap.encoding.soapenc.SoapEncUtils;
   
   /**
* This class is a transport independent SOAP RPC router. However you
  @@ -18,6 +19,7 @@
* an object you give me). 
*
* @author Sanjiva Weerawarana <[EMAIL PROTECTED]>
  + * @author Scott Nichol ([EMAIL PROTECTED])
*/
   public class RPCRouter {
 public static Call extractCallFromEnvelope (ServiceManager serviceManager,
  @@ -145,7 +147,27 @@
   
   Object ret = m.invoke(targetObject, args);
   Class retType = m.getReturnType();
  -result = new Bean(retType.isPrimitive() ? retType : ret.getClass(), ret);
  +
  +// See if we change return type for polymorphism, doing as little
  +// work as possible in the cases where there is no polymorphism.
  +if (retType != void.class && !retType.isPrimitive()) {
  +  Class retClass = ret.getClass();
  +  if (retClass != retType) {
  +Hashtable props = dd.getProps();
  +if (props != null) {
  +  String val = (String) props.get("PolymorphicSerialization");
  +  if (val != null && SoapEncUtils.decodeBooleanValue(val)) {
  +  Class serClass = call.getSOAPMappingRegistry()
  +   .getCompatibleClassWithSerializer(retClass,
  + 
respEncStyle);
  +  if (serClass != null)
  +retType = serClass;
  +  }
  +}
  +  }
  +}
  +
  +result = new Bean(retType, ret);
 } else {
   // find the class that provides the BSF services (done
   // this way via reflection to avoid a compile-time dependency on BSF)
  
  
  
  1.13  +115 -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.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- XMLJavaMappingRegistry.java   18 Nov 2002 20:19:26 -  1.12
  +++ XMLJavaMappingRegistry.java   8 Jan 2003 20:20:44 -   1.13
  @@ -58,6 +58,7 @@
   package org.apache.soap.util.xml;
   
   import java.io.*;
  +import java.lang.reflect.Array;
   import java.util.*;
   import org.w3c.dom.*;
   import org.apache.soap.util.*;
  @@ -203,6 +204,27 @@
 }
   
 /**
  +   * This version returns null if the serializer is not found. It is
  +   * intended for internal usage (its used for chaining registries,
  +   * for example).  It does not check for a default serializer.
  +   *
  +   * @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 querySerializerNoDefault_(Class javaType,
  +String encodingStyleURI)
  +  {
  +Maps maps = getMapsForEncoding(encodingStyleURI);
  +Object java2XMLKey = "";
  +if (javaType != null)
  +java2XMLKey = javaType;
  +
  +return (Serializer) maps.sReg.get(java2XMLKey);
  +  }
  +
  +  /**
  * This version calls the protected method to do the work and if it's
  * not found throws an exception.
  *
  @@ -252,6 +274,27 @@
 }
   
 /**
  +   * This version returns null if the deserializer is not found. It is
  +   * intended for internal usage (its used for chaining registries,
  +   * for example).  It does not check for a default deserializer.
  +   *
  +   * @param elementType The XML type.
  +   * @param encodingStyleURI The encoding style.
  +   * @return The deserializer for the XML type and encoding style,