Avalados por :

Como converter dados JSON para XML no SAP PI/PO: código e erro de mapeamento resolvidos

  • Creado 01/03/2024
  • Modificado 01/03/2024
  • 19 Vistas
0
Cargando...

Prezados Especialistas,

Estou tentando converter dados JSON em XML com o seguinte código compartilhado por Hareesh. Funciona bem ao ser testado na guia de Teste de Mapeamento de Operação ESR. Porém, ao executar o mesmo payload durante o tempo de execução, um erro é exibido.

Código

package com.sap.json;

import java.io.BufferedReader;

import java.io.InputStream;

import java.io.InputStreamReader;

import org.json.JSONObject;

import com.sap.aii.mapping.api.AbstractTransformation;

import com.sap.aii.mapping.api.StreamTransformationException;

import com.sap.aii.mapping.api.TransformationInput;

import com.sap.aii.mapping.api.TransformationOutput;

public class ConvJsonXml extends AbstractTransformation {

public void transform(TransformationInput in, TransformationOutput out) throws StreamTransformationException {

try {

String sourcexml = ""; String targetxml =""; String line ="";

InputStream ins = in.getInputPayload().getInputStream();

BufferedReader br = new BufferedReader( new InputStreamReader(ins));

while ((line = br.readLine()) != null)

sourcexml +=line+"\n";

br.close();

JSONObject o = new JSONObject(sourcexml);

targetxml = org.json.XML.toString(o);

targetxml = "<root>"+targetxml+"</root>";

out.getOutputPayload().getOutputStream().write(targetxml.getBytes());

}

catch (Exception e) {

throw new StreamTransformationException(e.getMessage());

}

}

}

Carga

{

"items": [

{

"item": {

"Subject": "teste por DS Ross",

"DocumentID": "55DCE0A476D",

"Sender": "Rebecca",

"SenderName": "usuario1",

"Date": "2013-02-14 11:14:40",

"ClassID": "11"

}

},

{

"item": {

"Subject": "teste por Nick M",

"DocumentID": "55DCE191D5E47",

"Sender": "Dave Froster",

"SenderName": "usuario11",

"Date": "2013-03-14 11:14:40",

"ClassID": "11"

}

}

]

}

Ao ser testado na guia de Teste de Mapeamento de Operação, não são exibidos erros. Porém, ao receber o mesmo payload do servidor, ocorre um erro de mapeamento

<SAP:Stack> com.sap.engine.interfaces.messaging.api.exception.MessagingException: com.sap.engine.interfaces.messaging.api.exception.MessagingException: Error encontrado ao executar o mapeamento: com.sap.aii.af.service.mapping.MappingException: O programa de mapeamento de aplicação com/sap/json/ConvJsonXml lança uma exceção de transformação de fluxo: Um texto JSONObject deve começar com '{' em 1 [carácter 2 linha 1] em com.sap.aii.adapter.soap.web.SOAPHandler.processSOAPtoXMB(SOAPHandler.java:746) em com.sap.aii.adapter.soap.web.MessageServlet.doPost(MessageServlet.java:505) em javax.servlet.http.HttpServlet.service(HttpServlet.java:754) em javax.servlet.http.HttpServlet.service(HttpServlet.java:847) em com.sap.engine.services.servlets_jsp.server.runtime.FilterChainImpl.runServlet(FilterChainImpl.java:202) em

Agradeço a ajuda compartilhada..

Saudações......

Pedro Pascal
Se unió el 07/03/2018
Pinterest
Telegram
Linkedin
Whatsapp

4 Respuestas

0
Cargando...

Encontrei esse problema também e aqui está a solução (caso alguém se depare com isso):

char a = '{';
char b = '}';

sourcexml = sourcexml.substring(sourcexml.indexOf(a), sourcexml.lastIndexOf(b) + 1);

JSONObject o = new JSONObject(sourcexml);

Logo antes da instância do JSONObject, adicione essa declaração. Essa declaração procurará o primeiro índice de '{' e o último índice de '}' e manterá a subcadeia. Adicionar 1 é necessário para manter a chave de fechamento.

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Olá Rebecca,

O que você quer dizer com "não está funcionando"? O System.out.println((int)sourcexml.charAt(0)); retorna 123?

Se não for o caso, o problema pode ser na recepção da carga útil, pois sourcexml deve começar com uma chave.

Por favor, nos informe qual "int" você está recebendo.

Saudações,
Pierre.

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Olá Pierre,

Obrigado.

Sim, estou utilizando a mesma carga útil que recebi após executá-la a partir do SOAP UI ao disparar a URL. Funciona na atribuição de operações, mas falha quando a inicio a partir do ABAP Proxy para o serviço JSON.

Tentei o sugerido acima e não funcionou...

Saudações...

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Olá Rebecca,

Você tem certeza de que está recebendo o mesmo payload exato que descreveu do servidor?

Você pode tentar:

System.out.println((int)sourcexml.charAt(0));

O que deve retornar 123. 123 significa que começa com uma chave de abertura.

Este thread em stackoverflow.com também pode ajudar:

http://stackoverflow.com/questions/19586199/aws-json-exception-a-jsonobject-text-must-begin-with-at-...

Saudações,

Pierre.

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019

contacto@primeinstitute.com

(+51) 1641 9379
(+57) 1489 6964

© 2024 Copyright. Todos los derechos reservados.

Desarrollado por Prime Institute

¡Hola! Soy Diana, asesora académica de Prime Institute, indícame en que curso estas interesado, saludos!
Hola ¿Puedo ayudarte?