Hi there,
as described on the hp i implemented a somple class with a methos to
be invoced.
classname = Location ; methodname = locate
I registered the class in the init method of my servlet, but on some
reasons, when i try to access the server i get this message (code of
clesses beneath):
java.lang.Exception: RPC handler object "location" not found and no
default handler registered
org.apache.xmlrpc.XmlRpcException: java.lang.Exception: RPC handler
object "location" not found and no default handler registered
at org.apache.xmlrpc.XmlRpcClient$Worker.execute(XmlRpcClient.java:457)
at org.apache.xmlrpc.XmlRpcClient.execute(XmlRpcClient.java:163)
at
gsmadaptateurs.OrangeGSMAdaptateur.demandePosition(OrangeGSMAdaptateur.java:115)
at
testgroupe1.GSMAdaptateurOrangeTest.testAdaptateur(GSMAdaptateurOrangeTest.java:54)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at junit.framework.TestCase.runTest(TestCase.java:154)
at junit.framework.TestCase.runBare(TestCase.java:127)
at junit.framework.TestResult$1.protect(TestResult.java:106)
at junit.framework.TestResult.runProtected(TestResult.java:124)
at junit.framework.TestResult.run(TestResult.java:109)
at junit.framework.TestCase.run(TestCase.java:118)
at junit.framework.TestSuite.runTest(TestSuite.java:208)
at junit.framework.TestSuite.run(TestSuite.java:203)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:421)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:305)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:186)
So can anyone give me a hint what went wrong?
Thanx in advance
Christian Ruediger
public class Location {
public Vector locate(Vector input){
Iterator iterator = input.iterator();
return input;
}
}
public static XmlRpcServer xmlrpc = new XmlRpcServer();
public void init (ServletConfig config) throws ServletException {
xmlrpc = new XmlRpcServer();
System.out.println("Serveur initialisation avec Location handler");
XmlRpc.setEncoding("ISO-8859-1");
xmlrpc.addHandler("location.locate", new Location());
XmlRpcHandlerMapping hmp = xmlrpc.getHandlerMapping();
try {
System.out.println(hmp.getHandler("location.locate").toString());
} catch (Exception e) {
e.printStackTrace();
System.out.println("location.locate not registered");
}
}
protected void doPost(HttpServletRequest req,
HttpServletResponse res)
throws ServletException, IOException
{
//get authorization header from request
String auth=req.getHeader("Authorization");
if (!auth.toUpperCase().startsWith("BASIC")) {
throw new ServletException("wrong kind of authorization!");
}
//get encoded username and password
String userPassEncoded=auth.substring(6);
//create a base64 decoder using Sun utility class
sun.misc.BASE64Decoder dec = new sun.misc.BASE64Decoder( );
String userPassDecoded= new String(dec.decodeBuffer(userPassEncoded));
//split decoded username and password
StringTokenizer userAndPass=new StringTokenizer(userPassDecoded,":");
String username=userAndPass.nextToken( );
String password=userAndPass.nextToken( );
//send input stream, username, and password to xmlrpc.execute
byte[] result = xmlrpc.execute(req.getInputStream(), username,
password);
//byte[] result = "Eine Menge Text!".getBytes();
res.setContentType("text/xml");
res.setContentLength(result.length);
OutputStream output = res.getOutputStream();
output.write(result);
output.flush();
}
}