Package org.apache.xmlrpc.test

Source Code of org.apache.xmlrpc.test.ParserTest

package org.apache.xmlrpc.test;

import java.io.IOException;
import java.io.StringReader;
import java.lang.reflect.UndeclaredThrowableException;
import java.text.ParseException;
import java.util.TimeZone;

import junit.framework.TestCase;

import org.apache.xmlrpc.XmlRpcException;
import org.apache.xmlrpc.client.XmlRpcClient;
import org.apache.xmlrpc.client.XmlRpcClientConfigImpl;
import org.apache.xmlrpc.common.XmlRpcHttpRequestConfigImpl;
import org.apache.xmlrpc.common.XmlRpcStreamConfig;
import org.apache.xmlrpc.common.XmlRpcStreamRequestConfig;
import org.apache.xmlrpc.parser.CalendarParser;
import org.apache.xmlrpc.parser.DateParser;
import org.apache.xmlrpc.parser.XmlRpcRequestParser;
import org.apache.xmlrpc.parser.XmlRpcResponseParser;
import org.apache.xmlrpc.util.SAXParsers;
import org.apache.xmlrpc.util.XmlRpcDateTimeDateFormat;
import org.apache.xmlrpc.util.XmlRpcDateTimeFormat;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
import org.xml.sax.XMLReader;


/** Test for the various parsers.
*/
public class ParserTest extends TestCase {
  private Object parseResponse(final String s) throws XmlRpcException, IOException, SAXException {
    return parseResponse(new InputSource(new StringReader(s)));
  }

    private Object parseResponse(InputSource isource) throws XmlRpcException,
            IOException, SAXException {
        XmlRpcStreamRequestConfig config = new XmlRpcClientConfigImpl();
    XmlRpcClient client = new XmlRpcClient();
    XmlRpcResponseParser parser = new XmlRpcResponseParser(config, client.getTypeFactory());
    XMLReader xr = SAXParsers.newXMLReader();
    xr.setContentHandler(parser);
        xr.parse(isource);
    Object o = parser.getResult();
    return o;
    }

    private XmlRpcRequestParser parseRequest(final String s) throws XmlRpcException, IOException, SAXException {
        XmlRpcStreamConfig config = new XmlRpcHttpRequestConfigImpl();
        XmlRpcClient client = new XmlRpcClient();
        XmlRpcRequestParser parser = new XmlRpcRequestParser(config, client.getTypeFactory());
        XMLReader xr = SAXParsers.newXMLReader();
        xr.setContentHandler(parser);
        xr.parse(new InputSource(new StringReader(s)));
        return parser;
    }

  /** Tests, whether strings can be parsed with,
   * or without, the "string" tag.
   */
  public void testStringType() throws Exception {
    final String[] strings = new String[]{
      "3", "<string>3</string>",
      "  <string>3</string>  "
    };
    for (int i = 0;  i < strings.length;  i++) {
      final String s =
        "<?xml version='1.0' encoding='UTF-8'?>\n"
        + "<methodResponse><params><param>\n"
        + "<value>" + strings[i] + "</value></param>\n"
        + "</params></methodResponse>\n";
      Object o = parseResponse(s);
      assertEquals("3", o);
    }
  }

  /** Tests, whether nested arrays can be parsed.
   */
  public void testNestedObjectArrays() throws Exception {
    final String s =
      "<?xml version='1.0' encoding='UTF-8'?>\n"
      + "<methodResponse><params><param>\n"
      + "<value><array><data><value><array>\n"
      + "<data><value>array</value>\n"
      + "<value>string</value></data></array>\n"
      + "</value></data></array></value></param>\n"
      + "</params></methodResponse>\n";
    Object o = parseResponse(s);
    assertTrue(o instanceof Object[]);
    Object[] outer = (Object[]) o;
    assertEquals(1, outer.length);
    o = outer[0];
    assertTrue(o instanceof Object[]);
    Object[] inner = (Object[]) o;
    assertEquals(2, inner.length);
    assertEquals("array", inner[0]);
    assertEquals("string", inner[1]);
  }

  /**
     * Tests, whether a request may omit the <params> tag.
   */
    public void testOptionalParams() throws Exception {
        final String s1 = "<methodResponse/>";
        Object o1 = parseResponse(s1);
        assertNull(o1);

        final String s2 = "<methodResponse><params/></methodResponse>";
        Object o2 = parseResponse(s2);
        assertNull(o2);

        final String s3 = "<methodCall><methodName>foo</methodName></methodCall>";
        XmlRpcRequestParser p3 = parseRequest(s3);
        assertEquals("foo", p3.getMethodName());
        assertNull(p3.getParams());

        final String s4 = "<methodCall><methodName>bar</methodName><params/></methodCall>";
        XmlRpcRequestParser p4 = parseRequest(s4);
        assertEquals("bar", p4.getMethodName());
        assertNotNull(p4.getParams());
        assertTrue(p4.getParams().size() == 0);
    }

    /**
     * Test for XMLRPC-140.
     */
    public void testXMLRPC140() throws Exception {
        DateParser parser = new DateParser(new XmlRpcDateTimeFormat(){
            private static final long serialVersionUID = 0L;
            protected TimeZone getTimeZone() {
                return TimeZone.getDefault();
            }
        }){
            public void setResult(Object pObject){
                try {
                    super.setResult((String) pObject);
                } catch (SAXException e) {
                    throw new UndeclaredThrowableException(e);
                }
            }
        };
        try {
            parser.setResult("20070316T162808Z");
            fail("Expected exception");
        } catch (UndeclaredThrowableException e) {
            SAXParseException spe = (SAXParseException) e.getUndeclaredThrowable();
            ParseException pe = (ParseException) spe.getException();
            assertEquals(11, pe.getErrorOffset());
        }
    }
}
TOP

Related Classes of org.apache.xmlrpc.test.ParserTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.