Pregunta

Tengo un servicio web y un cliente que pasan cadenas que contienen referencias de caracteres como & amp; # 26; (0x1A). Estos no son válidos en XML 1.0 pero válidos en XML 1.1. El analizador XML de Axis está lanzando excepciones debido a estas referencias de caracteres. ¿Hay alguna forma de obligarlo a analizar la respuesta como XML 1.1 o insertar la declaración XML? (Actualmente no hay ninguno). Investigué el uso de controladores, pero entiendo que se invocan después de que el XML ya se ha analizado.

¿Fue útil?

Solución

¿Está pasando un InputStream o Reader ? Si es así, puede ajustar la fuente en otra clase (como BufferedReader funciona) pero usarla para descartar los caracteres innecesarios.

Otros consejos

Creo que vas a tener un momento bastante difícil con esto. Tengo entendido que el estándar WSDL 2.0 está construido en XML 1.0. Entonces, ¿qué tipo de servicio llama que se describe a sí mismo con WSDL (suponiendo XML 1.0) y luego comienza a enviarle mensajes con caracteres XML 1.1?

Cuando define un servicio Axis2, puede definir qué controladores tiene en el archivo services.xml. Por ejemplo, en esta página tienen un servicio que usé org.apache.axis2.receivers.RawXMLINOutMessageReceiver ... Sé que eso no es lo que estás tratando de hacer, pero tal vez es un lugar para comenzar a mirar o pensar.

Hay una opción más: hacer que el analizador trate la entrada como XML 1.1. Dado que Axis2 utiliza el analizador Woodstox, puede extender el WstxInputFactory y anular el método createPrivateConfig () :

@Override
public ReaderConfig createPrivateConfig() {
    ReaderConfig config = super.createPrivateConfig();
    config.enableXml11(true);
    return config;
}

Luego use esa fábrica personalizada a través de la propiedad del sistema: -Djavax.xml.stream.XMLInputFactory=mypackage.MyWstxInputFactory

Tenga en cuenta que dicha solución es solo para casos en los que no puede alterar absolutamente el servicio web defectuoso que produce XML no válido. Es posible encontrar efectos secundarios.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top