
El propósito de este documento es desarrollar una interfaz síncrona para descargar contenido de Open Text Content Server (OTCS) utilizando la API REST. He tratado de cubrir el diseño general con fragmentos de código como referencia.
Interfaz de sincronización para obtener el documento de OpenText a través de PO 7.5
Estructura de datos
El ID de documento para OTCS viene como DataID de SAP. El documento se devuelve a SAP como Contenido.
OIC
Mapeo (MM) y mapeo operativo (OM)
Tenga cuidado con el parámetro ICO anterior en
Solicitud de mapeo con mapeo java en la sección de atributos y métodos
public void transform(TransformationInput in, TransformationOutput out) throws StreamTransformationException {
try {
getTrace().addDebugMessage("***OTCS-Request-JavaMapping-Start");
//Get the mapping parameter from ICO
String paramChannel = in.getInputParameters().getString("lookupChannel");
String paramUserName = in.getInputParameters().getString("username");
String paramPassword = in.getInputParameters().getString("password");
String paramBoundary = in.getInputParameters().getString("boundary");
getTrace().addDebugMessage("***OTCS-Step1-LogPramFromICO-lookupChannel:" + paramChannel + "-username:"
+ paramUserName + "-password:" + paramPassword +"-boundary:" + paramBoundary);
//Creating multipart/form-data for OTCS authentication
String LINE_FEED = "\r\n";
String ContentDisposition = "Content-Disposition: form-data; name=\"";
String authReqFormData ="";
authReqFormData = LINE_FEED + paramBoundary + LINE_FEED + ContentDisposition + "username\"" + LINE_FEED
+ LINE_FEED + paramUserName + LINE_FEED + paramBoundary + LINE_FEED +ContentDisposition
+ "password\"" + LINE_FEED + LINE_FEED + paramPassword + LINE_FEED + paramBoundary + "–-" + LINE_FEED;
getTrace().addDebugMessage("***OTCS-Step2-multipart/form-data:" + authReqFormData);
//Read message header value for Receiver
String paramReceiver = in.getInputHeader().getReceiverService();
getTrace().addDebugMessage("***OTCS-Step3-ReceiverService:" + paramReceiver);
//Get the OTCS rest lookup Channel Object for authentication
Channel lookup_channel = LookupService.getChannel(paramReceiver, paramChannel);
//Call rest lookup channel, with multipart/form-data payload
SystemAccessor accessor = null;
accessor = LookupService.getSystemAccessor(lookup_channel);
InputStream authInputStream = new ByteArrayInputStream(authReqFormData.getBytes("UTF-8"));
Payload authPayload = LookupService.getXmlPayload(authInputStream);
Payload tokenOutPayload = null;
//Call lookup
getTrace().addDebugMessage("***OTCS-Step4-CallLookupChannel");
tokenOutPayload = accessor.call(authPayload);
//Parse for Lookup response for token
InputStream authOutputStream = tokenOutPayload.getContent();
DocumentBuilderFactory authfactory = DocumentBuilderFactory.newInstance();
DocumentBuilder authbuilder = authfactory.newDocumentBuilder();
Document authdocument = authbuilder.parse(authOutputStream);
NodeList nlticket = authdocument.getElementsByTagName("ticket");
String tokenTicket = "Empty";
Node node = nlticket.item(0);
if (node != null){
node = node.getFirstChild();
if (node != null){
tokenTicket = node.getNodeValue();
}
}
getTrace().addDebugMessage("***OTCS-Step5-TokenFromLookup:" + tokenTicket);
//Parse input stream and get DataID from SAP
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(in.getInputPayload().getInputStream());
String DataID = doc.getElementsByTagName("DataID").item(0).getTextContent();
getTrace().addDebugMessage("***OTCS-Step6-DataIDFromSAP: " + DataID);
//Create HTTP Header for rest call via setting DynamicConfiguration keys, that can be used in reciver channel
DynamicConfiguration conf = in.getDynamicConfiguration();
DynamicConfigurationKey keytokenTicket = DynamicConfigurationKey.create("http://sap.com/xi/XI/System/REST","HeadertokenTicket");
DynamicConfigurationKey keyDataID = DynamicConfigurationKey.create("http://sap.com/xi/XI/System/REST","HeaderDataID");
conf.put(keytokenTicket, tokenTicket);
conf.put(keyDataID, DataID);
String DummyPayload = "DummyPayload";
// Instantiating output stream to write at Target message
OutputStream os = out.getOutputPayload().getOutputStream();
// writing idoc to output stream
os.write(DummyPayload.getBytes("UTF-8"));
os.flush();
os.close();
getTrace().addDebugMessage("***OTCS-Request-JavaMapping-End");
}
catch (Exception e){
getTrace().addDebugMessage(e.getMessage().toString());
throw new StreamTransformationException(e.getMessage());
}
}
Mapeo de respuestas con mapeo de java en la sección de atributos y métodos
public void transform(TransformationInput in, TransformationOutput out) throws StreamTransformationException {
try
{
getTrace().addDebugMessage("***OTCS-Respose-JavaMapping-Start");
InputStream inputstream = in.getInputPayload().getInputStream();
OutputStream outputstream = out.getOutputPayload().getOutputStream();
//Copy Input Payload into Output xml
byte[] b = new byte[inputstream.available()];
inputstream.read(b);
//Form Output xml
String outputStart = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><ns0:MT_DocContent_Res xmlns:ns0=\"urn://XXXXXXXXXXX.com/OTCS/DocDownload\"><Content>";
String outputEnd = "</Content></ns0:MT_DocContent_Res>";
outputstream.write(outputStart.getBytes("UTF-8"));
outputstream.write(b);
outputstream.write(outputEnd.getBytes("UTF-8"));
outputstream.flush();
outputstream.close();
getTrace().addDebugMessage("***OTCS-Respose-JavaMapping-End");
}
catch (Exception e)
{
getTrace().addDebugMessage(e.getMessage().toString());
throw new StreamTransformationException(e.getMessage());
}
}
Canales
Tenemos tres canales en el flujo, como el canal Proxy de SAP, los canales Rest para la búsqueda de tokens y la obtención de documentos del OTCS.
Proxy – CC_OTCS_GetDoc_Proxy_Sender
Canal de búsqueda de descanso: CC_OTCS_Rest_LookUp
Tipo de contenido multipart/form-data; límite=SapPO75FormBoundaryhahahahahahaha FIN
Resto del canal de obtención de documentos: CC_OTCS_Rest_Receiver
otcsticket {otcsticket}
IDENTIFICACIÓN {IDENTIFICACIÓN}
Calle Eloy Gonzalo, 27
Madrid, Madrid.
Código Postal 28010
Paseo de la Reforma 26
Colonia Juárez, Cuauhtémoc
Ciudad de México 06600
Real Cariari
Autopista General Cañas,
San José, SJ 40104
Av. Jorge Basadre 349
San Isidro
Lima, LIM 15073