# XML-RPC kein Zugriff auf Server Interface



## tobitobsen82 (12. Mai 2008)

Hallo Leute,

habe eine kleine Client-Server Anwendung, die partout keinen Zugriff des Clients auf einen Server Handler herstellen will:



> 12.05.2008 15:30:40 org.apache.xmlrpc.server.XmlRpcStreamServer execute
> SCHWERWIEGEND: execute: Error while performing request
> org.apache.xmlrpc.server.XmlRpcNoSuchHandlerException: No such handler: serverPackage.AccountAdminInterface.getAccountByAccountNo
> at org.apache.xmlrpc.server.AbstractReflectiveHandlerMapping.getHandler(AbstractReflectiveHandlerMapping.java:203)
> ...



Der Handler existiert serverseitig und ich kann auch die Methoden per getListMethods() abfragen und bekomme u.a. "getAccountByAccountNo" ausgegeben.

Nachfolgend der relevante Ausschnitt aus meiner Client-Klasse:


```
public static void main(String[] args) throws Exception {
		URL serverUrl = new URL(SERVER_URL);
		XmlRpcClientConfigImpl clientConfig = new XmlRpcClientConfigImpl();
		clientConfig.setServerURL(serverUrl);
		XmlRpcClient myClient = new XmlRpcClient();
		myClient.setConfig(clientConfig);
		
		ClientFactory factory = new ClientFactory(myClient);
		AccountAdminInterface serverInterface = (AccountAdminInterface) factory.newInstance(AccountAdminInterface.class);
		serverInterface.getAccountByAccountNo("a2");
		ClientGui clientWindow = new ClientGui(serverInterface);
	}
```

Nachfolgend der relevante Ausschnitt aus meiner Sever-Klasse:


```
public static void main(String[] args) throws Exception {
		
		PropertyHandlerMapping phm = new PropertyHandlerMapping();
		phm.addHandler("AccountAdminInterface", AccountAdmin.class);
		
		/**
		for(int i = 0 ; i < phm.getListMethods().length ; i++){
			System.out.println(phm.getListMethods()[i]);	
		}**/
		
		WebServer myWebServer = new WebServer(PORT);
		XmlRpcServer xrServer = myWebServer.getXmlRpcServer();
		xrServer.setHandlerMapping(phm);
		myWebServer.start();
```

Danke für die Hilfe!


----------



## tobitobsen82 (12. Mai 2008)

Fehler gefunden:

die Deklaration des Keys muss auch eventuelle Packages beinhalten. Hier zB an Stelle von:

AccountAdminInterface

sollte besser:

serverPackage.AccountAdminInterface

stehen


----------



## Tonic (15. Mai 2008)

Hier muss ich nochmal kurz nachharken, habe nämlich ein ähnliches Problem.
Und zwar lässt sich die Testvariable nicht ändern. Hab das Ganze mal an einem Beispiel versucht:



```
package test;
import java.text.SimpleDateFormat;
import java.util.Date;
public class EchoImpl implements Echo {
	
	
	public int value = 21;
	
	public int getValue() 
	{
        return value;
        }
	
	public int setValue(int newValue) 
	{
        value=newValue;
        return value;
        }
}
```


```
package test;

public interface Echo {
	public int setValue(int newValue);
	public int getValue() ;
}
```


```
package test;
import org.apache.xmlrpc.server.*;
import org.apache.xmlrpc.webserver.*;
public class EchoServer {
private static final int PORT = 4445;
public static void main(String[] args) throws Exception
{
	PropertyHandlerMapping phm = new PropertyHandlerMapping();
	
	phm.addHandler("test.Echo", test.EchoImpl.class);
	
	//Key muss mit dem vollqualifizierten Namen des Interfaces übereinstimmen
	
	for(int i = 0 ; i < phm.getListMethods().length ; i++){
        System.out.println(phm.getListMethods()[i]);   
	}
	WebServer webServer = new WebServer(PORT);
	XmlRpcServer server = webServer.getXmlRpcServer();
	server.setHandlerMapping(phm);
	webServer.start();
	}
}
```


```
package test;
import java.net.*;
import org.apache.xmlrpc.client.*;
import org.apache.xmlrpc.client.util.ClientFactory;
public class EchoClient {
private static final String SERVER_URL =
"http://localhost:4445";
public static void main(String args[]) throws Exception {
	URL url = new URL(SERVER_URL);
	
	XmlRpcClientConfigImpl config = new XmlRpcClientConfigImpl();
	
	config.setServerURL(new URL(SERVER_URL));
	
	XmlRpcClient client = new XmlRpcClient();
	
	client.setConfig(config);
	
	ClientFactory factory = new ClientFactory(client);
	test.Echo echo = (test.Echo) factory.newInstance(test.Echo.class);
	
	
	
	int i = echo.getValue();
	
	
	System.out.println(i);
	
     echo.setValue(30);
	
	System.out.println(echo.getValue());
	
	
}
}
```


----------



## tobitobsen82 (15. Mai 2008)

setz deine value Variable mal static.


----------

