📄 xmlrpcparser.java
字号:
// Decompiled by Jad v1.5.8e2. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://kpdus.tripod.com/jad.html
// Decompiler options: packimports(3) fieldsfirst ansi space
// Source File Name: XmlRpcParser.java
package org.kxmlrpc;
import java.io.IOException;
import java.util.Hashtable;
import java.util.Vector;
import org.kobjects.base64.Base64;
import org.kobjects.isodate.IsoDate;
import org.kxml.parser.AbstractXmlParser;
import org.kxml.parser.ParseEvent;
// Referenced classes of package org.kxmlrpc:
// XmlRpcException
public class XmlRpcParser
{
AbstractXmlParser parser;
String methodName;
Vector params;
public XmlRpcParser(AbstractXmlParser parser)
{
params = new Vector();
this.parser = parser;
}
public String getMethodName()
{
return methodName;
}
public Vector getParams()
{
return params;
}
public Object parseResponse()
throws IOException
{
parser.skip();
parser.read(64, "", "methodResponse");
parser.skip();
ParseEvent event = parser.peek();
Object result = null;
if (event.getType() == 64)
if ("fault".equals(event.getName()))
{
parser.read();
Hashtable fault = (Hashtable)parseValue();
parser.skip();
parser.read(16, "", "fault");
result = new XmlRpcException(((Integer)fault.get("faultCode")).intValue(), (String)fault.get("faultString"));
} else
if ("params".equals(event.getName()))
{
parseParams();
if (params.size() > 1)
throw new IOException("too many return parameters");
if (params.size() == 1)
result = params.elementAt(0);
} else
{
throw new IOException("<fault> or <params> expected instead of " + event);
}
parser.skip();
parser.read(16, "", "methodResponse");
parser.skip();
parser.read(8, null, null);
return result;
}
void parseParams()
throws IOException
{
parser.read(64, "", "params");
parser.skip();
for (; parser.peek().getType() != 16; parser.skip())
{
parser.read(64, "", "param");
params.addElement(parseValue());
parser.skip();
parser.read(16, "", "param");
}
parser.read(16, "", "params");
parser.skip();
}
Object parseValue()
throws IOException
{
Object result = null;
parser.skip();
parser.read(64, "", "value");
parser.skip();
if (parser.peek().getType() != 64)
{
result = parser.readText();
} else
{
ParseEvent event = parser.read(64, "", null);
String name = event.getName();
if (name.equals("string"))
result = parser.readText();
else
if (name.equals("i4") || name.equals("int"))
result = new Integer(Integer.parseInt(parser.readText().trim()));
else
if (name.equals("boolean"))
result = new Boolean(parser.readText().trim().equals("1"));
else
if (name.equals("dateTime.iso8601"))
result = IsoDate.stringToDate(parser.readText(), 3);
else
if (name.equals("base64"))
result = Base64.decode(parser.readText());
else
if (name.equals("struct"))
result = parseStruct();
else
if (name.equals("array"))
result = parseArray();
else
if (name.equals("double"))
result = parser.readText();
parser.read(16, "", name);
parser.skip();
}
parser.read(16, "", "value");
return result;
}
Hashtable parseStruct()
throws IOException
{
Hashtable h = new Hashtable();
parser.skip();
for (; parser.peek().getType() != 16; parser.skip())
{
parser.read(64, "", "member");
parser.skip();
parser.read(64, "", "name");
String name = parser.readText();
parser.read(16, "", "name");
parser.skip();
h.put(name, parseValue());
parser.skip();
parser.read(16, "", "member");
}
return h;
}
Vector parseArray()
throws IOException
{
parser.read(64, "", "data");
parser.skip();
Vector v = new Vector();
parser.skip();
for (; parser.peek().getType() != 16; parser.skip())
v.addElement(parseValue());
parser.read(16, "", "data");
parser.skip();
return v;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -