CVS Update: xmlpull-api-v1/addons/java/xmlrpc/src/org/xmlpull/v1/xmlrpc
Stefan Haustein <[email protected]> Tue, 18 Feb 2003 14:00:44 -0500 (EST)
| Newsgroups | gmane.text.xml.xmlpull.devel |
|---|---|
| Message-ID | <[email protected]> |
haustein 03/02/18 14:00:44
Added: addons/java/xmlrpc/src/org/xmlpull/v1/xmlrpc
XmlRpcParserME.java XmlRpcParser.java
Removed: addons/java/xmlrpc/src/org/xmkpull/v1/xmlrpc
XmlRpcParser.java
Log:
xml-rpc parser namespace fixed, split into ME and SE classes
Revision Changes Path
1.1 xmlpull-api-v1/addons/java/xmlrpc/src/org/xmlpull/v1/xmlrpc/XmlRpcParserME.java
Index: XmlRpcParserME.java
===================================================================
/* -*- c-basic-offset: 4; indent-tabs-mode: nil; -*- //------100-columns-wide------>|*/
// for license please see accompanying LICENSE.txt file (available also at http://www.xmlpull.org/)
package org.xmlpull.v1.xmlrpc;
import java.util.*;
import java.io.*;
import org.xmlpull.v1.*;
/**
* @author Stefan Haustein
*/
public class XmlRpcParserME {
XmlPullParser parser;
/**
* Creates a new XmlRpcParser, using the given XmlPullParser.
*/
public XmlRpcParserME(XmlPullParser parser) {
this.parser = parser;
}
/**
* Parses an XML RPC method call response.
* The return values are collected in a Vector.
*
* @return The return values collected in a Vector.
*/
public Vector parseResponse() throws XmlPullParserException, IOException {
Vector result = new Vector();
parser.nextTag();
parser.require(XmlPullParser.START_TAG, "", "methodResponse");
parser.nextTag();
parser.require(XmlPullParser.START_TAG, "", "params");
while (parser.nextTag() == XmlPullParser.START_TAG) {
parser.require(XmlPullParser.START_TAG, "", "param");
parser.nextTag();
result.addElement(parseValue());
parser.nextTag();
parser.require(XmlPullParser.END_TAG, "", "param");
}
parser.require(XmlPullParser.END_TAG, "", "params");
parser.nextTag();
parser.require(XmlPullParser.END_TAG, "", "methodResponse");
parser.next();
parser.require(XmlPullParser.END_DOCUMENT, null, null);
return result;
}
protected Object parseType(String name) throws IOException, XmlPullParserException {
if (name.equals("double"))
return new Double(parser.nextText());
else if (name.equals("int") || name.equals("i4"))
return new Integer(Integer.parseInt(parser.nextText()));
else if (name.equals("array"))
return parseArray();
else if (name.equals("string"))
return parser.nextText();
else if (name.equals("struct"))
return parseStruct();
else
throw new RuntimeException("unexpected element: " + name);
}
/**
* Parses an XML-RPC value element. Returns the
* content of the element as a corresponding Java object.
* <p>
* <b>precondition:</b> parser is on a "value" start tag<br />
* <b>postcondition:</b> parser is on a "value" end tag</p>
*/
Object parseValue() throws IOException, XmlPullParserException {
parser.require(XmlPullParser.START_TAG, "", "value"); // precondition
parser.next();
Object result;
if (parser.getEventType() == XmlPullParser.END_TAG)
result = "";
else if (parser.getEventType() == XmlPullParser.TEXT) {
result = parser.getText();
parser.nextTag();
}
else {
parser.require(XmlPullParser.START_TAG, "", null);
String name = parser.getName();
result = parseType(name);
parser.require(XmlPullParser.END_TAG, "", name);
parser.nextTag();
}
parser.require(XmlPullParser.END_TAG, "", "value"); // postcond.
return result;
}
/** Parses an XML-RPC array and returns it as a Java Vector
*
* <p>
* <b>Precondition:</b> On "array" start tag<br />
* <b>Postcondition:</b> On "array" end tag
* </p>
*/
Vector parseArray() throws IOException, XmlPullParserException {
Vector v = new Vector();
parser.require(XmlPullParser.START_TAG, "", "array");
parser.nextTag();
parser.require(XmlPullParser.START_TAG, "", "data");
while (parser.nextTag() == XmlPullParser.START_TAG)
v.addElement(parseValue());
parser.require(XmlPullParser.END_TAG, "", "data");
parser.nextTag();
parser.require(XmlPullParser.START_TAG, "", "array");
return v;
}
Hashtable parseStruct() throws IOException, XmlPullParserException {
Hashtable struct = new Hashtable();
parser.require(XmlPullParser.START_TAG, "", "struct");
while (parser.nextTag() == XmlPullParser.START_TAG) {
parser.require(XmlPullParser.START_TAG, "", "member");
parser.nextTag();
parser.require(XmlPullParser.START_TAG, "", "name");
String name = parser.nextText();
parser.require(XmlPullParser.END_TAG, "", "name");
parser.nextTag();
struct.put(name, parseValue());
parser.nextTag();
parser.require(XmlPullParser.END_TAG, "", "member");
}
parser.require(XmlPullParser.END_TAG, "", "struct");
return struct;
}
/*main method, temporarily included for simple testing only
public static void main(String[] argv)
throws IOException, XmlPullParserException {
String test =
"<?xml version=\"1.0\"?>\n"
+ "<methodResponse><params>\n"
+ " <param>\n"
+ " <value><string>South Dakota</string></value>\n"
+ " </param><param>\n"
+ " <value><struct>\n"
+ " <member><name>foo</name><value>bar</value></member>\n"
+ " <member><name>v</name><value><array></array></value></member>\n"
+ " </struct></value>\n"
+ " </param><param>\n"
+ " <value><double>3.14</double></value>\n"
+ " </param>\n"
+ "</params></methodResponse>\n";
System.out.println("test input:\n" + test);
XmlPullParser xp = new org.kxml2.io.KXmlParser();
xp.setInput(new java.io.StringReader(test));
System.out.println(
"parsing result: " + new XmlRpcParser(xp).parseResponse());
}
*/
}
1.1 xmlpull-api-v1/addons/java/xmlrpc/src/org/xmlpull/v1/xmlrpc/XmlRpcParser.java
Index: XmlRpcParser.java
===================================================================
/* -*- c-basic-offset: 4; indent-tabs-mode: nil; -*- //------100-columns-wide------>|*/
// for license please see accompanying LICENSE.txt file (available also at http://www.xmlpull.org/)
package org.xmlpull.v1.xmlrpc;
import org.xmlpull.v1.*;
import java.io.*;
public class XmlRpcParser extends XmlRpcParserME {
public XmlRpcParser(XmlPullParser parser) {
super(parser);
}
protected Object parseType(String name) throws IOException, XmlPullParserException {
if (name.equals("double"))
return new Double(parser.nextText());
else
return super.parseType(name);
}
}
------------------------ Yahoo! Groups Sponsor ---------------------~-->
Get 128 Bit SSL Encryption!
http://us.click.yahoo.com/FpY02D/vN2EAA/xGHJAA/2U_rlB/TM
---------------------------------------------------------------------~->
To unsubscribe from this group, send an email to:
[email protected]
Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/