Personalizar el mandato de controlador basado en configuración y la infraestructura de correlación de beans de datos
HCL Commerce utiliza llamadas REST para algunos beans de datos de forma predeterminada. Configuradas con perfiles de correlación, los parámetros de entrada REST a métodos set de beans de datos o de mandatos de controlador, y los métodos getter de beans de datos o mandato de controlador con los parámetros de salida REST. Para personalizar este comportamiento, debe crear nuevas correlaciones o ampliar las correlaciones predeterminadas.
Los escenarios siguientes pueden ser típicos al personalizar la infraestructura:
- Utilizar los mismos beans de datos de REST o mandatos de controlador que HCL Commerce, pero obteniendo un conjunto diferente de datos de entrada o de respuesta.
- Crear subclases de un bean de datos preexistente para ampliar la función y crear una configuración de correlación REST que haga referencia al perfil de correlación preexistente para que pueda añadir los cambios Delta.
- Configurar un nuevo servicio REST para un bean de datos o un mandato de controlador preexistente que no tiene ninguna configuración de REST predeterminada.
- Crear o actualizar los beans de datos personalizados y de los mandatos de controlador a los que se accederá a través de REST.
Nota: Personalizar la infraestructura hace referencia a la creación de nuevos manejadores de REST y a la correlación de perfiles, o la ampliación de perfiles de correlación incorporados.
Procedimiento
-
Utilice el bean de datos o el directorio de extensión de mandato de controlador para añadir nuevos perfiles de correlación de configuración.
Utilice las siguientes configuraciones de ejemplo como base:
- Ubicación predeterminada de configuración: Rest.war/WebContent/WEB-INF/config/beanMapping/com.ibm.commerce.BeanBaseClass.xml
<bean> <profiles> <profile name="IBM_Summary"> <inputs> <input inputName="int1" methodName="setInt1"/> <input inputName="string1" methodName="setString1"/> </inputs> <outputs> <output methodName="getInt1" outputName="int1"/> <output methodName="getString1" outputName="string1"/> </outputs> </profile> <profile name="IBM_Details"> <inputs> <input inputName="int1" methodName="setInt1"/> <input inputName="int2" methodName="setInt2"/> <input inputName="string1" methodName="setString1"/> <input inputName="string2" methodName="setString2"/> </inputs> <outputs> <output methodName="getInt1" outputName="int1"/> <output methodName="getInt2" outputName="int2"/> <output methodName="getString1" outputName="string1"/> <output methodName="getString2" outputName="string2"/> <output methodName="getObject1" outputName="object1"> <output methodName="getLong1" outputName="long1"/> </output> </outputs> </profile> </profiles> </bean>
Donde:- El archivo de configuración predeterminado está en el directorio de correlación de beans predeterminado.
- Contiene dos perfiles.
- Cada perfil tiene correlaciones de entrada y de salida entre REST y el bean de datos.
- Ubicación de configuración de extensión: Rest.war/WebContent/WEB-INF/config/beanMapping-ext/com.mycompany.BeanExtendedClass.xml
<bean> <profiles> <profile name="MyCompany_Details"> <extends> <extend profileName="IBM_Details" profileClass="com.ibm.commerce.BeanBaseClass"/> </extends> <inputs> <input inputName="int1" methodName="setInt1" required="true"/> <input inputName="int3" methodName="setInt3"/> </inputs> <outputs> <output methodName="getString3" outputName="string3"/> <output methodName="getString2a" outputName="string2"/> <output methodName="getObject1" outputName="object1"> <output methodName="getLong2" outputName="long2"/> </output> </outputs> </profile> </profiles> </bean>
Donde:- El archivo de configuración de extensión se encuentra en el directorio de correlación de bean de extensión.
- El nombre de archivo es diferente porque es una subclase personalizada del bean original.
- Contiene un nuevo perfil llamado
MyCompany_Details
:- El perfil contiene un elemento extends, que indica dónde obtener los valores de entrada y salida con los que empezar. En este ejemplo, procede del perfil
IBM_Details
del archivo de configuracióncom.ibm.commerce.BeanBaseClass
predeterminado. - Altera temporalmente la entrada
int1
necesaria. - Añade una entrada
int3
y una salidastring3
nuevas. - Altera temporalmente la salida
string2
para llamar al métodogetString2a
en lugar degetString2
. - Para el árbol o jerarquía de salida que empieza por
object1
, añada una salida de hoja llamadalong2
.
- El perfil contiene un elemento extends, que indica dónde obtener los valores de entrada y salida con los que empezar. En este ejemplo, procede del perfil
- Ubicación de configuración de extensión: Rest.war/WebContent/WEB-INF/config/beanMapping-ext/com.ibm.commerce.BeanBaseClass.xml
<bean> <profiles> <profile name="IBM_Summary"> <extends> <extend profileName="IBM_Summary"/> </extends> <outputs> <output methodName="getString2" outputName="string2"/> </outputs> </profile> </profiles> </bean>
Donde:- El archivo de configuración de extensión se encuentra en el directorio de correlación del bean de extensión.
- El nombre de archivo es el mismo que el archivo predeterminado porque tiene la intención de alterar temporalmente los perfiles incorporados o añadir más perfiles para el bean original.
- El perfil
IBM_Summary
se repite en este archivo, de modo que, siempre que se haga referencia a él mediante una llamada REST, tendrá prioridad el perfil de este archivo de extensión:- El perfil contiene elementos de
extends
, que indican dónde obtener los valores de entrada y salida con los que empezar. En este ejemplo, se procede del perfilIBM_Summary
original. - Añade una nueva salida
string2
.
- El perfil contiene elementos de
- Ubicación predeterminada de configuración: Rest.war/WebContent/WEB-INF/config/beanMapping/com.ibm.commerce.BeanBaseClass.xml
-
Asegúrese de tener en cuenta las siguientes reglas de extensiones:
- Un archivo de correlación en el directorio de extensión tiene prioridad sobre la configuración predeterminada. Cuando se encuentra un perfil en ambos archivos, tiene prioridad el del archivo de extensión.
- Utilizar la función extends/extend:
- Los elementos extends/extend solo se permiten en un archivo de configuración de extensión.
- Solo puede ampliar un perfil predeterminado por perfil de extensión.
- El perfil original se utiliza como valor predeterminado. Todos los atributos de entrada y salida y listName se añaden al perfil ampliado.
- Cualquier entrada en el perfil ampliado que tenga el mismo methodName sustituye a la que se encuentra en el perfil predeterminado, independientemente de inputName.
- Cualquier entrada en el perfil ampliado que tenga el mismo inputName altera temporalmente el perfil predeterminado.
- Cualquier otra entrada en el perfil ampliado se añade como una entrada nueva.
- El valor del atributo listName lo dicta su uso en el perfil de extensión. Si no se menciona en el perfil de extensión, no se utiliza.
- Si el elemento de salida es una ramificación (contiene elementos de salida dentro) en el perfil ampliado:
- Si outputName es diferente, se añade una nueva ramificación.
- Si outputName es el mismo que el valor predeterminado, pero la methodName de salida es diferente, la ramificación del valor predeterminado se sustituye por esta.
- Si outputName y methodName son los mismos que una ramificación en el valor predeterminado, procesa los elementos en función de estas mismas reglas.
- Cualquier salida que no sea una ramificación en el perfil ampliado que tenga el mismo outputName altera temporalmente el perfil predeterminado.
- Si alguna entrada o salida está duplicada (mismo nombre) dentro del mismo perfil, el resultado no estará definido.
-
Tipos de parámetros de entrada admitidos.
Si se realiza una llamada REST mediante los parámetros de vía de acceso (por ejemplo, series), un cuerpo JSON (por ejemplo, tipos de datos JSON), el AbstractConfigBasedClassicHandler necesita convertirlos al tipo de datos que espera el método set de bean de datos o de mandato de controlador. Para los tipos de fecha y hora, los formatos se centran en estándares ISO 8601. La tabla siguiente muestra una lista de tipos de datos de destino (tipos de parámetros de métodos set de bean de datos y de mandato de controlador) y los tipos de datos de entrada de REST admitidos:
Bean de datos o tipo de datos de origen del mandato de controlador (por ejemplo, argumento de método set) Tipo de datos de entrada o fuente Formato de entrada o fuente (si aplica) java.lang.String Serie java.lang.Boolean (o bool
)Serie true | false Booleano JSON java.lang.Number (por ejemplo, entero, largo, decimal grande) o números primitivos Número JSON de cadena Se ha intentado convertir al destino necesario java.util.Date Serie 2014-08-01T13:41:07Z 2014-08-01T13:41:07-04:00 2014-08-01T13:41:07-0400 2014-08-12T13:41:07.123Z 2014-08-12T13:41:07.000-04:00 2014-08-12T13:41:07.789-0400 java.sql.Timestamp Serie 2014-08-01T13:41:07Z 2014-08-01T13:41:07-04:00 2014-08-01T13:41:07-0400 aaaa-mm-dd hh:mm:ss.[fff...]
(tal como se describe en la documentación de Java para la indicación de fecha y hora)java.sql.Date Serie AAAA-MM-DD java.sql.Time Serie T16:57:30Z T16:57:30-05:00 T16:57:30+0400 16:57:30Z 16:57:30-05:00 16:57:30+0400 T16:57:30 16:57:30 Matriz Java (por ejemplo, [123, 456, 789]) colección Java de elementos de cualquier tipo de destino soportado, siempre y cuando todos los elementos sean del mismo tipo de datos Matriz JSON de elementos de cualquier tipo de destino soportado -
Formatos de salida JSON.
En la tabla siguiente se describen los formatos de salida JSON que puede esperar para distintos tipos de datos que devuelven los métodos de tipo get de beans de datos y los mandatos de controlador:
Bean de datos o tipo de datos de retorno de mandato de controlador Tipo de datos JSON Formato JSON (si aplica) java.lang.String Cadena JSON java.lang.Number (por ejemplo, entero, largo, decimal grande) o números primitivos Número JSON java.lang.Boolean (o bool
)Booleano JSON java.util.Date Cadena JSON 1975-08-04T12:35:00.123Z java.sql.Timestamp Cadena JSON 2014-08-01T13:41:07.000000000Z java.sql.Date Cadena JSON AAAA-MM-DD java.sql.Time Cadena JSON 13:41:07Z Matriz Java (por ejemplo, [123, 456, 789]) o colección Java (se espera que todos los elementos sean del mismo tipo de datos) Matriz JSON Correlación Java Objeto JSON (las claves son cadenas, los valores son de cualquier tipo de retorno soportado)