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]