⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xmlrpcparser.java

📁 Mofire的JAR压缩包
💻 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 + -