Avalados por :

Como resolver problemas com ampersands em Java Map para evitar erros de XML

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

Tenho um Java Map que funciona perfeitamente, exceto quando os dados recebidos através do mapeamento contêm um ampersand ( & ). Tentei adicionar um replaceAll("&","&") antes de emitir o texto, mas o problema persiste.

Quando executo o mapeamento na ferramenta de teste de design IB, o mapeamento é executado e gera um erro de "XML mal formado". De fato, se eu verificar a saída, o documento XML pára no elemento <PartnerName>, que contém um valor de ampersand. Se eu alterar o valor do nome do parceiro na ferramenta de teste antes de executar a transformação, tudo funciona.

Alguma sugestão?

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

4 Respuestas

0
Cargando...

O arquivo de teste XML possui o seguinte elemento que está causando um erro:

<BillToParty>

<BuyerID>7001</BuyerID>

<Address>

<OrganisationFormattedName>C&L</OrganisationFormattedName>

(Este é apenas um exemplo do arquivo)

Este arquivo acima passa por uma rotina de mapeamento que converte o conteúdo do SAP-XLM para o formato PIDX. Isso funciona bem e resulta no seguinte formato de arquivo:

<ns2:PartnerName>C&L</ns2:PartnerName>

Agora, se eu ativar meu Java Map após o mapeamento de mensagens, ele me dá o erro mencionado com o arquivo não transformado completamente. Também notei ao testar o Mapeamento Java no Netweaver Developer Studio que a streamTransformation parece converter automaticamente C%amp;L para C&L na saída sem a necessidade de nenhum código adicional.

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

Olá Netrouter,

Pode publicar a parte do XML que está gerando erro aqui?

Saudações,

Prashanth

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

Obrigado por todas as respostas. Tudo isso é novo para mim, então terei que ler com atenção. Parece que tenho duas opções. A primeira, se entendi corretamente, seria manter o programa como está, mas adicionar um replaceAll("&","&"); na seção de caracteres do programa após a configuração do StringBuffer.

A segunda opção é que preciso modificar o programa para usar javax.xml.transform para gerar a saída de dados. Isso parece um pouco mais complicado, mas parece ser o melhor método para lidar com os caracteres especiais.

Incluí meu programa de mapeamento abaixo:

package package1;

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

import org.xml.sax.*;

import java.io.*;

import org.xml.sax.helpers.DefaultHandler;

import javax.xml.parsers.SAXParserFactory;

import java.util.Map;

import javax.xml.parsers.SAXParser;

public class PrefixChange extends DefaultHandler implements StreamTransformation{

StringBuffer textBuffer;

OutputStream Output;

// Valor a ser substituído

String shortNS = "PIDX";

String stdPrefix = "ns2";

String xmlStartStr = "<?xml version='1.0' encoding='UTF-8'?>";

private Map map;

public void setParameter(Map param)

{

map = param;

}

// Configurar o Analisador SAX

public void execute (InputStream in, OutputStream out)

throws com.sap.aii.mapping.api.StreamTransformationException

{

...
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?