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 2004/03/24 20:44:59 UTC

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

dims        2004/03/24 11:44:59

  Modified:    java/src/org/apache/axis/encoding/ser BeanDeserializer.java
               java/test/wsdl/extensibility ExtensibilityQuery.wsdl
                        ExtensibilityQueryBindingImpl.java
                        ExtensibilityQueryTestCase.java server-deploy.wsdd
  Log:
  Fix for  AXIS-1263 - Mixed content patch to BeanDeserializer
  from jarek gawor
  
  Revision  Changes    Path
  1.65      +43 -0     ws-axis/java/src/org/apache/axis/encoding/ser/BeanDeserializer.java
  
  Index: BeanDeserializer.java
  ===================================================================
  RCS file: /home/cvs/ws-axis/java/src/org/apache/axis/encoding/ser/BeanDeserializer.java,v
  retrieving revision 1.64
  retrieving revision 1.65
  diff -u -r1.64 -r1.65
  --- BeanDeserializer.java	25 Feb 2004 14:02:36 -0000	1.64
  +++ BeanDeserializer.java	24 Mar 2004 19:44:58 -0000	1.65
  @@ -35,6 +35,7 @@
   
   import javax.xml.namespace.QName;
   import java.io.Serializable;
  +import java.io.CharArrayWriter;
   import java.util.Map;
   
   /**
  @@ -49,6 +50,8 @@
       protected static Log log =
           LogFactory.getLog(BeanDeserializer.class.getName());
   
  +    private final CharArrayWriter val = new CharArrayWriter();
  +
       QName xmlType;
       Class javaType;
       protected Map propertyMap = null;
  @@ -147,6 +150,8 @@
                                       DeserializationContext context)
           throws SAXException
       {
  +        handleMixedContent();
  +
           BeanPropertyDescriptor propDesc = null;
           FieldDesc fieldDesc = null;
   
  @@ -446,5 +451,43 @@
               cacheXMLType = xmlType;
           }
           return dSer;
  +    }
  +
  +    public void characters(char[] chars, int start, int end) throws SAXException {
  +        val.write(chars, start, end);
  +    }
  +
  +    public void onEndElement(String namespace, String localName,
  +                             DeserializationContext context) throws SAXException {
  +        handleMixedContent();
  +    }
  +
  +    protected void handleMixedContent() throws SAXException {
  +        BeanPropertyDescriptor propDesc = getAnyPropertyDesc();
  +        if (propDesc == null || val.size() == 0) {
  +            return;
  +        }
  +        String textValue = val.toString().trim();
  +        val.reset();
  +        if (textValue.length() == 0) {
  +            return;
  +        }
  +        try {
  +            MessageElement[] curElements = (MessageElement[]) propDesc.get(value);
  +            int length = 0;
  +            if (curElements != null) {
  +                length = curElements.length;
  +            }
  +            MessageElement[] newElements = new MessageElement[length + 1];
  +            if (curElements != null) {
  +                System.arraycopy(curElements, 0,
  +                        newElements, 0, length);
  +            }
  +            MessageElement thisEl = new org.apache.axis.message.Text(textValue);
  +            newElements[length] = thisEl;
  +            propDesc.set(value, newElements);
  +        } catch (Exception e) {
  +            throw new SAXException(e);
  +        }
       }
   }
  
  
  
  1.3       +37 -0     ws-axis/java/test/wsdl/extensibility/ExtensibilityQuery.wsdl
  
  Index: ExtensibilityQuery.wsdl
  ===================================================================
  RCS file: /home/cvs/ws-axis/java/test/wsdl/extensibility/ExtensibilityQuery.wsdl,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- ExtensibilityQuery.wsdl	15 Dec 2003 20:58:01 -0000	1.2
  +++ ExtensibilityQuery.wsdl	24 Mar 2004 19:44:58 -0000	1.3
  @@ -29,6 +29,22 @@
           </xsd:complexType>
         </xsd:element>
   
  +      <xsd:element name="mixedQuery">
  +        <xsd:complexType>
  +          <xsd:sequence>
  +            <xsd:element name="queryExpression" type="tns:ExtensibilityType"/>
  +          </xsd:sequence>
  +        </xsd:complexType>
  +      </xsd:element>
  +
  +      <xsd:element name="mixedQueryResponse">
  +        <xsd:complexType>
  +          <xsd:sequence>
  +            <xsd:element name="queryResult" type="tns:ExtensibilityType"/>
  +          </xsd:sequence>
  +        </xsd:complexType>
  +      </xsd:element>
  +
       </xsd:schema>
     </types>
   
  @@ -40,11 +56,23 @@
       <part element="tns:queryResponse" name="parameters" />
     </message>
   
  +  <message name="mixedQueryIn">
  +    <part element="tns:mixedQuery" name="parameters" />
  +  </message>
  +
  +  <message name="mixedQueryOut">
  +    <part element="tns:mixedQueryResponse" name="parameters" />
  +  </message>
  +
     <portType name="ExtensibilityQueryPortType">
       <operation name="query">
         <input message="tns:queryIn" />
         <output message="tns:queryOut" />
       </operation>
  +   <operation name="mixedQuery">
  +      <input message="tns:mixedQueryIn" />
  +      <output message="tns:mixedQueryOut" />
  +    </operation>
     </portType>
   
     <binding name="ExtensibilityQueryBinding" type="tns:ExtensibilityQueryPortType">
  @@ -52,6 +80,15 @@
       transport="http://schemas.xmlsoap.org/soap/http" />
       <operation name="query">
         <soap:operation soapAction="query" />
  +      <input>
  +        <soap:body use="literal" />
  +      </input>
  +      <output>
  +        <soap:body use="literal" />
  +      </output>
  +    </operation>
  +    <operation name="mixedQuery">
  +      <soap:operation soapAction="mixedQuery" />
         <input>
           <soap:body use="literal" />
         </input>
  
  
  
  1.19      +55 -0     ws-axis/java/test/wsdl/extensibility/ExtensibilityQueryBindingImpl.java
  
  Index: ExtensibilityQueryBindingImpl.java
  ===================================================================
  RCS file: /home/cvs/ws-axis/java/test/wsdl/extensibility/ExtensibilityQueryBindingImpl.java,v
  retrieving revision 1.18
  retrieving revision 1.19
  diff -u -r1.18 -r1.19
  --- ExtensibilityQueryBindingImpl.java	18 Jun 2003 23:01:52 -0000	1.18
  +++ ExtensibilityQueryBindingImpl.java	24 Mar 2004 19:44:58 -0000	1.19
  @@ -14,6 +14,7 @@
   import org.apache.axis.encoding.SerializationContext;
   import org.apache.axis.encoding.SerializationContextImpl;
   import org.apache.axis.message.MessageElement;
  +import org.apache.axis.message.Text;
   import org.apache.axis.message.RPCElement;
   import org.apache.axis.message.RPCParam;
   import org.apache.axis.message.SOAPBodyElement;
  @@ -79,5 +80,59 @@
               throw new RemoteException("Failed to get FindBooksQueryExpressionElement. Got: " + obj);
           }
           return result;
  +    }
  +    
  +    public ExtensibilityType mixedQuery(ExtensibilityType query) 
  +    throws RemoteException {
  +    MessageElement [] elements = query.get_any();
  +    if (elements == null) {
  +        throw new RemoteException("No any");
  +    }
  +    if (elements.length != 3) {
  +        throw new RemoteException("Expected: 3 got: " + elements.length +
  +                      " element");
  +    }
  +
  +    String expected = "123  456";
  +    String received = elements[0].toString();
  +
  +    if (!expected.equals(received)) {
  +        throw new RemoteException("Expected: " + expected + 
  +                      " received: " + received);
  +    }
  +
  +    Object obj = null;
  +        try {
  +            obj = elements[1].getObjectValue(BookType.class);
  +        } catch (Exception e) {
  +            throw new RemoteException("Failed to deserialize", e);
  +        }
  +    BookType bookQuery = (BookType)obj;
  +    String subject = bookQuery.getSubject();
  +    if (!"all".equals(subject)) {
  +        throw new RemoteException("ExtensibilityQueryBindingImpl: Book subject query should be all, instead was " + subject);
  +    }
  +
  +    expected = "789";
  +    received = elements[2].toString();
  +    
  +    if (!expected.equals(received)) {
  +        throw new RemoteException("Expected: " + expected + 
  +                      " received: " + received);
  +    }
  +
  +    ExtensibilityType reply = new ExtensibilityType(); 
  +
  +    MessageElement [] replyElements = new MessageElement[2];
  +
  +    BookType book = new BookType();
  +    book.setSubject("gotAll");
  +    QName elementName = _FindBooksQueryExpressionElement.getTypeDesc().getFields()[0].getXmlName();
  +    replyElements[0] = new MessageElement(elementName.getNamespaceURI(), elementName.getLocalPart(), book);
  +    replyElements[1] = new Text("ABCD");
  +    
  +    reply.set_any(replyElements);
  +
  +    return reply;
       }
   }
  
  
  
  1.21      +73 -0     ws-axis/java/test/wsdl/extensibility/ExtensibilityQueryTestCase.java
  
  Index: ExtensibilityQueryTestCase.java
  ===================================================================
  RCS file: /home/cvs/ws-axis/java/test/wsdl/extensibility/ExtensibilityQueryTestCase.java,v
  retrieving revision 1.20
  retrieving revision 1.21
  diff -u -r1.20 -r1.21
  --- ExtensibilityQueryTestCase.java	15 Dec 2003 20:58:01 -0000	1.20
  +++ ExtensibilityQueryTestCase.java	24 Mar 2004 19:44:58 -0000	1.21
  @@ -10,6 +10,7 @@
   import org.apache.axis.client.AdminClient;
   import org.apache.axis.components.logger.LogFactory;
   import org.apache.axis.message.MessageElement;
  +import org.apache.axis.message.Text;
   import org.apache.axis.utils.Options;
   import org.apache.commons.logging.Log;
   import org.apache.log4j.Logger;
  @@ -69,6 +70,78 @@
               assertTrue(queryResult.length == 2); 
               isValid(queryResult[0], "Computer Science", "The Grid"); 
               isValid(queryResult[1], "English", "The Oxford Dictionary"); 
  +        }
  +        catch (Exception e) {
  +            e.printStackTrace();
  +            throw new junit.framework.AssertionFailedError("Exception caught: " + e);
  +        }
  +    }
  +
  +    public void testMixedQuery() {
  +        ExtensibilityQueryPortType binding;
  +        try {
  +            ExtensibilityQueryLocator locator = new ExtensibilityQueryLocator();
  +            binding = locator.getExtensibilityQueryPort();
  +            deployServer();
  +        }
  +        catch (javax.xml.rpc.ServiceException jre) {
  +            throw new junit.framework.AssertionFailedError("JAX-RPC ServiceException caught: " + jre);
  +        } 
  +        catch (Exception e) {
  +            throw new junit.framework.AssertionFailedError("Binding initialization Exception caught: " + e);
  +        }
  +        assertTrue("binding is null", binding != null);
  +
  +        try {
  +        ExtensibilityType expression = new ExtensibilityType(); 
  +
  +        MessageElement [] elements = new MessageElement[4];
  +
  +            elements[0] = new Text("123");
  +        elements[1] = new Text("  456");
  +        
  +            BookType book = new BookType();
  +            book.setSubject("all");
  +            QName elementName = _FindBooksQueryExpressionElement.getTypeDesc().getFields()[0].getXmlName();
  +            elements[2] = new MessageElement(elementName.getNamespaceURI(), elementName.getLocalPart(), book);
  +
  +        elements[3] = new Text("789");
  +
  +            expression.set_any(elements);
  +
  +            // call the operation
  +            ExtensibilityType any = binding.mixedQuery(expression);
  +
  +        if (any == null) {
  +        throw new Exception("No output returned");
  +        }
  +
  +        // validate results
  +            MessageElement [] anyContent = any.get_any();
  +
  +        if (anyContent == null) {
  +        throw new Exception("No any");
  +        }
  +        if (anyContent.length != 2) {
  +        throw new Exception("Expected: 2 got: " + 
  +                    anyContent.length + " element");
  +        }
  +
  +        Object obj = anyContent[0].getObjectValue(BookType.class);
  +        BookType bookQuery = (BookType)obj;
  +        String subject = bookQuery.getSubject();
  +        if (!"gotAll".equals(subject)) {
  +        throw new Exception("Book subject query reply should be gotAll, instead was " + subject);
  +        }
  +
  +        String expected = "ABCD";
  +        String received = anyContent[1].toString();
  +
  +        if (!expected.equals(received)) {
  +        throw new Exception("Expected: " + expected + 
  +                    " received: " + received);
  +        }
  +        
           }
           catch (Exception e) {
               e.printStackTrace();
  
  
  
  1.11      +1 -1      ws-axis/java/test/wsdl/extensibility/server-deploy.wsdd
  
  Index: server-deploy.wsdd
  ===================================================================
  RCS file: /home/cvs/ws-axis/java/test/wsdl/extensibility/server-deploy.wsdd,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- server-deploy.wsdd	15 Dec 2003 20:58:01 -0000	1.10
  +++ server-deploy.wsdd	24 Mar 2004 19:44:58 -0000	1.11
  @@ -22,7 +22,7 @@
           <operation name="query" qname="operNS:query" xmlns:operNS="urn:ExtensibilityQuery" returnQName="retNS:queryResult" xmlns:retNS="urn:ExtensibilityQuery" returnType="rtns:ExtensibilityType" xmlns:rtns="urn:ExtensibilityQuery" >
             <parameter qname="pns:queryExpression" xmlns:pns="urn:ExtensibilityQuery" type="tns:ExtensibilityType" xmlns:tns="urn:ExtensibilityQuery"/>
           </operation>
  -        <parameter name="allowedMethods" value="query"/>
  +        <parameter name="allowedMethods" value="*"/>
           <parameter name="scope" value="Session"/>
   
           <typeMapping