Serviceaufruf
Das asset-integration-starter-Projekt enthält eine com.example.service.client.CustomServiceClient-Klasse zum illustrieren des Serviceaufrufs.
CustomServiceClient-Klasse erhält einen Verweis auf das SystemGateway-Objekt für das System, das durch eine Kennung Foo durch Aufrufen der SystemGatewayFactory.getSystemGateway-Methode mit Foo als Argument dargestellt wird. SystemGatewayFactory.getSystemGateway-Methode gibt somit jedem Zielsystem einen Handle, indem sie den systemId angibt. Sobald der Handle in Bezug auf das SystemGateway-Objekt abgerufen wurde, kann er zum Aufrufen von Service auf dem jeweiligen Zielsystem verwendet werden. Im folgenden finden Sie ein entsprechendes Codeausschnitt aus der CustomServiceClient-Klasse:private SystemGateway systemGateway = SystemGatewayFactory.getSystemGateway("Foo");SystemGateway
Die com.hcl.unica.system.integration.service.gateway.SystemGateway stellt eine überladene Methode executeService zur Verfügung, um einen beliebigen Dienst auf dem Zielsystem auszuführen. Eine Version dieser Methode bietet die Möglichkeit, jeden in Dienstdeklarationsdateien (<ASSET_PICKER_HOME>/conf/custom-plugin-services.yml und <ASSET_PICKER_HOME>/conf/plugin-services.yml) deklarierten Dienst für das jeweilige System auszuführen. Die andere Version bietet die Möglichkeit, einen Ad-hoc-HTTP-Aufruf auf dem Zielsystem auszuführen, ohne einen expliziten Dienst für diesen in der Dienstdeklarationsdatei zu deklarieren. Im folgenden sind die beiden Versionen der executeService-Methode mit ihren Signaturen zu sehen:
- <RQ, RS> RS executeService(String serviceName, RQ serviceInput, Class<? erweitert ServiceGateway<RQ, RS>> gatewayClass) löst ServiceExecutionException ausDies ist eine generische Methode, die mit den Typparametern RQ & RS arbeitet. Die Bedeutung von RQ & RS ist identisch mit der zuvor erwähnten. Diese Methode hilft bei der Ausführung eines bereits deklarierten Dienstes. Die
invocationDemo-Methode in derCustomServiceClient-Klasse demonstriert die Verwendung dieser Methode. Sie akzeptiert die folgenden Argumente:- Zeichenkette serviceName
Dies muss der Name des Service sein, der ausgeführt werden soll. Der Name des Dienstes muss genau mit der entsprechenden Deklaration in der Dienstdeklarationsdatei übereinstimmen.
- RQ serviceInput
Dies ist eine Eingabe für den Service, der ausgeführt wird. Der Typparameter des Typs RQ stellt den Typ der Eingabe dar, die für den aufgerufenen Service erforderlich ist
- Class<? extends ServiceGateway<RQ, RS>> gatewayClass
Er muss mit dem Rückgabewert der
getServiceInterface-Methode in der entsprechenden Service-Implementierung übereinstimmen. Er hilft Content Integration Framework bei der Ermittlung der richtigen Eingabe für den Service, der ausgeführt wird, und gibt die gewünschte Ausgabe zurück. Die Parameter RQ und RS, die für dasgatewayClass-Argument verwendet werden, stellen den Typ der Eingabe dar, die für den Serviceaufruf und den Antworttyp bereitgestellt wird, der vom Service beim Abschluss zurückgegeben wurde.
Bei erfolgreichem Abschluss gibt diese Methode das Objekt des Typs zurück, das durch den Typparameter RS dargestellt wird. Daher regelt das dritte Argument für die
executeService-Methode,gatewayClass, den Typ der Eingabe, der in den Service fließt, und den Wertentyp, den der Service zurückgibt. - Zeichenkette serviceName
- <T> HttpResponse<T> executeService(HttpRequest request, Class<T> expectedResponse) throws ServiceExecutionExceptionDabei handelt es sich außerdem um eine generische Methode, bei der der Typparameter T den Typ der Antwort darstellt, die vom entfernten HTTP-Aufruf erwartet wird. Es hilft Ihnen dabei, eine schreibübergreifende HTTP auf das Zielsystem zu erstellen, ohne einen expliziten Service dafür in der Dienstdeklarations-Datei zu deklarieren. Die
adHocInvocationDemo-Methode in derCustomServiceClient-Klasse demonstriert die Verwendung dieser Methode. Es werden die folgenden aufgelisteten Argumente akzeptiert:- HttpRequest-Anforderung
Dies muss ein Objekt der
com.hcl.unica.system.model.request.HttpRequest-Klasse sein.HttpRequeststellt eine Builderschnittstelle für das Konstruieren des Objekts mit den erforderlichen Details bereit. Dieses Objekt enthält im Wesentlichen die Details, die für die Erstellung einer HTTP erforderlich sind, wie z. B. absolute URL, HTTP-Anforderungsmethode, HTTP- Anforderungsheader & HTTP-Anforderungstext oder HTTP-Anforderungsnutzdaten - Klasse<T> expectedResponse
Hier muss der Antworttyp angegeben werden, der von der fernen URL erwartet wird. Es können auch die Typen Jackson und JAXB eingesetzt werden. Die Deserialisierung von JSON/XML wird in diesem Fall automatisch erfolgen.
Nach erfolgreichem Abschluss gibt diese Methode das Objekt
com.hcl.unica.system.model.response.HttpResponsezurück, wobei das Antwortobjekt aus dem fernen Aufruf gekapselt wird. Der Antworttyp, der vonHttpResponseeingekapselt wird, ist mit demexpectedResponse-Argument für dieexecuteService-Methode identisch. DasHttpResponse-Objekt ermöglicht den Zugriff auf die HTTP- Antwortstatuscode, Antwortheader und Antwortcookies , zusätzlich zu den Antwortnutzdaten. - HttpRequest-Anforderung
Beide Versionen der executeService-Methode können die com.hcl.unica.system.integration.exception.ServiceExecutionException oder eine der zugehörigen Subtypen auswerfen, falls bei Serviceausführung etwas schief läuft. Das Objekt dieser Ausnahmebedingung kann für die unmittelbare Ursache für den Serviceausführung konsultiert werden. Auch wenn der aufgerufene Service einen REST/HTTP-Service darstellt (z. B. Ad-hoc-Serviceaufrufe sind immer HTTP-Aufrufe) und der Fehler aus HTTP-Interaktion auftritt, kann auch ein optionales HttpResponse-Objekt aus der Ausnahme abgerufen werden. In solchen Fällen wird die HttpServiceExecutionException-Methode durch die executeService-Methoden ausgelöst. Die Anwesenheit von HttpResponse hängt davon ab, ob die HTTP-Interaktion eingetreten ist oder nicht. Die HttpServiceExecutionException kann aufgrund einer Ausnahmebedingung in einer beliebigen Logik empfangen werden, die vor dem tatsächlichen http aufgerufen wurde, z buildRequest . B. der Methode in einem deklarierten Service.
Die executeService-Methode kann auch einen SystemNotFoundException auslösen, wenn das Plug-in für das angegebene Zielsystem nicht vorhanden ist oder das entsprechende System nicht in Unica Platform integriert ist. Ebenso kann eine ServiceNotFoundException ausgelöst werden, wenn der angegebene Dienst entweder nicht in der Dienstdeklarationsdatei deklariert oder vom Plugin nicht implementiert ist.
- Sie werden feststellen, dass der Typ der Eingabe an
custom-servicederselbe ist wie der Typ, der für die Serviceimplementierung in der Klassecom.example.service.rest.CustomServiceoder Klassecom.example.service.functional.CustomServiceverwendet wird. Es handelt sich um denselben Ausgabetyp, der für die Definition derCustomServiceGateway-Schnittstelle verwendet wird, deren Klassenobjekt in beiden Versionen dergetServiceInterface-Implementierungen von derCustomService-Methode zurückgegeben wird. - Die Klasse
com.example.service.rest.CustomServiceund die Klassecom.example.service.functional.CustomServicestellen denselben Service dar, der mit zwei verschiedenen Ansätzen implementiert wurde. Die Service-Metainformationsdateien imasset-integration-starter-Projekt, nämlich die META-INF/rest-content-services.yml und die META-INF/functional-content-services.yml, haben einen Eintrag fürcustom-service, der auf die jeweiligen Versionen desfactoryClassverweist. Diese beiden Versionen werden nur zu Illustrationszwecken vorgelegt. Für alle praktischen Zwecke wird vom Content Integration Frameworknur eine Version der Serviceimplementierung vorausgesetzt. Unabhängig vom Ansatz, der für die Implementierung des Service verwendet wird, bleibt die Methode für den Serviceaufruf dieselbe.
Mehrfach partitionierte Clients
Aus der Perspektive der Serviceimplementierung, enthalten die ExecutionContext- und SystemConfig- Objekte, die an verschiedene Rückrufverfahren übergeben werden, die Clientanwendung und partitionsspezifische Informationen. Aus der Perspektive des Serviceaufrufs werden die mit der executeService-Methode ausgeführten Services aus der SystemGateway-Klasse auf dem System ausgeführt, das für die richtige Clientanwendung und die Partition des Benutzers, der auf Unica Content Integration zugreift, konfiguriert ist. Daher müssen weder die Implementierung noch der Aufrufer explizit mit der Partitionierung und anderen kontextbezogenen Details arbeiten. Content Integration Framework verarbeitet sie automatisch.