Ich betreibe eine CCU3 mit HM- und HM-IP-Geräten und bräuchte hierfür eine funktionierende XMLRPC-Verbindung.
Das Ganze soll in Java erstellt werden. Die von mir verwendeten Apache-Bibliotheken haben die Versionsnummer 3.1.3.
Meine noch recht primitive Serverklasse sieht so aus:
Code: Alles auswählen
public class SmartXmlRpcServer {
public static void main(String[] args) throws Exception {
WebServer webServer = new WebServer(6001);
XmlRpcServer xmlRpcServer = webServer.getXmlRpcServer();
PropertyHandlerMapping phm = new PropertyHandlerMapping();
phm.setVoidMethodEnabled(true);
phm.addHandler("system", EchoServiceImpl.class);
phm.addHandler("", EchoServiceImpl.class);
phm.setVoidMethodEnabled(true);
xmlRpcServer.setHandlerMapping(phm);
XmlRpcServerConfigImpl serverConfig = (XmlRpcServerConfigImpl) xmlRpcServer.getConfig();
serverConfig.setEnabledForExtensions(true);
serverConfig.setContentLengthOptional(false);
webServer.start();
System.out.println("XML-RPC-Server gestartet");
}
}
Code: Alles auswählen
package smartXmlRpcServer;
import java.util.Map;
public class EchoServiceImpl implements EchoService {
public Object[] listDevices(Object[] devices) {
System.out.println(devices);
return devices;
}
public void event(String interface_id, String address, String value_key, Object value) {
System.out.println(address);
}
public void listMethods(String methods) {
System.out.println("Methoden:\n"+methods);
}
public Boolean[] multicall(Object[] args) {
Boolean res[] = new Boolean[args.length];
for (int i=0; i<args.length; i++) {
Map<?, ?> call = (Map<?, ?>) args[i];
String method = (String)call.get("methodName");
Object[] margs = (Object[])call.get("params");
System.out.println(method);
if ("event".equals(method)) {
// hier erfolgt der Aufruf der "event"-Methode
event(margs[0].toString(), margs[1].toString(), margs[2].toString(), margs[3]);
res[i] = Boolean.TRUE;
}
}
return res;
}
}
Code: Alles auswählen
XML-RPC-Server gestartet
Methoden:
123456
Jan 21, 2020 10:49:08 AM org.apache.xmlrpc.server.XmlRpcErrorLogger log
SCHWERWIEGEND: No such handler: listDevices
org.apache.xmlrpc.server.XmlRpcNoSuchHandlerException: No such handler: listDevices
at org.apache.xmlrpc.server.AbstractReflectiveHandlerMapping.getHandler(AbstractReflectiveHandlerMapping.java:214)
at org.apache.xmlrpc.server.XmlRpcServerWorker.execute(XmlRpcServerWorker.java:45)
at org.apache.xmlrpc.server.XmlRpcServer.execute(XmlRpcServer.java:86)
at org.apache.xmlrpc.server.XmlRpcStreamServer.execute(XmlRpcStreamServer.java:200)
at org.apache.xmlrpc.webserver.Connection.run(Connection.java:208)
at org.apache.xmlrpc.util.ThreadPool$Poolable$1.run(ThreadPool.java:68)
Die Methode listDevices wird gar nicht gefunden, und die Events erreichen meinen Server ebenfalls nicht.
Nun habe ich mit Dr. Google bereits einige Beiträge zum Thema XMLRPC hier im Forum gefunden, die mich leider nicht weiter gebracht haben.
Hat zufällig jemand im Forum eine CCU3 mit einem Java-SMLRPC-Server am Laufen und könnte mir etwas auf die Sprünge helfen?
Ich würde mich riesig freuen.
Danke und schöne Grüße schon mal.
Jürgen