Revision: 29
Author: pskink
Date: Wed Aug 22 01:13:10 2012
Log: fixes issues #39 and #40
http://code.google.com/p/android-xmlrpc/source/detail?r=29
Modified:
/trunk/XMLRPC/src/org/xmlrpc/XMLRPCServerTest.java
/trunk/XMLRPC/src/org/xmlrpc/android/XMLRPCServer.java
=======================================
--- /trunk/XMLRPC/src/org/xmlrpc/XMLRPCServerTest.java Sat Oct 22 13:54:04
2011
+++ /trunk/XMLRPC/src/org/xmlrpc/XMLRPCServerTest.java Wed Aug 22 01:13:10
2012
@@ -32,6 +32,31 @@
int i0 = (Integer) params.get(0);
int i1 = (Integer) params.get(1);
server.respond(client, new Object[] {i0 + i1});
+ } else
+ if (name.equals("add1")) {
+ ArrayList<Object> params = call.getParams();
+ // assume "add" method has two Integer params, so no
checks done
+ int i0 = (Integer) params.get(0);
+ int i1 = (Integer) params.get(1);
+ server.respond(client, i0 + i1);
+ } else
+ if (name.equals("test0")) {
+ // returns 3 values: String, int and boolean
+ server.respond(client, "returns 3 values: String, int
and boolean", 0, false);
+ } else
+ if (name.equals("test1")) {
+ // returns 3 values: String, int and boolean
+ Object[] arr = new Object[] {
+ "returns 3 values: String, int and boolean",
1, false
+ };
+ server.respond(client, arr);
+ } else
+ if (name.equals("test2")) {
+ // returns 1 value: an array of String, int and boolean
+ Object[] arr = new Object[] {
+ "returns 1 value: an array of String, int and
boolean", 2, false
+ };
+ server.respond(client, (Object) arr);
} else {
server.respond(client, null);
}
=======================================
--- /trunk/XMLRPC/src/org/xmlrpc/android/XMLRPCServer.java Mon Oct 24
23:13:41 2011
+++ /trunk/XMLRPC/src/org/xmlrpc/android/XMLRPCServer.java Wed Aug 22
01:13:10 2012
@@ -18,12 +18,13 @@
public class XMLRPCServer extends XMLRPCCommon {
+ private static final String CRLF = "\r\n";
private static final String RESPONSE =
- "HTTP/1.1 200 OK\n" +
- "Connection: close\n" +
- "Content-Type: text/xml\n" +
+ "HTTP/1.1 200 OK" + CRLF +
+ "Connection: close" + CRLF +
+ "Content-Type: text/xml" + CRLF +
"Content-Length: ";
- private static final String NEWLINES = "\n\n";
+ private static final String NEWLINES = CRLF + CRLF;
private XMLRPCSerializer iXMLRPCSerializer;
public XMLRPCServer() {
@@ -46,9 +47,9 @@
pullParser.nextTag();
pullParser.require(XmlPullParser.START_TAG, null, Tag.PARAMS);
- pullParser.nextTag(); // <param>
+ pullParser.nextTag(); // possible optional <param> or </params>
- do {
+ while (pullParser.getName().equals(Tag.PARAM)) { // <param>
//Log.d(Tag.LOG, "type=" + pullParser.getEventType() + ", tag=" +
pullParser.getName());
pullParser.require(XmlPullParser.START_TAG, null, Tag.PARAM);
pullParser.nextTag(); // <value>
@@ -59,8 +60,7 @@
pullParser.nextTag();
pullParser.require(XmlPullParser.END_TAG, null, Tag.PARAM);
pullParser.nextTag(); // <param> or </params>
-
- } while (!pullParser.getName().equals(Tag.PARAMS)); // </params>
+ }
return methodCall;
}
@@ -74,8 +74,8 @@
pullParser.setInput(br);
return pullParser;
}
-
- public void respond(Socket socket, Object[] params) throws IOException {
+
+ public void respond(Socket socket, Object... params) throws IOException {
String content = methodResponse(params);
String response = RESPONSE + (content.length()) + NEWLINES + content;