Ich muss einen Dienst schreiben, auf den remote zugegriffen werden kann. Ich verwende cxf-dosgi-ri-singlebundle-distribution-1.4.0. So machte ich die API, dann die Umsetzung mit diesen Eigenschaften:Distributed OSGi - Consuming der Dienst
Dictionary<String, String> restProps = new Hashtable<String, String>();
restProps.put("service.exported.interfaces", "*");
restProps.put("service.exported.configs", "org.apache.cxf.ws");
restProps.put("org.apache.cxf.ws.address", "http://192.168.0.3:9090/preview");
bundleContext.registerService(Preview.class.getName(), new PreviewService(),restProps);
Wenn ich stationieren das Bündel, (nach der api und der d-osgi jar bereitstellen) kann ich die WSDL im Browser sehen, auch vom entfernten Computer. "http://192.168.0.3:9090/preview?wsdl" gefällt das.
Aber dann kommt der Verbraucher. Es ist OSGi-INF/Remote-Service/Remote-services.xml im Client-jar mit:
<endpoint-descriptions xmlns="http://www.osgi.org/xmlns/rsa/v1.0.0">
<endpoint-description>
<property name="objectClass">
<array>
<value>com.liferay.preview.api</value>
</array>
</property>
<property name="endpoint.id">http://192.168.0.3:9090/preview</property>
<property name="service.imported.configs">org.apache.cxf.ws</property>
</endpoint-description>
</endpoint-descriptions>
I das Bündel bereitstellen kann (nach dem OSGi-d Bündel und die API bereitstellen), aber ich m immer Null Referenzen zurück. Die Tutorials immer mit Codes wie diese
st = new ServiceTracker(bundleContext, MyService.class.getName(), null) {
@Override
public Object addingService(ServiceReference reference) {
Object svc = bundleContext.getService(reference);
if (svc instanceof MyService) {
printServiceInfo((MyService) svc);
}
return super.addingService(reference);
}
};
st.open();
Aber ich bin mit Liferay 7, wo ich diese nicht nutzen kann (kein Konstruktor für Servicetracker - Ich kann nur eine Servicetracker Instanz zurück von einer Registry Instanz erhalten)
Der OSGi Container ist Felix.
ich es irgendwo gelesen habe, dass, wenn ich die WSDL-Beschreibung, wie oben zu sehen zugreifen können, und lassen Sie uns sagen, es ist eine Methode, hallo() in meinem API, dann ein „http://192.168.0.3:9090/preview/hello“ Aufruf funktionieren sollte .. Aber es tut es nicht. Ich weiß nicht einmal, wie man das debuggt. (Ohne die Remote-Sache, lokal, in dem gleichen Container, der Methodenaufruf funktioniert)
Jede Hilfe könnte gut kommen! Vielen Dank!
In diesem Fall benötigt der Client keine remote-services.xml? –
Genau. Weitere Informationen finden Sie in diesem Tutorial http://liquid-reality.de/display/liquid/2013/02/13/Apache+Karaf+Tutorial+Part+8+-+Distributed+OSGi Btw. Es gibt jetzt auch Aries RSA, die neben dem CXF einen schnellen binären Transport bietet. Siehe http://aries.apache.org/modules/rsa.html –