Hi!
I am trying to send a file over XMLRPC using an byte array (byte[]), but an
exception is thrown when content length optional is set to true.
At first I thought it had to do with the byte array, but I this exception
with a simple ping/echo method as well.
I am using PropertyHandlerMapping on the server-side and a Proxy solution on
the Agent side.
I've used this same setup before, but I had to recreate the test from
scratch so I am thinking that I might have missed out on something.
But since it works when content length optional is set to false I have my
doubts.
Regards,
Jimisola
These are the outputs that I get:
Client:
[Fatal Error] :2:6: The processing instruction target matching
"[xX][mM][lL]" is not allowed.
Exception in thread "main" java.lang.reflect.UndeclaredThrowableException
at $Proxy0.echo(Unknown Source)
at xmlrpctest.Client.main(Client.java:33)
Caused by: org.apache.xmlrpc.client.XmlRpcClientException: Failed to parse
servers response: The processing instruction target matching "[xX][mM][lL]"
is not allowed.
at
org.apache.xmlrpc.client.XmlRpcStreamTransport.readResponse(XmlRpcStreamTransport.java:177)
at
org.apache.xmlrpc.client.XmlRpcStreamTransport.sendRequest(XmlRpcStreamTransport.java:145)
at
org.apache.xmlrpc.client.XmlRpcHttpTransport.sendRequest(XmlRpcHttpTransport.java:94)
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
org.apache.xmlrpc.client.util.ClientFactory$1.invoke(ClientFactory.java:104)
... 2 more
Server:
lFatal Error] :1:1: Content is not allowed in prolog.
The code:
package xmlrpctest;
import java.io.IOException;
import java.net.InetAddress;
import org.apache.xmlrpc.XmlRpcException;
import org.apache.xmlrpc.server.PropertyHandlerMapping;
import org.apache.xmlrpc.server.XmlRpcServer;
import org.apache.xmlrpc.server.XmlRpcServerConfigImpl;
import org.apache.xmlrpc.webserver.WebServer;
public class Server
{
public static void main(String[] args) throws XmlRpcException,
IOException
{
WebServer webServer = new WebServer(8080,
InetAddress.getByName("localhost"));
XmlRpcServer xmlRpcServer = webServer.getXmlRpcServer();
// use reflection for (dynamic) mapping
PropertyHandlerMapping phm = new PropertyHandlerMapping();
// add handler - using full name for use by dynamic proxy
phm.addHandler(TestRPC.class.getName(), TestRPCImpl.class);
xmlRpcServer.setHandlerMapping(phm);
XmlRpcServerConfigImpl serverConfig = (XmlRpcServerConfigImpl)
xmlRpcServer.getConfig();
serverConfig.setEnabledForExtensions(true);
serverConfig.setContentLengthOptional(true);
webServer.start();
}
}
package xmlrpctest;
import java.io.FileInputStream;
import java.net.URL;
import org.apache.xmlrpc.client.XmlRpcClient;
import org.apache.xmlrpc.client.XmlRpcClientConfigImpl;
import org.apache.xmlrpc.client.XmlRpcCommonsTransportFactory;
import org.apache.xmlrpc.client.util.ClientFactory;
public class Client
{
public static void main(String[] args) throws Exception
{
URL url = new URL("http://localhost:8080/RPC2");
XmlRpcClientConfigImpl clientConfig = new XmlRpcClientConfigImpl();
clientConfig.setServerURL(url);
clientConfig.setEnabledForExtensions(true);
clientConfig.setContentLengthOptional(true);
XmlRpcClient client = new XmlRpcClient();
// use Commons HttpClient as transport
client.setTransportFactory(new
XmlRpcCommonsTransportFactory(client));
// set configuration
client.setConfig(clientConfig);
// make a call using dynamic proxy
ClientFactory factory = new ClientFactory(client);
TestRPC testRPC = (TestRPC) factory.newInstance(TestRPC.class);
System.out.println(testRPC.echo("ping"));
/*
FileInputStream fis = new FileInputStream("/tmp/java.txt");
byte[] ba = new byte[fis.available()];
fis.read(ba);
fis.close();
int length = testRPC.upload(ba);
System.out.println(length);
*/
}
}
package xmlrpctest;
import org.apache.xmlrpc.XmlRpcException;
public interface TestRPC
{
int upload(byte[] data) throws XmlRpcException, Exception;
String echo(String s);
}
package xmlrpctest;
import java.io.FileOutputStream;
import org.apache.xmlrpc.XmlRpcException;
public class TestRPCImpl implements TestRPC
{
public int upload(byte[] data) throws XmlRpcException, Exception
{
FileOutputStream fos = new FileOutputStream("/tmp/java.txt.out");
fos.write(data);
fos.close();
return data.length;
}
public String echo(String s)
{
System.out.println("Returning: " + s);
return s;
}
}
pom.xml:
<?xml version="1.0" encoding="UTF-8"?><project>
<modelVersion>4.0.0</modelVersion>
<groupId>test</groupId>
<artifactId>test</artifactId>
<version>0.0.1</version>
<description></description>
<dependencies>
<dependency>
<groupId>org.apache.xmlrpc</groupId>
<artifactId>xmlrpc-common</artifactId>
<version>3.0</version>
</dependency>
<dependency>
<groupId>org.apache.xmlrpc</groupId>
<artifactId>xmlrpc-client</artifactId>
<version>3.0</version>
</dependency>
<dependency>
<groupId>org.apache.xmlrpc</groupId>
<artifactId>xmlrpc-server</artifactId>
<version>3.0</version>
</dependency>
<dependency>
<artifactId>commons-codec</artifactId>
<groupId>commons-codec</groupId>
<version>1.3</version>
</dependency>
<dependency>
<artifactId>commons-httpclient</artifactId>
<groupId>commons-httpclient</groupId>
<version>3.0.1</version>
</dependency>
<dependency>
<artifactId>commons-lang</artifactId>
<groupId>commons-lang</groupId>
<version>2.1</version>
</dependency>
</dependencies>
</project>
--
View this message in context:
http://www.nabble.com/Exception-thrown-when-setting-content-length-optional-to-true-tf2268435.html#a6295922
Sent from the Apache Xml-RPC - Dev forum at Nabble.com.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]