Avalados por :

Cómo solucionar problemas con ampersands en Java Map para evitar errores de XML

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

Tengo un Java Map que funciona perfectamente a menos que los datos que llegan a través del mapeo sean un ampersand ( & ). Intenté agregar un replaceAll("&","&") antes de emitir el texto, pero el problema persiste.

Cuando ejecuto el mapeo en la herramienta de prueba de diseño IB, el mapeo se ejecuta y produce un error de "XML no bien formado". Efectivamente, si reviso la salida, el documento XML se detiene en el elemento <PartnerName>, que contiene un valor de ampersand. Si cambio el valor del nombre del socio en la herramienta de prueba antes de ejecutar la transformación, todo funciona.

¿Alguna sugerencia?

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

4 Respuestas

0
Cargando...

El archivo de prueba XML tiene el siguiente elemento que está causando un error:

<BillToParty>

<BuyerID>7001</BuyerID>

<Address>

<OrganisationFormattedName>C&L</OrganisationFormattedName>

(Esto es solo un ejemplo del archivo)

Este archivo anterior se pasa a través de un rutina de mapeo que cambia el contenido de SAP-XLM al formato PIDX. Esto funciona bien y resulta en el siguiente formato de archivo:

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

Ahora, si activo mi Java Map después del mapa de mensajes, me da el error anterior con el archivo no transformado completamente. También noté al probar el Mapeo de Java en Netweaver Developer Studio que la streamTransformation parece convertir automáticamente C%amp;L a C&L en mi salida sin necesidad de ningún código adicional.

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

Hola Netrouter,

¿Puedes publicar la parte del XML que está generando error aquí?

Saludos,

Prashanth

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

Gracias por todas las respuestas. Todo esto es nuevo para mí, así que tendré que leer seriamente. Parece que tengo dos opciones. La primera, si entiendo correctamente, sería mantener el programa como está pero agregar un replaceAll("&","&"); en la sección de caracteres del programa después de la configuración del StringBuffer.

La segunda es que necesito modificar el programa para usar javax.xml.transform para generar la salida de datos. Esto suena un poco más complicado pero parece ser el mejor método para tratar con los caracteres especiales.

He incluido mi programa de mapeo a continuación:

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 reemplazar

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 el Analizador 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?