Creación de una API de cliente de servicio web para HCL Commerce

Para cada componente que debe consumir servicios web externos, se necesita una interfaz de programación de aplicaciones de cliente para crear mensajes de solicitud diferentes y llamar al servicio de invocación. La API de cliente es fundamentalmente una clase de programa de utilidad Java que contiene código de construcción para crear el mensaje adecuado y enviarlo. En la API de cliente no se aplica ninguna lógica empresaria.

Utilizar la API de cliente para crear el mensaje simplifica la lógica de empresa proporcionando una interfaz de programación de fácil utilización. Esto permite a otras aplicaciones Java utilizar el mismo código para realizar llamadas remotas, siempre que el servicio de invocación no dependa del entorno de ejecución de HCL Commerce. El fragmento de código siguiente muestra un simple ejemplo de CheckInventory donde la solicitud especifica el centro de despacho y el SKU de producto y está a la espera de que se devuelva información de inventario.

InventoryType inventory = InventoryClientFacadeImpl.check("SKU","FFC");

Aunque el fragmento de código anterior es muy sencillo, la API de cliente también puede proporcionar firmas de método más complejas junto con conjunto de objetos Java. Estos se pueden utilizar para crear el documento XML subyacente que se utilizará para comunicarse con el componente de destino.

Una API de cliente consta de los elementos siguientes:
  • MyCompanyMyServiceNameFacadeClient
    • Utiliza MyCompanyMyServiceNameInvocationServiceObjectImpl para convertir el SDO de solicitud en XML de solicitud.
    • Indica al sistema de mensajería de HCL Commerce que transmita el mensaje.
    • Utiliza MyCompanyMyServiceNameConfirmationInvocationServiceObjectImpl para convertir el XML de respuesta en SDO de respuesta.
  • MyCompanyMyServiceNameInvocationServiceObjectImpl
    • Convierte el SDO de solicitud en XML.
  • MyCompanyMyServiceNameConfirmationInvocationServiceObjectImpl
    • Convierte el XML de respuesta en SDO de confirmación.

Procedimiento

  1. Asegúrese de que el formato de mensaje (esquema XSD) se define e importa al proyecto WebServicesRouter en HCL Commerce Developer.
  2. Genere los SDO. Si está ampliando el esquema OAGIS 9 o el esquema de HCL Commerce Foundation, los modelos EMF generados están ubicados en la raíz del proyecto WebServicesRouter. Puede utilizar estos modelos.
  3. Cree dos clases nuevas que amplíen la clase AbstractSDOInvocationServiceObjectImpl. Estos objetos son instancias de InvocationServiceObject y transforman los objetos Java XML en matrices de bytes XML. Para crear las dos clases:
    1. Haga clic con el botón derecho en en el paquete de personalización.
    2. Seleccione Nueva > Clase.
      1. En el campo Nombre, escriba el nombre de la clase, por ejemplo MyCompanyMyServiceNameInvocationServiceObjectImpl. Esta clase convertirá el SDO de solicitud en XML.
      2. Haga clic en Examinar, al lado del campo Superclase.
      3. Especifique AbstractSDOInvocationServiceObjectImpl en el campo de entrada Elegir un tipo.
      4. Haga clic en Aceptar.
      5. Haga clic en Finalizar.
    3. Repita el paso b otra vez para crear una segunda clase y esta vez llámela MyCompanyMyServiceNameConfirmationInvocationServiceObjectImpl. Esta clase convertirá el XML de respuesta en SDO de confirmación.
  4. En las dos clases InvocationServiceObject, implemente los métodos getResourceFactory() y getDocumentRoot() para devolver la implementación de fábrica de recursos SDO generada y DocumentRoot. Por ejemplo:
    /**
    * 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;
    }
    
  5. Cree la clase MyCompanyMyServiceNameFacadeClient para transmitir el mensaje de solicitud.
    1. Haga clic con el botón derecho en en el paquete de personalización.
    2. Seleccione Nueva > Clase.
    3. En el campo Nombre, escriba: MyCompanyMyServiceNameFacadeClient
    4. Haga clic en Finalizar.
  6. En la API de cliente de fachada, implemente métodos para crear el mensaje de salida. Haga que estos métodos se deleguen en un método protegido para enviar la información. El método de envío debe aceptar un objeto de datos de servicio (SDO) y vuelva un objeto SDO de salida. En el ejemplo siguiente, por ejemplo:
    
    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();
    }
    
  7. Cree un nuevo tipo de mensaje para el ID de componente utilizado para crear una instancia del objeto de servicio de invocación, por ejemplo, com.ibm.commerce.inventory en el ejemplo de código anterior. Añada la fila a la tabla MSGTYPES y asigne un msgtype_id. Utilice un número de ID de tipo de mensaje mayor que 1000. Por ejemplo:
    
    insert into MSGTYPES (MSGTYPE_ID, MSGTDIR, NAME, VIEWNAME,
    DESCRIPTION) 
            VALUES (1001, 1, 'com.ibm.commerce.inventory' , '',
    'Inventory Component' );
    
  8. Asignar un tipo de mensaje a un método de transporte para un sitio o una tienda.