Création d'une API de client de service Web pour HCL Commerce
Pour chaque composant devant consommer des services Web externes, une API de client est nécessaire afin de construire les différents messages de demande, puis d'appeler le service d'invocation. L'API de client est essentiellement une classe utilitaire Java qui contient un code de construction servant à créer le message approprié et à l'envoyer. Aucune logique métier n'est exécutée dans l'API de client.
Utilisée pour construire le message, l'API de client simplifie la logique métier en fournissant une interface simple à programmer. Tant que le service d'invocation ne dépend pas de l'environnement d'exécution HCL Commerce, les autres applications Java peuvent profiter du même code pour émettre des appels distants. Le fragment de code suivant est un exemple simple d'utilisation de CheckInventory (gestion des stocks), dans lequel la requête spécifie le centre de distribution (FFC) et la SKU du produit ; l'information attendue en retour est le stock disponible.
InventoryType inventory = InventoryClientFacadeImpl.check("SKU","FFC");S'agissant d'un exemple, le code précédent est particulièrement simpliste, mais l'API de client peut fournir des signatures de méthode bien plus complexes, ainsi qu'un ensemble d'objets Java qui lui sont propres. Le tout peut servir à créer le document XML sous-jacent, qui sera utilisé pour communiquer avec le composant cible.
- MyCompanyMyServiceNameFacadeClient
- UtiliseMyCompanyMyServiceNameInvocationServiceObjectImpl pour convertir l'objet SDO de la requête en un XML équivalent.
- Enjoint le système de messagerie de HCL Commerce à transmettre le message.
- Utilise MyCompanyMyServiceNameConfirmationInvocationServiceObjectImpl pour convertir le XML de la réponse en un SDO équivalent.
- MyCompanyMyServiceNameInvocationServiceObjectImpl
- Convertit le SDO de la demande en un XML équivalent.
- MyCompanyMyServiceNameConfirmationInvocationServiceObjectImpl
- Convertit le XML de la réponse en un SDO de confirmation.
Procédure
- Assurez-vous que le format de message (schéma XSD) est défini et importé dans le projet WebServicesRouter, dans HCL Commerce Developer.
- Générez les SDO. Si vous étendez le schéma OAGIS 9 ou le schéma HCL Commerce Foundation, les modèles EMF générés sont situés à la racine du projet WebServicesRouter. Vous pouvez utiliser ces modèles.
- Créez deux nouvelles classes qui étendent la classe
AbstractSDOInvocationServiceObjectImpl. Ces objets sont des instances deInvocationServiceObjectet transforment les objets Java XML en tableaux d'octets XML. Pour créer les deux classes : - Dans les deux classes InvocationServiceObject, implémentez les méthodes getResourceFactory() et getDocumentRoot(), la première pour retourner l'implémentation de la fabrique de ressource SDO, la seconde pour retourner la racine de document (DocumentRoot). Par exemple :
/** * Returns the resource factory of the */ protected Factory getResourceFactory() { return new OrderResourceFactoryImpl(); } /** * Returns the document root associated with the data object and sets the data object inside the document root. */ protected Object getDocumentRoot() { DocumentRoot documentRoot = OrderFactory.eINSTANCE.createDocumentRoot(); documentRoot.setGetOrder((GetOrderType)getDataObject()); return documentRoot; } - Créez la classe MyCompanyMyServiceNameFacadeClient pour assurer la transmission du message de requête.
- Faites un clic droit sur votre package de personnalisation.
- Sélectionnez .
- Dans la zone Nom, entrez : MyCompanyMyServiceNameFacadeClient
- Cliquez sur Terminer.
- Dans l'API de client de façade, implémentez les méthodes nécessaires à la création du message sortant. Faites en sorte qu'elles délèguent l'envoi des informations à une méthode protégée. La méthode send doit prendre un objet SDO en entrée et retourner également un objet SDO. Par exemple :
protected ShowInventoryType send(GetInventoryType getInventory) { InvocationServiceObject requestDataObject = new GetInventoryInvocationServiceObject(); requestDataObject.setDataObject(getInventory); InvocationServiceObject responseDataObject = new ShowInventoryInvocationServiceObject(); InvocationService service = new InvocationService("com.ibm.commerce.inventory", "GetInventory"); service.invoke(requestDataObject, responseDataObject); return (ShowInventoryType) responseDataObject.getDataObject(); } - Créez un nouveau type de messages associé à l'ID du composant utilisé pour créer une instance de l'objet InvocationService ; par exemple, dans le code qui précède, le composant en question est com.ibm.commerce.inventory. Ajoutez une ligne dans la table MSGTYPES pour affecter un ID msgtype_id à ce nouveau type de messages. Utilisez un numéro d'ID supérieur à 1000. Par exemple :
insert into MSGTYPES (MSGTYPE_ID, MSGTDIR, NAME, VIEWNAME, DESCRIPTION) VALUES (1001, 1, 'com.ibm.commerce.inventory' , '', 'Inventory Component' ); - Attribuez un type de messages à une méthode de transport pour un site ou un magasin.