Serviceaufruf

Das asset-integration-starter-Projekt enthält eine com.example.service.client.CustomServiceClient-Klasse zum illustrieren des Serviceaufrufs.

Die 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 aus
    Dies 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 der CustomServiceClient-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 das gatewayClass-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.

  • <T> HttpResponse<T> executeService(HttpRequest request, Class<T> expectedResponse) throws ServiceExecutionException
    Dabei 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 der CustomServiceClient-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. HttpRequest stellt 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.HttpResponse zurück, wobei das Antwortobjekt aus dem fernen Aufruf gekapselt wird. Der Antworttyp, der von HttpResponse eingekapselt wird, ist mit dem expectedResponse-Argument für die executeService-Methode identisch. Das HttpResponse-Objekt ermöglicht den Zugriff auf die HTTP- Antwortstatuscode, Antwortheader und Antwortcookies , zusätzlich zu den Antwortnutzdaten.

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.

Anmerkung:
  • Sie werden feststellen, dass der Typ der Eingabe an custom-service derselbe ist wie der Typ, der für die Serviceimplementierung in der Klasse com.example.service.rest.CustomService oder Klassecom.example.service.functional.CustomService verwendet wird. Es handelt sich um denselben Ausgabetyp, der für die Definition der CustomServiceGateway-Schnittstelle verwendet wird, deren Klassenobjekt in beiden Versionen der getServiceInterface-Implementierungen von der CustomService-Methode zurückgegeben wird.
  • Die Klasse com.example.service.rest.CustomService und die Klasse com.example.service.functional.CustomService stellen denselben Service dar, der mit zwei verschiedenen Ansätzen implementiert wurde. Die Service-Metainformationsdateien im asset-integration-starter-Projekt, nämlich die META-INF/rest-content-services.yml und die META-INF/functional-content-services.yml, haben einen Eintrag für custom-service, der auf die jeweiligen Versionen des factoryClass verweist. 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.