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 2007/05/25 05:35:12 UTC

svn commit: r541524 - in /webservices/axis2/trunk/java/modules: adb/src/org/apache/axis2/rpc/receivers/ integration/test/org/apache/axis2/integration/ integration/test/org/apache/axis2/rpc/ java2wsdl/src/org/apache/ws/java2wsdl/ kernel/src/org/apache/a...

Author: dims
Date: Thu May 24 20:35:11 2007
New Revision: 541524

URL: http://svn.apache.org/viewvc?view=rev&rev=541524
Log:
Fix and test case for AXIS2-2706 - ADB client doesn't receive 0-length array of beans

- Make sure minOccurs is set to zero in generated schema for an array. 
- Remove duplicate method getResponseElementForArray
- Enhance local transport to take into account the action as well in addition to to EPR
- Add getRPCClient method to LocalTestCase and get it working with RPC MessageReceiver.


Added:
    webservices/axis2/trunk/java/modules/integration/test/org/apache/axis2/rpc/AddressBookService.java
    webservices/axis2/trunk/java/modules/integration/test/org/apache/axis2/rpc/AddressServiceTest.java
    webservices/axis2/trunk/java/modules/integration/test/org/apache/axis2/rpc/Entry.java
Modified:
    webservices/axis2/trunk/java/modules/adb/src/org/apache/axis2/rpc/receivers/RPCUtil.java
    webservices/axis2/trunk/java/modules/integration/test/org/apache/axis2/integration/LocalTestCase.java
    webservices/axis2/trunk/java/modules/java2wsdl/src/org/apache/ws/java2wsdl/SchemaGenerator.java
    webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/local/LocalTransportReceiver.java
    webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/local/LocalTransportSender.java

Modified: webservices/axis2/trunk/java/modules/adb/src/org/apache/axis2/rpc/receivers/RPCUtil.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/adb/src/org/apache/axis2/rpc/receivers/RPCUtil.java?view=diff&rev=541524&r1=541523&r2=541524
==============================================================================
--- webservices/axis2/trunk/java/modules/adb/src/org/apache/axis2/rpc/receivers/RPCUtil.java (original)
+++ webservices/axis2/trunk/java/modules/adb/src/org/apache/axis2/rpc/receivers/RPCUtil.java Thu May 24 20:35:11 2007
@@ -30,6 +30,7 @@
 import java.lang.reflect.Method;
 import java.util.Collection;
 import java.util.Iterator;
+import java.util.Arrays;
 /*
 * Copyright 2004,2005 The Apache Software Foundation.
 *
@@ -136,24 +137,6 @@
         }
     }
 
-    public static OMElement getResponseElementForArray(QName resname, Object [] objs,
-                                                       boolean qualified,
-                                                       TypeTable typeTable) {
-        if (qualified) {
-            return BeanUtil.getOMElement(resname, objs,
-                                         new QName(resname.getNamespaceURI(),
-                                                   RETURN_WRAPPER,
-                                                   resname.getPrefix()),
-                                         qualified,
-                                         typeTable);
-        } else {
-            return BeanUtil.getOMElement(resname, objs,
-                                         new QName(RETURN_WRAPPER),
-                                         qualified,
-                                         typeTable);
-        }
-    }
-
     public static void processResponse(Object resObject,
                                        AxisService service,
                                        Method method,
@@ -165,34 +148,41 @@
     ) throws Exception {
         QName elementQName = outMessage.getAxisMessage().getElementQName();
         if (resObject == null) {
-            QName resName;
-            if (service.isElementFormDefault()) {
-                resName = new QName(service.getSchematargetNamespace(),
-                                    RETURN_WRAPPER,
-                                    service.getSchematargetNamespacePrefix());
-            } else {
-                resName = new QName(RETURN_WRAPPER);
-            }
-            XMLStreamReader xr = new NullXMLStreamReader(resName);
-            StreamWrapper parser = new StreamWrapper(xr);
-            StAXOMBuilder stAXOMBuilder =
-                    OMXMLBuilderFactory.createStAXOMBuilder(
-                            OMAbstractFactory.getSOAP11Factory(), parser);
             ns = fac.createOMNamespace(service.getSchematargetNamespace(),
                                        service.getSchematargetNamespacePrefix());
             OMElement bodyChild = fac.createOMElement(method.getName() + "Response", ns);
-            bodyChild.addChild(stAXOMBuilder.getDocumentElement());
             envelope.getBody().addChild(bodyChild);
         } else {
             if (resObject instanceof Object[]) {
-                QName resName = new QName(elementQName.getNamespaceURI(),
-                                          method.getName() + "Response",
-                                          elementQName.getPrefix());
-                OMElement bodyChild = RPCUtil.getResponseElement(resName,
-                                                                 (Object[])resObject,
-                                                                 service.isElementFormDefault(),
-                                                                 service.getTypeTable());
-                envelope.getBody().addChild(bodyChild);
+                if(Array.getLength(resObject)==0){
+                    QName resName;
+                    if (service.isElementFormDefault()) {
+                        resName = new QName(service.getSchematargetNamespace(),
+                                            RETURN_WRAPPER,
+                                            service.getSchematargetNamespacePrefix());
+                    } else {
+                        resName = new QName(RETURN_WRAPPER);
+                    }
+                    XMLStreamReader xr = new NullXMLStreamReader(resName);
+                    StreamWrapper parser = new StreamWrapper(xr);
+                    StAXOMBuilder stAXOMBuilder =
+                            OMXMLBuilderFactory.createStAXOMBuilder(
+                                    OMAbstractFactory.getSOAP11Factory(), parser);
+                    ns = fac.createOMNamespace(service.getSchematargetNamespace(),
+                                               service.getSchematargetNamespacePrefix());
+                    OMElement bodyChild = fac.createOMElement(method.getName() + "Response", ns);
+                    bodyChild.addChild(stAXOMBuilder.getDocumentElement());
+                    envelope.getBody().addChild(bodyChild);
+                } else {
+                    QName resName = new QName(elementQName.getNamespaceURI(),
+                                              method.getName() + "Response",
+                                              elementQName.getPrefix());
+                    OMElement bodyChild = RPCUtil.getResponseElement(resName,
+                                                                     (Object[])resObject,
+                                                                     service.isElementFormDefault(),
+                                                                     service.getTypeTable());
+                    envelope.getBody().addChild(bodyChild);
+                }
             } else {
                 if (resObject.getClass().isArray()) {
                     int length = Array.getLength(resObject);
@@ -210,7 +200,7 @@
                     QName resName = new QName(elementQName.getNamespaceURI(),
                                               method.getName() + "Response",
                                               elementQName.getPrefix());
-                    OMElement bodyChild = RPCUtil.getResponseElementForArray(resName,
+                    OMElement bodyChild = RPCUtil.getResponseElement(resName,
                                                                              objArray,
                                                                              service.isElementFormDefault(),
                                                                              service.getTypeTable());

Modified: webservices/axis2/trunk/java/modules/integration/test/org/apache/axis2/integration/LocalTestCase.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/integration/test/org/apache/axis2/integration/LocalTestCase.java?view=diff&rev=541524&r1=541523&r2=541524
==============================================================================
--- webservices/axis2/trunk/java/modules/integration/test/org/apache/axis2/integration/LocalTestCase.java (original)
+++ webservices/axis2/trunk/java/modules/integration/test/org/apache/axis2/integration/LocalTestCase.java Thu May 24 20:35:11 2007
@@ -16,6 +16,7 @@
 import junit.framework.TestCase;
 import org.apache.axis2.AxisFault;
 import org.apache.axis2.Constants;
+import org.apache.axis2.rpc.client.RPCServiceClient;
 import org.apache.axis2.receivers.RawXMLINOutMessageReceiver;
 import org.apache.axis2.client.Options;
 import org.apache.axis2.client.ServiceClient;
@@ -52,6 +53,8 @@
         // Configuration - server side
         serverConfig = new AxisConfiguration();
         LocalTransportReceiver.CONFIG_CONTEXT = new ConfigurationContext(serverConfig);
+        LocalTransportReceiver.CONFIG_CONTEXT.setServicePath("services");
+        LocalTransportReceiver.CONFIG_CONTEXT.setContextRoot("local:/");
         TransportOutDescription tOut = new TransportOutDescription(Constants.TRANSPORT_LOCAL);
         tOut.setSender(new LocalTransportSender());
         serverConfig.addTransportOut(tOut);
@@ -139,6 +142,26 @@
         opts.setTransportOut(td);
 
         ServiceClient client = new ServiceClient(clientCtx, null);
+        client.setOptions(opts);
+        return client;
+    }
+
+    /**
+     * Get a pre-initialized ServiceClient set up to talk to our local
+     * server.  If you want to set options, call this and then use getOptions()
+     * on the return.
+     *
+     * @return a ServiceClient, pre-initialized to talk using our local sender
+     * @throws AxisFault if there's a problem
+     */
+    protected RPCServiceClient getRPCClient() throws AxisFault {
+        TransportOutDescription td = new TransportOutDescription("local");
+        td.setSender(sender);
+
+        Options opts = new Options();
+        opts.setTransportOut(td);
+
+        RPCServiceClient client = new RPCServiceClient(clientCtx, null);
         client.setOptions(opts);
         return client;
     }

Added: webservices/axis2/trunk/java/modules/integration/test/org/apache/axis2/rpc/AddressBookService.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/integration/test/org/apache/axis2/rpc/AddressBookService.java?view=auto&rev=541524
==============================================================================
--- webservices/axis2/trunk/java/modules/integration/test/org/apache/axis2/rpc/AddressBookService.java (added)
+++ webservices/axis2/trunk/java/modules/integration/test/org/apache/axis2/rpc/AddressBookService.java Thu May 24 20:35:11 2007
@@ -0,0 +1,65 @@
+/*
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.axis2.rpc;
+
+import java.util.HashMap;
+
+public class AddressBookService {
+
+    private static HashMap entries = new HashMap();
+
+    /**
+     * Add an Entry to the Address Book
+     *
+     * @param entry
+     */
+    public int addEntry(Entry entry) {
+        this.entries.put(entry.getName(), entry);
+        return entries.size();
+    }
+
+    /**
+     * Search an address of a person
+     *
+     * @param name the name of the person whose address needs to be found
+     * @return return the address entry of the person.
+     */
+    public Entry findEntry(String name) {
+        return (Entry) this.entries.get(name);
+    }
+
+    public Entry[] getEntries1() {
+        return new Entry[]{createEntry(), createEntry()};
+    }
+
+    public Entry[] getEntries2() {
+        return new Entry[0];
+    }
+
+    public Entry[] getEntries3() {
+        return null;
+    }
+
+    private Entry createEntry() {
+        Entry entry = new Entry();
+        entry.setName("John Normandy");
+        entry.setStreet("555 Broadway");
+        entry.setCity("Cambridge");
+        entry.setState("MA");
+        entry.setPostalCode("01234");
+        return entry;
+    }
+
+}

Added: webservices/axis2/trunk/java/modules/integration/test/org/apache/axis2/rpc/AddressServiceTest.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/integration/test/org/apache/axis2/rpc/AddressServiceTest.java?view=auto&rev=541524
==============================================================================
--- webservices/axis2/trunk/java/modules/integration/test/org/apache/axis2/rpc/AddressServiceTest.java (added)
+++ webservices/axis2/trunk/java/modules/integration/test/org/apache/axis2/rpc/AddressServiceTest.java Thu May 24 20:35:11 2007
@@ -0,0 +1,131 @@
+package org.apache.axis2.rpc;
+
+import org.apache.axis2.integration.LocalTestCase;
+import org.apache.axis2.rpc.client.RPCServiceClient;
+import org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver;
+import org.apache.axis2.rpc.receivers.RPCMessageReceiver;
+import org.apache.axis2.addressing.EndpointReference;
+import org.apache.axis2.client.Options;
+import org.apache.axis2.description.WSDL2Constants;
+import org.apache.axis2.receivers.RawXMLINOutMessageReceiver;
+
+import javax.xml.namespace.QName;
+
+public class AddressServiceTest extends LocalTestCase
+{
+    protected void setUp() throws Exception {
+        super.setUp();
+        serverConfig.addMessageReceiver(WSDL2Constants.MEP_URI_IN_ONLY,
+                                        new RPCInOnlyMessageReceiver());
+        serverConfig.addMessageReceiver(WSDL2Constants.MEP_URI_IN_OUT,
+                                        new RPCMessageReceiver());
+        deployClassAsService("AddressBookService", AddressBookService.class);
+    }
+    
+    public void testAddAndFetchEntry() throws Exception {
+        QName opAddEntry = new QName("http://rpc.axis2.apache.org/xsd", "addEntry");
+
+        Entry entry = new Entry();
+
+        entry.setName("Abby Cadabby");
+        entry.setStreet("Sesame Street");
+        entry.setCity("Sesame City");
+        entry.setState("Sesame State");
+        entry.setPostalCode("11111");
+
+        // Constructing the arguments array for the method invocation
+        Object[] opAddEntryArgs = new Object[] { entry };
+
+        // Invoking the method
+        RPCServiceClient serviceClient = getRPCClient();
+        Options options = serviceClient.getOptions();
+        EndpointReference targetEPR = new EndpointReference(
+                "local://services/AddressBookService");
+        options.setTo(targetEPR);
+        options.setAction("addEntry");
+
+        Object[] ret = serviceClient.invokeBlocking(opAddEntry, opAddEntryArgs, new Class[]{Integer.class});
+        assertEquals(ret[0], new Integer(1));
+
+        QName opFindEntry = new QName("http://rpc.axis2.apache.org/xsd", "findEntry");
+        String name = "Abby Cadabby";
+
+        Object[] opFindEntryArgs = new Object[] { name };
+        Class[] returnTypes = new Class[] { Entry.class };
+
+        RPCServiceClient serviceClient2 = getRPCClient();
+        Options options2 = serviceClient2.getOptions();
+        EndpointReference targetEPR2 = new EndpointReference(
+                "local://services/AddressBookService");
+        options2.setTo(targetEPR2);
+        options2.setAction("findEntry");
+        Object[] response = serviceClient2.invokeBlocking(opFindEntry,
+                opFindEntryArgs, returnTypes);
+
+        Entry result = (Entry) response[0];
+        assertNotNull(result);
+
+        System.out.println("Name   :" + result.getName());
+        System.out.println("Street :" + result.getStreet());
+        System.out.println("City   :" + result.getCity());
+        System.out.println("State  :" + result.getState());
+        System.out.println("Postal Code :" + result.getPostalCode());
+    }
+
+    public void testEntry1() throws Exception {
+        QName opAddEntry = new QName("http://rpc.axis2.apache.org/xsd", "getEntries1");
+
+        Object[] opAddEntryArgs = new Object[] { };
+
+        // Invoking the method
+        RPCServiceClient serviceClient = getRPCClient();
+        Options options = serviceClient.getOptions();
+        EndpointReference targetEPR = new EndpointReference(
+                "local://services/AddressBookService");
+        options.setTo(targetEPR);
+        options.setAction("getEntries1");
+
+        Object[] result = serviceClient.invokeBlocking(opAddEntry, opAddEntryArgs, new Class[]{Entry[].class});
+        assertNotNull(result);
+        Entry[] entries = (Entry[]) result[0];
+        assertEquals(entries.length, 2);
+    }
+
+    public void testEntry2() throws Exception {
+        QName opAddEntry = new QName("http://rpc.axis2.apache.org/xsd", "getEntries2");
+
+        Object[] opAddEntryArgs = new Object[] { };
+
+        // Invoking the method
+        RPCServiceClient serviceClient = getRPCClient();
+        Options options = serviceClient.getOptions();
+        EndpointReference targetEPR = new EndpointReference(
+                "local://services/AddressBookService");
+        options.setTo(targetEPR);
+        options.setAction("getEntries2");
+
+        Object[] result = serviceClient.invokeBlocking(opAddEntry, opAddEntryArgs, new Class[]{Entry[].class});
+        assertNotNull(result);
+        Entry[] entries = (Entry[]) result[0];
+        assertEquals(entries.length, 1);
+    }
+
+    public void testEntry3() throws Exception {
+        QName opAddEntry = new QName("http://rpc.axis2.apache.org/xsd", "getEntries3");
+
+        Object[] opAddEntryArgs = new Object[] { };
+
+        // Invoking the method
+        RPCServiceClient serviceClient = getRPCClient();
+        Options options = serviceClient.getOptions();
+        EndpointReference targetEPR = new EndpointReference(
+                "local://services/AddressBookService");
+        options.setTo(targetEPR);
+        options.setAction("getEntries3");
+
+        Object[] result = serviceClient.invokeBlocking(opAddEntry, opAddEntryArgs, new Class[]{Entry[].class});
+        assertNotNull(result);
+        Entry[] entries = (Entry[]) result[0];
+        assertEquals(entries.length, 0);
+    }
+}

Added: webservices/axis2/trunk/java/modules/integration/test/org/apache/axis2/rpc/Entry.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/integration/test/org/apache/axis2/rpc/Entry.java?view=auto&rev=541524
==============================================================================
--- webservices/axis2/trunk/java/modules/integration/test/org/apache/axis2/rpc/Entry.java (added)
+++ webservices/axis2/trunk/java/modules/integration/test/org/apache/axis2/rpc/Entry.java Thu May 24 20:35:11 2007
@@ -0,0 +1,55 @@
+package org.apache.axis2.rpc;
+
+public class Entry {
+
+    private String name = null;
+
+    private String street = null;
+
+    private String city = null;
+
+    private String state = null;
+
+    private String postalCode = null;
+
+    public String getCity() {
+        return city;
+    }
+
+    public void setCity(String city) {
+        this.city = city;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getPostalCode() {
+        return postalCode;
+    }
+
+    public void setPostalCode(String postalCode) {
+        this.postalCode = postalCode;
+    }
+
+    public String getState() {
+        return state;
+    }
+
+    public void setState(String state) {
+        this.state = state;
+    }
+
+    public String getStreet() {
+        return street;
+    }
+
+    public void setStreet(String street) {
+        this.street = street;
+    }
+
+}

Modified: webservices/axis2/trunk/java/modules/java2wsdl/src/org/apache/ws/java2wsdl/SchemaGenerator.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/java2wsdl/src/org/apache/ws/java2wsdl/SchemaGenerator.java?view=diff&rev=541524&r1=541523&r2=541524
==============================================================================
--- webservices/axis2/trunk/java/modules/java2wsdl/src/org/apache/ws/java2wsdl/SchemaGenerator.java (original)
+++ webservices/axis2/trunk/java/modules/java2wsdl/src/org/apache/ws/java2wsdl/SchemaGenerator.java Thu May 24 20:35:11 2007
@@ -604,7 +604,7 @@
 
         if (isArray) {
             elt1.setMaxOccurs(Long.MAX_VALUE);
-            elt1.setMinOccurs(1);
+            elt1.setMinOccurs(0);
         }
         elt1.setNillable(true);
     }

Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/local/LocalTransportReceiver.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/local/LocalTransportReceiver.java?view=diff&rev=541524&r1=541523&r2=541524
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/local/LocalTransportReceiver.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/local/LocalTransportReceiver.java Thu May 24 20:35:11 2007
@@ -48,7 +48,7 @@
         this.sender = sender;
     }
 
-    public void processMessage(InputStream in, EndpointReference to) throws AxisFault {
+    public void processMessage(InputStream in, EndpointReference to, String action) throws AxisFault {
         try {
             TransportInDescription tIn = confContext.getAxisConfiguration().getTransportIn(
                     Constants.TRANSPORT_LOCAL);
@@ -62,6 +62,7 @@
             msgCtx.setTransportOut(tOut);
 
             msgCtx.setTo(to);
+            msgCtx.setWSAAction(action);
             msgCtx.setServerSide(true);
             msgCtx.setProperty(MessageContext.TRANSPORT_OUT, sender.getResponse());
 

Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/local/LocalTransportSender.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/local/LocalTransportSender.java?view=diff&rev=541524&r1=541523&r2=541524
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/local/LocalTransportSender.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/local/LocalTransportSender.java Thu May 24 20:35:11 2007
@@ -110,7 +110,7 @@
             response = new ByteArrayOutputStream();
 
             LocalTransportReceiver localTransportReceiver = new LocalTransportReceiver(this);
-            localTransportReceiver.processMessage(in, msgContext.getTo());
+            localTransportReceiver.processMessage(in, msgContext.getTo(), msgContext.getOptions().getAction());
             in.close();
             out.close();
             in = new ByteArrayInputStream(response.toByteArray());



---------------------------------------------------------------------
To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-cvs-help@ws.apache.org