Ableitungen von Funktionsservice
Ableitungen der Schnittstelle von Funktionsservice erleichtern die Schaffung einer funktionalen Implementierung von Standardservices. Funktionsservice ist nur ein Objekt mit einer öffentlichen Methode, das einen bestimmten Input übernimmt und den gewünschten Output erzeugt.
Einfache Suche (simple-search)
Im Folgenden sind die spezialisierten Schnittstellen und Klassen aufgeführt, die für die einfache Suche verwendet werden können:
com.hcl.unica.system.integration.service.search.SearchServiceDie
com.example.service.functional.SimpleSearchService-Klasse imasset-integration-starter-Projekt ist eine Schnellstartimplementierung für densimple-search service-Funktionsservice. Es wird von dercom.hcl.unica.system.integration.service.search.SearchServiceKlasse abgeleitet.Die
SearchService-Klasse implementiert dieFunctionalService-Schnittstelle und definiert dieSearchRequest-Klasse undContentPage-Klasse als die Typargumente RQ & RS für den Funktionsservice. Dadurch wird das Objekt desSearchRequestzu einem Input für allesimple-search-Services, und dasContentPagewird nach Beendigung des Services als Output erwartet.Das Plug-in muss seine
simple-search-Implementierung aus dercom.hcl.unica.system.integration.service.search.SearchService-Klasse ableiten, um von dersimple-searchals Content Integration Framework-Service erkannt zu werden (das im vorigen Abschnitt beschriebene RESTful-Pendant ist ebenfalls eine gültige Wahl für diesimple-search-Services, die mit dem RESTful-Ansatz implementiert wurden).Das
SearchServicewird von der folgendencom.hcl.unica.system.integration.service.search.AbstractSearchServiceabstrakten Klasse abgeleitet: Es wird eine weitere Methode mit dem NamengetSupportedContentTypeseingeführt. Weitere Informationen zur Methode finden Sie unter Ableitungen von RestService .
Ressourcenlader (resource-loader)
Im Folgenden sind die spezialisierten Schnittstellen und Klassen aufgeführt, die für den Ressourcenlader-Service zur Verfügung stehen:
com.hcl.unica.system.integration.service.resourceloader.WebResourceLoaderServiceDiecom.example.service.functional.ResourceLoaderService-Klasse im asset-integration-starter-Projekt ist eine Schnellstartimplementierung fürresource-loaderFunktionsservice. Es wird von der folgenden Klasse abgeleitet:com.hcl.unica.system.integration.service.resourceloader.WebResourceLoaderServiceDie
WebResourceLoaderService-Klasse implementiert dieFunctionalService-Schnittstelle und definiert dieResourceRequestundHttpResponse-Typen als die Typargumente RQ & RS für denFunctionalService. Somit wird das Objekt desResourceRequestzu einem Input für alleresource-loader-Services, und dasHttpResponsewird nach Abschluss des Services als Output erwartet (die gleichen Input- und Outputtypen werden für das RESTful-Pendant des Ressourcen-Laders verwendet). Weitere Informationen zuResourceRequest- undHttpResponse-Typen finden Sie unter Ableitungen von RestService.Das Plug-in muss seine
resource-loader-Implementierung aus dercom.hcl.unica.system.integration.service.resourceloader.WebResourceLoaderService-Klasse ableiten, um von derresource-loaderals Content Integration Framework-Service erkannt zu werden (das im vorigen Abschnitt beschriebene HTTP-Pendant ist ebenfalls eine gültige Wahl für dieresource-loader-Services, die mit dem HTTP-Ansatz implementiert wurden).Der WebResourceLoaderService erstreckt sich über die folgende Klasse:com.hcl.unica.system.integration.service.resourceloader. AbstractWebResourceLoaderServiceWeitere Informationen zu dieser Klasse finden Sie in der Ableitungen von RestService.
Inhaltskategorien auflisten (list-content-categories)
Im Folgenden sind die speziellen Schnittstellen und Klassen aufgeführt, die für den Dienst Listeninhaltskategorien verfügbar sind:
com.hcl.unica.system.integration.service.content.categories.list.ContentCategoriesListServiceDas Plugin kann alternativ den funktionalen Ansatz zur Implementierung des
list-content-categories-Dienstes wählen, indem die Implementierung von derContentCategoriesListService-Klasse erweitert wird. DieContentCategoriesListService-Klasse implementiert dieFunctionalService-Schnittstelle und beauftragt dieContentCategoryListRequestundList<ContentCategory>-Klassen als die Typargumente RQ und RS für denFunctionalService. Dadurch wird das Objekt desContentCategoryListRequestzu einem Input für allelist-content-categories-Dienste und das Objekt vom TypList<ContentCategory>wird nach Abschluss des Dienstes als Output erwartet.- Das Plugin muss seine Implementierung von Listeninhaltskategorien aus der
com.hcl.unica.system.integration.service.content.categories.list.ContentCategoriesListService-Klasse ableiten, um vom Content Integration Framework als gültigerlist-content-categories-Dienst erkannt zu werden (das im vorherigen Abschnitt beschriebene RESTful-Gegenstück ist ebenfalls eine gültige Option, um es zu erweitern).ContentCategoriesListServicewird von der KlasseAbstractContentCategoriesListServiceabgeleitet. Details zur KlasseAbstractContentCategoriesListServicewerden im Thema Ableitungen von RestService behandelt.
Ordner auflisten (list-folders)
Im Folgenden sind die für den Dienst Ordner auflisten verfügbaren speziellen Schnittstellen und Klassen aufgeführt:
com.hcl.unica.system.integration.service.folder.list.FolderListServiceDas Plugin kann alternativ den funktionalen Ansatz zur Implementierung des
list-folders-Dienstes wählen, indem die Implementierung von derFolderListService-Klasse erweitert wird. DieFolderListService-Klasse implementiert dieFunctionalService-Schnittstelle und beauftragt dieFolderListRequestundList<Folder>-Klassen als die Typargumente RQ und RS für denFunctionalService. Dadurch wird das Objekt desFolderListRequestzu einem Input für allelist-folders-Dienste und das Objekt vom TypList<Folder>wird nach Abschluss des Dienstes als Output erwartet.- Das Plugin muss seine Implementierung von Listenordnern aus der
com.hcl.unica.system.integration.service.folder.list.FolderListService-Klasse ableiten, um vom Content Integration Framework als gültigerlist-folders-Dienst erkannt zu werden (das im vorherigen Abschnitt beschriebene RESTful-Gegenstück ist ebenfalls eine gültige Option, um es zu erweitern).FolderListServicewird von der KlasseAbstractFolderListServiceabgeleitet. Details zur KlasseAbstractFolderListServicewerden im Thema Ableitungen von RestService behandelt.
Listeninhalt (list-contents)
Im Folgenden sind die speziellen Schnittstellen und Klassen aufgeführt, die für den Dienst Listeninhalte verfügbar sind:
com.hcl.unica.system.integration.service.content.list.ContentListServiceDas Plugin kann alternativ den funktionalen Ansatz zur Implementierung des
list-contents-Dienstes wählen, indem die Implementierung von derContentListService-Klasse erweitert wird. DieContentListService-Klasse implementiert dieFunctionalService-Schnittstelle und beauftragt dieContentListRequestundContentPage-Klassen als die Typargumente RQ und RS für denFunctionalService. Dadurch wird das Objekt desContentListRequestzu einem Input für allelist-contents-Dienste und das Objekt vom TypContentPagewird nach Abschluss des Dienstes als Output erwartet.- Das Plugin muss seine Implementierung von Listeninhalten aus der
com.hcl.unica.system.integration.service.content.list.ContentListService-Klasse ableiten, um vom Content Integration Framework als gültiger -Dienst erkannt zu werden (das im vorherigen Abschnitt beschriebene RESTful-Gegenstück ist ebenfalls eine gültige Option, um es zu erweitern).ContentListServicewird von der KlasseAbstractContentListServiceabgeleitet. Details zur KlasseAbstractContentListServicewerden im Thema Ableitungen von RestService behandelt.
Inhaltsdetails abrufen (get-content-details)
Im Folgenden sind die speziellen Schnittstellen und Klassen aufgeführt, die für den Dienst Inhaltsdetails beschaffen verfügbar sind:
com.hcl.unica.system.integration.service.content.details.ContentDetailsServiceDas Plugin kann alternativ den funktionalen Ansatz zur Implementierung des
get-content-details-Dienstes wählen, indem die Implementierung von derContentDetailsService-Klasse erweitert wird.Die
ContentDetailsService-Klasse implementiert dieFunctionalService-Schnittstelle und beauftragt dieContentDetailsRequest- und Presentable-Klassen als die Typargumente RQ und RS für denFunctionalService. Dadurch wird das Objekt desContentDetailsRequestzu einem Input desget-content-details-Dienstes und das Objekt vom Typ Presentable wird nach Abschluss des Dienstes als Ausgabe erwartet.Das Plugin muss seine
get-content-details-Implementierung aus dercom.hcl.unica.system.integration.service.content.details.ContentDetailsService-Klasse ableiten, um vom Content Integration Framework als gültigerget-content-details-Dienst erkannt zu werden (das im vorherigen Abschnitt beschriebene RESTful-Gegenstück ist ebenfalls eine gültige Option, um es zu erweitern).ContentDetailsServicewird von der KlasseAbstractContentDetailsServiceabgeleitet. Details zur KlasseAbstractContentDetailsServicewerden im Thema Ableitungen von RestService behandelt.
Objektschema abrufen (get-object-schema)
get-object-schema -Dienst wird verwendet, um das Hauptschema des Domänenobjekts oder der Domänenentität zu generieren, das bzw. die vom jeweiligen System zur Darstellung des Inhalts verwendet wird. Das Master-Schema in einfachster Form besteht nur aus hierarchischen Metadaten jedes zuordenbaren Inhaltsattributs. Es wird erwartet, dass die Attributhierarchie und die Metadaten mit der JSON-Darstellung des Domäne übereinstimmen. Attributmetadaten umfassen hauptsächlich den Datentyp des Attributs, das Format des im Attribut gespeicherten Werts, die eindeutige ID des Attributs und den Anzeigetitel oder die Anzeigebezeichnung für das Attribut.
Im Folgenden sind die für den get-object-schema-Service verfügbaren speziellen Schnittstellen und Klassen aufgeführt:
com.hcl.unica.system.integration.service.object.schema.ObjectSchemaProviderServiceDie
ObjectSchemaProviderService-Klasse implementiert dieFunctionalService-Schnittstelle und beauftragt diecom.hcl.unica.system.model.ObjectSchemaRequestundcom.hcl.unica.system.model.json.schema.ObjectSchema-Klassen als die Typargumente RQ und RS für denFunctionalService. Dadurch wird das Objekt desObjectSchemaRequestzu einem Input für alleget-object-schema-Dienste und das Objekt vom TypObjectSchemawird nach Abschluss des Dienstes als Output erwartet. Das Plugin sollte dasObjectSchemajedoch nicht selbst erstellen. Es sollte nur die folgende abstrakte Methode aus derObjectSchemaProviderService-Klasse überschreiben und implementieren.ObjectProfile getObjectProfile(ObjectSchemaRequest objectSchemaRequest)
Die
getObjectProfile()Methode akzeptiertObjectSchemaRequestund gibtObjectProfilezurück. (Diese Typen werden in nachfolgenden Abschnitten behandelt.)Das Plugin muss
get-object-schema-Implementierung aus dercom.hcl.unica.system.integration.service.object.schema.ObjectSchemaProviderService-Klasse ableiten, um vom Content Integration Framework als gültigerget-object-schema-Dienst erkannt zu werden. Es gibt kein RESTful-Gegenstück zu dieser Standard-Superklasse, da die Objektschemagenerierung keine HTTP-Interaktion enthält. Plugins können benutzerdefinierte RESTful-Dienste implementieren und bei Bedarf intern aus demget-object-schema-Dienst heraus aufrufen.com.hcl.unica.system.model.ObjectSchemaRequestDas Objekt dieser Klasse wird als Eingabe für den
get-object-schema-Dienst bereitgestellt. Die wichtigste Methode dieser Klasse istgetObjectIdentity(), das ein Objekt vom Typcom.hcl.unica.system.model.ObjectIdentityzurückgibt, das die Details des Inhalts enthält, den der Benutzer ausgewählt hat, um das Masterschema anzufordern. Dazu gehörenapplicationId(die System-ID),objectType(Inhaltstyp-/Kategorie-ID) undobjectId(eindeutige Kennung des ausgewählten Inhalts). Unabhängig von der Kategorie und/oder dem Inhalt, die der Benutzer beim Einrichten der Inhaltszuordnung ausgewählt hat, muss das generierte Schema Attribute aller Inhaltsarten enthalten, die vom jeweiligen System unterstützt werden. Mit anderen Worten, für die Zuordnung aller vom angegebenen System bereitgestellten Inhaltstypen wird nur ein Masterschema verwendet.Die
getEnrichmentObjectJson()-Methode in derObjectSchemaRequest-Klasse kann ab dem aktuellen Release ignoriert werden.com.hcl.unica.system.integration.service.object.schema.ObjectProfileDies ist ein Rückgabetyp der
getObjectProfile()-Methode imget-object-schema-Dienst. Sie enthält den Java-Typ, der der Domäne / dem Objekt für das jeweilige System entspricht. Content Integration Framework verwendet diesen Java-Typ, um das Schema für öffentliche und nicht öffentliche, nicht statische Klasseneigenschaften (einschließlich Enums & Optionals) zu generieren. Mit der@MappableAttribute-Annotation kann jede einzelne Klasseneigenschaft konfiguriert werden, um das von Content Integration Framework generierte Schema zu steuern. Lesen Sie dascom.aem.model.response.simplesearch.SimpleSearchItem-Domänenobjekt imaem-integration reference-Projekt, um eine Vorstellung davon zu erhalten, wie diese Anmerkung verwendet wird. Weitere Details zu@MappableAttributefinden Sie im nächsten Abschnitt.ObjectProfilekann optional eine Instanz voncom.hcl.unica.system.integration.service.object.schema.ObjectSchemaEnrichereinschließen, um Attribute dynamisch zu dem so generierten Schema hinzuzufügen, zu ändern oder zu entfernen. Im nächsten Abschnitt wirdObjectSchemaEnricherdetailliert erläutert.com.hcl.unica.system.integration.service.object.schema.ObjectSchemaEnricherObjectSchemaEnricherist eine abstrakte Klasse. Plug-in sollte es erweitern, um die gewünschte Implementierung zu haben. Der Typparameter für dieObjectSchemaEnricher-Klasse stellt den Java-Typ mit den zusätzlichen Details dar, die zur Bereicherung des statisch generierten Objektschemas erforderlich sind. Diese zusätzlichen Details werden möglicherweise von den Clientanwendungen der Unica Content Integration bereitgestellt. Ab dem aktuellen Release werden keine zusätzlichen Details bereitgestellt, daher sollte sie bei der Implementierung der Schemaerweiterung auf Ungültig gesetzt werden.ObjectSchemaEnricherdeklariert nur eine abstrakte Methode, die vom Plug-in implementiert werden sollte:abstract public ObjectSchema enrich( ObjectSchema objectSchema, ObjectSchemaEnrichmentRequest<T> objectSchemaEnrichmentRequest )Das erste Argument für diese Methode ist eine Instanz der
com.hcl.unica.system.model.json.schema.ObjectSchema-Klasse. Es enthält das automatisch generierte Domänenobjektschema, das vom inObjectProfileangegebenen Java-Typ abgeleitet ist. Im Kern istObjectSchemanur einMap<String, AttributeSchema>, wobei Klasseneigenschaftsnamen die Schlüssel dieser Karte bilden und Eigenschaftsmetadaten als Objekt vonAttributeSchemaenden. Wenn sich die Klasseneigenschaft wiederum auf ein anderes Objekt bezieht, hat das entsprechendeAttributeSchemaein weiteresMap<String, AttributeSchema>, das die Attribute dieses Objekttyps enthält, usw.Anmerkung: Es ist wichtig, zu beachten, dass Attributnamen, die als Schlüssel in der Attributzuordnung verwendet werden, den JSON-Eigenschaften entsprechen, die in der JSON-Darstellung des Domäne enden. Wenn die@JsonProperty-Annotation verwendet wird, um den JSON-Eigenschaftsnamen für ein bestimmtes Klassenattribut zu überschreiben, erkennt Content Integration Framework diesen automatisch und verwendet den überschriebenen Eigenschaftsnamen.ObjectSchemaundAttributeSchemaerweitern sich von der abstrakten Klassecom.hcl.unica.system.model.json.schema.AttributeContainer.AttributeContainerbietetObjectSchema- undAttributeSchema-Klassen bequeme Methoden zum Navigieren durch die Attributhierarchie sowie zum Hinzufügen, Ändern und Entfernen von Attributen auf jeder Hierarchieebene, um die Schemaanreicherung zu vereinfachen. Auf Attribute auf jeder Hierarchieebene kann mithilfe ihrer Namen, wie sie in der JSON-Darstellung erscheinen, zugegriffen und bearbeitet werden.com.hcl.unica.system.model.json.schema.generator.annotations.MappableAttribute@MappableAttribute-Annotation bietet eine Möglichkeit, um zu steuern, wie Content Integration Framework ein Objektschema aus dem entsprechenden Java-Typ generiert. Die Verwendung@MappableAttributevon ist nicht obligatorisch. Wird es nicht verwendet, berechnet Content Integration Framework automatisch Metadaten für Eigenschaften. Falls erforderlich, sollte diese Anmerkung über den gewünschten Klasseneigenschaften platziert werden. Die folgenden Annotationsattribute können zur Steuerung der Schemagenerierung verwendet werden:- ausgeblendet – Setzen Sie diese Eigenschaft auf wahr, um bestimmte Eigenschaften explizit aus dem Objektschema auszuschließen (
@JsonIgnorewird derzeit vom Content Integration Framework nicht berücksichtigt. Daher muss jede Eigenschaft, die von der JSON-Darstellung mit@JsonIgnoreausgeschlossen ist, explizit vom Schema ausgeschlossen werden. - id – Angabe einer eindeutigen Kennung für die Eigenschaft. Content Integration Framework benötigt für jede zugeordnete Klasseneigenschaft eine eindeutige ID. Wenn
@MappableAttributenicht verwendet wird oder keine ID angegeben ist, wird eine ID automatisch basierend auf der Position der Eigenschaft innerhalb der Klasse generiert.Die automatische Generierung der Attributkennung hängt vom Namen und der hierarchischen Position der Klasseneigenschaft im Domänenobjektdiagramm ab. Wenn der Eigenschaftsname geändert und/oder in der Hierarchie des Objektdiagramms nach oben oder unten verschoben wird, ändert sich die ihm zugeordnete ID. Ein solches Refaktorieren kann das Content Integration Framework beim Lesen der Werte refaktorierter Attribute irreführen und zu unerwünschten Daten in zugeordneten Inhalten führen (z. B. Angebote in COM). Daher wird empfohlen, eindeutige Attribut-IDs manuell zu zuordnen, um solche unbeabsichtigten Änderungen an Attribut-IDs zu vermeiden, die unabhängig vom Namen und der Position der Klasseneigenschaften konstant bleiben.
- Titel – Anzeigetitel/-bezeichnung für die Eigenschaft. Wird dies nicht angegeben, generiert Content Integration Framework eines unter Verwendung des Eigenschaftsnamens.
- Typ – Einer der Werte aus
com.hcl.unica.system.model.json.schema.generator.annotations.AttributeType. Wird dies nicht angegeben, erkennt Content Integration Framework automatisch den entsprechenden Typ. - Format – Einer der Werte aus
com.hcl.unica.system.model.json.schema.generator.annotations.AttributeFormat. Content Integration Framework kann standardmäßige temporäre Java-Typen (Date,LocalDateTime,Instant) automatisch identifizieren und den Attributtyp aufDATETIMEsetzen. Andere Formate sollten explizit deklariert werden. - Implementation – Sollte für polynische Referenzen verwendet werden, um explizit den Java-Typ zu deklarieren, der für die automatische Schemagenerierung berücksichtigt werden soll.
- hiddenProperties -
@MappableAttribute-Annotation kann auf Klassenebene verwendet werden, um mehrere Eigenschaften an einer einzigen Stelle auszublenden.hiddenPropertiesnimmt ein Array aus Zeichenfolgen, die die Namen der Eigenschaften (direkt und übernommen) enthalten, die aus dem automatisch generierten Schema ausgeschlossen werden sollen. Dies ist besonders nützlich, um Eigenschaften zu ausblenden, die von übergeordneten Klassen von Drittanbietern übernommen wurden.
Zuordnung zwischen Java-Typ und AttributeType
In der folgenden Tabelle wird die Zuordnung zwischen Java-Typ und AttributeType/AttributeFormat zusammengefasst, die vom Content Integration Framework für die automatische Schemagenerierung verwendet wird:
Java-Typ AttributeType AttributeFormat StringCharacterCharCharSequenceLocalDateLocalTimeZonedDateTimeOffsetDateTimeOffsetTimeZoneIdCalendarUUID
STRINGBooleanboolean
BOOLEANBigIntegerIntegerIntLongLongShortShortBytebyte
INTEGERBigDecimalNumberDoubleDoubleFloatfloat
NUMBERDateLocalDateTimeInstant
Das Content Integration Framework erwartet, dass Datumswerte in UTC-Standardzeit ausgedrückt werden. Temporäre Werte, die in einer anderen Zeitzone ausgedrückt werden, können in weiteren Anwendungsfällen zu ungenauen zeitlichen Berechnungen führen.
INTEGERDATETIME- ausgeblendet – Setzen Sie diese Eigenschaft auf wahr, um bestimmte Eigenschaften explizit aus dem Objektschema auszuschließen (
kognitive Analyse abfrufen (get-cognitive-analysis)
Im Folgenden sind die für den Dienst Kognitive Analyse abrufen verfügbaren speziellen Schnittstellen und Klassen aufgeführt:
com.hcl.unica.system.integration.service.cognitive.analysis.CognitiveAnalysisServiceDas Plugin kann alternativ den funktionalen Ansatz zur Implementierung des
get-cognitive-analysis-Dienstes wählen, indem die Implementierung von derCognitiveAnalysisService-Klasse erweitert wird. DieCognitiveAnalysisService-Klasse implementiert dieFunctionalService-Schnittstelle und beauftragt dieCognitiveAnalysisRequestundCognitiveAnalysis-Klassen als die Typargumente RQ und RS für denFunctionalService. Dadurch wird das Objekt desCognitiveAnalysisRequestzu einem Input für alleget-cognitive-analysis-Dienste und das Objekt vom TypCognitiveAnalysiswird nach Abschluss des Dienstes als Output erwartet.- Das Plugin muss seine
get-cognitive-analysis-Implementierung aus dercom.hcl.unica.system.integration.service.cognitive.analysis.CognitiveAnalysisService-Klasse ableiten, um vom Content Integration Framework als gültigerget-cognitive-analysis-Dienst erkannt zu werden (das im vorherigen Abschnitt beschriebene RESTful-Gegenstück ist ebenfalls eine gültige Option, um es zu erweitern).CognitiveAnalysisService erweiter sich von der
AbstractCognitiveAnalysisService-Klasse. Details zur KlasseAbstractCognitiveAnalysisServicewerden im Thema Ableitungen von RestService behandelt.