You are viewing a plain text version of this content. The canonical link for it is here.
Posted to xmlrpc-dev@ws.apache.org by "Jochen Wiedmann (JIRA)" <xm...@ws.apache.org> on 2006/04/12 11:10:22 UTC
[jira] Zugewiesen: (XMLRPC-79) Problems when enabling gzip
compression
[ http://issues.apache.org/jira/browse/XMLRPC-79?page=all ]
Jochen Wiedmann reassigned XMLRPC-79:
-------------------------------------
Assign To: Jochen Wiedmann
> Problems when enabling gzip compression
> ---------------------------------------
>
> Key: XMLRPC-79
> URL: http://issues.apache.org/jira/browse/XMLRPC-79
> Project: XML-RPC
> Type: Bug
> Components: Releases
> Versions: 3.0a1
> Environment: Linux Red Hat
> Java 1.4.2 and 1.5(1.5.0_06)
> Apache Tomcat 5.0.19, 5.5.9
> Reporter: Inaki
> Assignee: Jochen Wiedmann
> Attachments: MyXmlRpcClient.java
>
> I am having problems when enabling the request/response compression
> mode. I am using xmlrpc-3.0a1.jar for both my client and my server. In
> the client I run the following:
> config = new XmlRpcClientConfigImpl();
> config.setServerURL(serverURL);
> // enables faster and memory saving streaming mode
> config.setContentLengthOptional(true);
> // enable vendor extensions to allow compression, data types support ...
> config.setEnabledForExtensions(true);
> config.setGzipCompressing(true); // requests gzip compression
> config.setGzipRequesting(true); // requests server to gzip response
>
> client = new XmlRpcClient();
> client.setConfig(config);
> client.execute(...)
> [...]
> In the server I make use of the XmlRpcServlet class
> (org.apache.xmlrpc.webserver package) embedded into Tomcat 5 and I have
> set enabledForExtensions to true within the init parameters of the
> servlet (web.xml file)
> When I run a dummy request as it is described in the code above I get
> the following exception:
> org.apache.xmlrpc.XmlRpcException: Failed to parse XML-RPC request:
> Content is not allowed in prolog.
> at org.apache.xmlrpc.client.XmlRpcStreamTransport.readResponse
> (XmlRpcStreamTransport.java:274)
> at org.apache.xmlrpc.client.XmlRpcStreamTransport.sendRequest
> (XmlRpcStreamTransport.java:216)
> at org.apache.xmlrpc.client.XmlRpcClientWorker.execute
> (XmlRpcClientWorker.java:53)
> at org.apache.xmlrpc.client.XmlRpcClient.execute(XmlRpcClient.java:166)
> at org.apache.xmlrpc.client.XmlRpcClient.execute(XmlRpcClient.java:136)
> at org.apache.xmlrpc.client.XmlRpcClient.execute(XmlRpcClient.java:125)
> at esavo.voql.xmlrpc.MyXmlRpcClient.execute(MyXmlRpcClient.java:54)
> at esavo.voql.xmlrpc.MyXmlRpcClient.main(MyXmlRpcClient.java:74)
> If I comment the gzip compression out, both on the request and the
> response, my test works fine:
> config = new XmlRpcClientConfigImpl();
> config.setServerURL(serverURL);
> // enables faster and memory saving streaming mode
> config.setContentLengthOptional(true);
> // enable vendor extensions to allow compression, data types support ...
> config.setEnabledForExtensions(true);
> client = new XmlRpcClient();
> client.setConfig(config);
> client.execute(...)
> [...]
> The complete source code is the following:
> 1. Client Side
> -------------------------
> package esavo.voql.xmlrpc;
> import java.net.URL;
> import org.apache.xmlrpc.*;
> import org.apache.xmlrpc.client.*;
> /**
> * MyXmlRpcClient
> * @author Inaki Ortiz de Landaluce Saiz - ESAC/ESA - Madrid, Spain
> */
> public class MyXmlRpcClient {
>
> /** XMLRpcClientConfig instance to specify serverURL, credentials ...etc */
> private XmlRpcClientConfigImpl config;
> /** The XmlRpcClient itself */
> private XmlRpcClient client;
>
> /**
> * Creates a new instance of MyXmlRpcClient
> */
> public MyXmlRpcClient(URL serverURL) {
> // Step 1: Instances the client configuration and sets some properties
> // N.B: This should be configurable through a xml or properties file
>
> config = new XmlRpcClientConfigImpl();
> config.setServerURL(serverURL);
> // enables faster and memory saving streaming mode
> config.setContentLengthOptional(true);
> // enable vendor extensions to allow compression, data types support ...
> config.setEnabledForExtensions(true);
> // it works fine when the following two lines are commented
> config.setGzipCompressing(true); // requests gzip compression
> config.setGzipRequesting(true); // requests server to gzip response
>
> // Step 2: Instances the client and atttaches the configuration to it
>
> client = new XmlRpcClient();
> client.setConfig(config);
> // sets the fastest transport factory.
> // There are several transport factories available:
> // XmlRpcSunHttpTransportFactory - Uses default HTTP connection
> // XmlRpcCommonsTransportFactory - Jakarta commons, lower memory profile
> // XmlRpcLiteHttpTransportFactory - Faster, does not support HTTP/1.1</ul>
> client.setTransportFactory(new XmlRpcLiteHttpTransportFactory(client));
> }
>
> /**
> * Executes an XML-RPC call
> * @param methodName The method being performed.
> * @param method The parameters.
> * @return The result object
> */
> public Object execute(String methodName, Object[] params) throws XmlRpcException {
> return client.execute(methodName, params);
> }
>
> /**
> * Returns XmlRpcClient instance
> */
> public XmlRpcClient getClient() {
> return client;
> }
>
> public static void main(String[] args) {
> String serverStr = "http://localhost:8084/VOQL-server/servlet/xmlrpc";
> try {
> URL serverURL = new URL(serverStr);
> MyXmlRpcClient client = new MyXmlRpcClient(serverURL);
>
> // full check disabled
> Object[] params = new Object[]{new Boolean(false)};
> Boolean result = (Boolean) client.execute("Status.check", params);
> System.out.println("Result is " + result.toString());
> } catch (XmlRpcClientException e) {
> e.printStackTrace();
> } catch (Exception e) {
> e.printStackTrace();
> }
> }
> }
> 2. Server Side
> --------------------------
> 2.1 WAR configuration file (web.xml)
> -------------------------------------------------------------------
> <?xml version="1.0" encoding="UTF-8"?>
> <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
> <servlet>
> <servlet-name>XmlRpcServlet</servlet-name>
> <servlet-class>org.apache.xmlrpc.webserver.XmlRpcServlet</servlet-class>
> <init-param>
> <param-name>enabledForExtensions</param-name>
> <param-value>true</param-value>
> </init-param>
> </servlet>
> <servlet-mapping>
> <servlet-name>XmlRpcServlet</servlet-name>
> <url-pattern>/servlet/xmlrpc</url-pattern>
> </servlet-mapping>
> <session-config>
> <session-timeout>
> 30
> </session-timeout>
> </session-config>
> <welcome-file-list>
> <welcome-file>
> index.jsp
> </welcome-file>
> </welcome-file-list>
> </web-app>
> 2.2 Handler
> -----------------------
> package esavo.voql.server;
> /**
> *
> * @author Inaki Ortiz de Landaluce Saiz - ESAC/ESA - Madrid, Spain
> */
> public class Status {
>
> /** Creates a new instance of Status */
> public Status() {
> }
>
> public boolean check(boolean fullCheck) {
> // perform a full check on service availability. TBD
> if(!fullCheck) return true;
> else return false;
> }
>
> }
> 2.3 XmlRpcServlet.properties
> ----------------------------------------------------
> Remote=org.apache.xmlrpc.test.BaseTest$Remote
> Status=esavo.voql.server.Status
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira