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