in dbus-java/src/main/java/org/freedesktop/dbus/connections/impl/DirectConnection.java [152:193]
DBusInterface dynamicProxy(String path) throws DBusException {
try {
Introspectable intro = getRemoteObject(path, Introspectable.class);
String data = intro.Introspect();
String[] tags = data.split("[<>]");
List<String> ifaces = new ArrayList<>();
for (String tag : tags) {
if (tag.startsWith("interface")) {
ifaces.add(tag.replaceAll("^interface *name *= *['\"]([^'\"]*)['\"].*$", "$1"));
}
}
List<Class<? extends Object>> ifcs = new ArrayList<>();
for (String iface : ifaces) {
int j = 0;
while (j >= 0) {
try {
ifcs.add(Class.forName(iface));
break;
} catch (Exception e) {
}
j = iface.lastIndexOf(".");
char[] cs = iface.toCharArray();
if (j >= 0) {
cs[j] = '$';
iface = String.valueOf(cs);
}
}
}
if (ifcs.size() == 0) {
throw new DBusException("Could not find an interface to cast to");
}
RemoteObject ro = new RemoteObject(null, path, null, false);
DBusInterface newi = (DBusInterface) Proxy.newProxyInstance(ifcs.get(0).getClassLoader(), ifcs.toArray(new Class[0]), new RemoteInvocationHandler(this, ro));
getImportedObjects().put(newi, ro);
return newi;
} catch (Exception e) {
logger.debug("", e);
throw new DBusException(String.format("Failed to create proxy object for %s; reason: %s.", path, e.getMessage()));
}
}