You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by di...@apache.org on 2002/05/10 17:24:31 UTC

cvs commit: xml-axis/java/test/wsdl/extensibility ExtensibilityQueryBindingImpl.java ExtensibilityQueryTestCase.java server-deploy.wsdd

dims        02/05/10 08:24:31

  Modified:    java/src/org/apache/axis/encoding/ser BeanDeserializer.java
                        ElementDeserializer.java
               java/src/org/apache/axis/message RPCHandler.java
               java/test/wsdl/extensibility
                        ExtensibilityQueryBindingImpl.java
                        ExtensibilityQueryTestCase.java server-deploy.wsdd
  Log:
  "minor patches to xsd:any support" from "Thomas Sandholm" <sa...@mcs.anl.gov>
  
  Revision  Changes    Path
  1.24      +8 -3      xml-axis/java/src/org/apache/axis/encoding/ser/BeanDeserializer.java
  
  Index: BeanDeserializer.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/encoding/ser/BeanDeserializer.java,v
  retrieving revision 1.23
  retrieving revision 1.24
  diff -u -r1.23 -r1.24
  --- BeanDeserializer.java	7 May 2002 16:08:49 -0000	1.23
  +++ BeanDeserializer.java	10 May 2002 15:24:31 -0000	1.24
  @@ -92,6 +92,8 @@
       Class javaType;
       protected HashMap propertyMap = new HashMap();
       protected QName prevQName;
  +
  +    public static final String DESERIALIZE_ANY = "DeserializeAny";
       
       /** Type metadata about this class for XML deserialization */
       protected TypeDesc typeDesc = null;
  @@ -212,14 +214,17 @@
           Deserializer dSer = null;
           MessageContext messageContext = context.getMessageContext();
           if (propDesc == null && !messageContext.isEncoded()) {
  -            // try to put unknown elements into an Object[] property
  +            // try to put unknown elements into an Object property
               propDesc = getObjectPropertyDesc(elemQName, context);
               if (propDesc != null) {
  -                dSer = context.getDeserializerForType(elemQName);
  +                Boolean deserializeAny =  (Boolean) messageContext.getProperty(DESERIALIZE_ANY);
  +                if ((deserializeAny != null) && (deserializeAny.booleanValue())) {
  +                  dSer = context.getDeserializerForType(elemQName);
  +                }
                   if (dSer == null)  {
                       qn = Constants.XSD_ANYTYPE;
                       // make sure that the Element Deserializer deserializes the current element and not the child
  -                    messageContext.setProperty("DeserializeCurrentElement", Boolean.TRUE);
  +                    messageContext.setProperty(ElementDeserializer.DESERIALIZE_CURRENT_ELEMENT, Boolean.TRUE);
                   } else {
                       qn = elemQName;
                   }
  
  
  
  1.5       +5 -2      xml-axis/java/src/org/apache/axis/encoding/ser/ElementDeserializer.java
  
  Index: ElementDeserializer.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/encoding/ser/ElementDeserializer.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- ElementDeserializer.java	7 May 2002 16:08:50 -0000	1.4
  +++ ElementDeserializer.java	10 May 2002 15:24:31 -0000	1.5
  @@ -92,6 +92,9 @@
       protected static Log log =
           LogFactory.getLog(ElementDeserializer.class.getName());
   
  +   public static final String DESERIALIZE_CURRENT_ELEMENT = "DeserializeCurrentElement";
  +   public static final String SERIALIZE_CURRENT_ELEMENT = "SerializeCurrentElement";
  +
       public final void onEndElement(String namespace, String localName,
                                      DeserializationContext context)
           throws SAXException
  @@ -100,10 +103,10 @@
               MessageElement msgElem = context.getCurElement();
               if ( msgElem != null ) {
                   MessageContext messageContext = context.getMessageContext();
  -                Boolean currentElement = (Boolean) messageContext.getProperty("DeserializeCurrentElement");
  +                Boolean currentElement = (Boolean) messageContext.getProperty(DESERIALIZE_CURRENT_ELEMENT);
                   if (currentElement != null && currentElement.booleanValue()) {
                       value = msgElem.getAsDOM();
  -                    messageContext.setProperty("SerializeCurrentElement", Boolean.FALSE);
  +                    messageContext.setProperty(SERIALIZE_CURRENT_ELEMENT, Boolean.FALSE);
                       return;
                   }
                   ArrayList children = msgElem.getChildren();
  
  
  
  1.38      +6 -4      xml-axis/java/src/org/apache/axis/message/RPCHandler.java
  
  Index: RPCHandler.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/message/RPCHandler.java,v
  retrieving revision 1.37
  retrieving revision 1.38
  diff -u -r1.37 -r1.38
  --- RPCHandler.java	9 May 2002 18:25:17 -0000	1.37
  +++ RPCHandler.java	10 May 2002 15:24:31 -0000	1.38
  @@ -219,10 +219,12 @@
           if ((type == null) && (namespace != null) && (!namespace.equals(""))) {
               dser = context.getDeserializerForType(qname);
           }
  -        if ((type != null) && (dser == null)) {
  -            dser = context.getDeserializerForType(type);
  -        } else {
  -            dser = new DeserializerImpl();
  +        if (dser == null) {
  +          if (type != null) {
  +              dser = context.getDeserializerForType(type);
  +          } else {
  +              dser = new DeserializerImpl();
  +          }
           }
   
           if (dser == null) {
  
  
  
  1.3       +86 -2     xml-axis/java/test/wsdl/extensibility/ExtensibilityQueryBindingImpl.java
  
  Index: ExtensibilityQueryBindingImpl.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/test/wsdl/extensibility/ExtensibilityQueryBindingImpl.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- ExtensibilityQueryBindingImpl.java	8 May 2002 13:04:46 -0000	1.2
  +++ ExtensibilityQueryBindingImpl.java	10 May 2002 15:24:31 -0000	1.3
  @@ -8,13 +8,53 @@
   import java.util.Calendar;
   import javax.xml.rpc.namespace.QName;
   
  +
  +import org.apache.axis.AxisEngine;
  +import org.apache.axis.server.AxisServer;
  +import org.apache.axis.Message;
  +import org.apache.axis.MessageContext;
  +import org.apache.axis.message.SOAPEnvelope;
  +import org.apache.axis.message.SOAPBodyElement;
  +import org.apache.axis.message.RPCParam;
  +import org.apache.axis.message.RPCElement;
  +import org.apache.axis.encoding.SerializationContextImpl;
  +import org.apache.axis.encoding.SerializationContext;
  +import org.apache.axis.encoding.DeserializationContext;
  +import org.apache.axis.encoding.DeserializationContextImpl;
  +import org.apache.axis.encoding.ser.BeanDeserializer;
  +import org.apache.axis.utils.XMLUtils;
  +import org.apache.axis.client.Call;
  +import org.apache.commons.logging.Log;
  +import org.apache.commons.logging.LogFactory;
  +
  +import org.w3c.dom.Element;
  +import org.w3c.dom.Document;
  +import org.w3c.dom.NodeList;
  +import org.w3c.dom.Node;
  +import org.xml.sax.InputSource;
  +
  +import javax.xml.rpc.namespace.QName;
  +import java.io.Reader;
  +import java.io.StringWriter;
  +import java.io.StringReader;
  +import java.util.Calendar;
  +import java.util.Vector;
  +import java.rmi.RemoteException;
  +
   public class ExtensibilityQueryBindingImpl implements ExtensibilityQueryBinding {
       private final static String[] books = new String[] { "The Grid", "The Oxford Dictionary" }; 
       private final static String[] subjects = new String[] { "Computer Science", "English" }; 
   
  -    public ExtensibilityType query(ExtensibilityType query) throws java.rmi.RemoteException {
  +    public ExtensibilityType query(ExtensibilityType query) throws RemoteException {
           ExtensibilityType result = new ExtensibilityType();
  -        Object obj = query.getAny();
  +        Element element = (Element) query.getAny();
  +        Object obj = null;
  +        try {
  +            obj = ObjectSerializer.toObject(element);
  +        } catch (Exception e) {
  +            throw new RemoteException("Failed to deserialize any to object: " + e);
  +        }
  +        
           if (obj instanceof BookType) {
               BookType bookQuery = (BookType) obj;
               String subject = bookQuery.getSubject();
  @@ -33,7 +73,51 @@
               }
               resultList.setResult(queryResult);
               result.setAny(resultElement);
  +        } else {
  +            throw new RemoteException("Failed to get book type. Got: " + obj.getClass().getName() + ":" + obj.toString());
           }
           return result;
  +    }
  +}
  +
  +class ObjectSerializer {
  +
  +    static Log logger =
  +              LogFactory.getLog(ObjectSerializer.class.getName());
  +
  +    static Object toObject(Element element) throws Exception {
  +       MessageContext currentContext = MessageContext.getCurrentContext();
  +       MessageContext messageContext = new MessageContext(currentContext.getAxisEngine()); 
  +       messageContext.setTypeMappingRegistry(currentContext.getTypeMappingRegistry());
  +       messageContext.setEncodingStyle("");
  +       messageContext.setProperty(Call.SEND_TYPE_ATTR, Boolean.FALSE);
  +       SOAPEnvelope message = new SOAPEnvelope();
  +       Document doc = XMLUtils.newDocument();
  +       Element operationWrapper = doc.createElementNS("urn:operationNS","operation"); 
  +       doc.appendChild(operationWrapper); 
  +       Node node = doc.importNode(element,true);
  +       operationWrapper.appendChild(node);
  +
  +       message.addBodyElement(new SOAPBodyElement(operationWrapper));
  +       
  +       StringWriter stringWriter = new StringWriter(); 
  +       SerializationContext context = new SerializationContextImpl(stringWriter, messageContext);
  +       context.setDoMultiRefs(false);
  +       message.output(context);
  +       stringWriter.close();
  +       String messageString = stringWriter.getBuffer().toString();
  +       logger.debug(messageString);
  +       Reader reader = new StringReader(messageString);
  +       messageContext.setProperty(BeanDeserializer.DESERIALIZE_ANY, Boolean.TRUE);
  +       DeserializationContext deserializer = new DeserializationContextImpl(new InputSource(reader),
  +                                                                           messageContext, 
  +                                                                           Message.REQUEST);
  +       deserializer.parse();
  +       SOAPEnvelope env = deserializer.getEnvelope();
  +       
  +       RPCElement rpcElem = (RPCElement)env.getFirstBody();
  +       Vector parameters = rpcElem.getParams();
  +       RPCParam param = (RPCParam) parameters.get(0);
  +       return param.getValue();
       }
   }
  
  
  
  1.3       +3 -0      xml-axis/java/test/wsdl/extensibility/ExtensibilityQueryTestCase.java
  
  Index: ExtensibilityQueryTestCase.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/test/wsdl/extensibility/ExtensibilityQueryTestCase.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- ExtensibilityQueryTestCase.java	8 May 2002 13:04:46 -0000	1.2
  +++ ExtensibilityQueryTestCase.java	10 May 2002 15:24:31 -0000	1.3
  @@ -10,9 +10,11 @@
   import org.apache.axis.EngineConfiguration;
   import org.apache.axis.AxisEngine;
   import org.apache.axis.client.AdminClient;
  +import org.apache.axis.client.Stub;
   import org.apache.axis.encoding.TypeMappingRegistry;
   import org.apache.axis.encoding.ser.BeanSerializerFactory;
   import org.apache.axis.encoding.ser.BeanDeserializerFactory;
  +import org.apache.axis.encoding.ser.BeanDeserializer;
   
   import javax.xml.rpc.encoding.TypeMapping;
   import javax.xml.rpc.namespace.QName;
  @@ -45,6 +47,7 @@
               book.setSubject("all");
               bookQuery.setBookQuery(book);
               expression.setAny(bookQuery); 
  +            ((Stub)binding)._setProperty(BeanDeserializer.DESERIALIZE_ANY, Boolean.TRUE);          
               ExtensibilityType any = binding.query(expression);
               ResultListType result = (ResultListType) any.getAny();
               QueryResultType[] queryResult = result.getResult();
  
  
  
  1.3       +9 -7      xml-axis/java/test/wsdl/extensibility/server-deploy.wsdd
  
  Index: server-deploy.wsdd
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/test/wsdl/extensibility/server-deploy.wsdd,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- server-deploy.wsdd	8 May 2002 13:04:46 -0000	1.2
  +++ server-deploy.wsdd	10 May 2002 15:24:31 -0000	1.3
  @@ -34,13 +34,6 @@
           encodingStyle=""
         />
   
  -      <typeMapping
  -        qname="query:bookQuery"
  -        type="java:test.wsdl.extensibility.BookType"
  -        serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"
  -        deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"
  -        encodingStyle=""
  -      />
   
         <typeMapping
           qname="query:QueryResultElement"
  @@ -65,6 +58,15 @@
           deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"
           encodingStyle=""
         />
  +
  +     <typeMapping
  +        qname="query:bookQuery"
  +        type="java:test.wsdl.extensibility.BookType"
  +        serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"
  +        deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"
  +        encodingStyle=""
  +     />
       </service>
  +
   
   </deployment>