Utilizzo di XML 1.1 in Axis2
-
19-08-2019 - |
Domanda
Ho un servizio web e un client che stanno passando stringhe contenenti riferimenti a caratteri come & amp; # 26; (0x1A). Questi non sono validi in XML 1.0 ma validi in XML 1.1. Il parser XML di Axis genera eccezioni a causa di questi riferimenti ai caratteri. C'è un modo per forzarlo ad analizzare la risposta come XML 1.1 o per inserire la dichiarazione XML? (Attualmente non ce n'è uno.) Ho esaminato l'uso dei gestori, ma la mia comprensione è che vengono invocati dopo che l'XML è già stato analizzato.
Soluzione
Stai trasmettendo un InputStream
o Reader
? In tal caso, potresti racchiudere il sorgente in un'altra classe (come funziona BufferedReader
) ma utilizzarlo per eliminare i caratteri non necessari.
Altri suggerimenti
Penso che avrai un momento piuttosto difficile con questo. La mia comprensione è che lo standard WSDL 2.0 è basato su XML 1.0. Quindi che tipo di servizio stai chiamando che si descrive con WSDL (presupponendo XML 1.0) e quindi inizia a inviarti messaggi con caratteri XML 1.1 in esso?
Quando si definisce un servizio Axis2, è possibile definire quali gestori ha nel file services.xml. Ad esempio su questa pagina hanno un servizio che usato org.apache.axis2.receivers.RawXMLINOutMessageReceiver ... So che non è quello che stai cercando di fare, ma forse è un posto per iniziare a guardare o pensare.
Esiste un'altra opzione: far sì che il parser tratti l'input come XML 1.1.
Poiché Axis2 utilizza il parser Woodstox, è possibile estendere WstxInputFactory
e sovrascrivere il metodo createPrivateConfig ()
:
@Override
public ReaderConfig createPrivateConfig() {
ReaderConfig config = super.createPrivateConfig();
config.enableXml11(true);
return config;
}
Quindi utilizza quella fabbrica personalizzata tramite la proprietà di sistema: -Djavax.xml.stream.XMLInputFactory=mypackage.MyWstxInputFactory
Si noti che tale soluzione alternativa è solo per i casi in cui non è assolutamente possibile modificare il servizio Web buggy che produce XML non valido. È possibile riscontrare effetti collaterali.