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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top