Verwenden Sie XML 1.1 in Achse2
-
19-08-2019 - |
Frage
Lösung
Geben Sie in einem vorbei InputStream
oder Reader
? Wenn ja, können Sie die Quelle in einer anderen Klasse einwickeln (wie wie BufferedReader
funktioniert) aber verwenden Sie es, um die unnötigen Zeichen fallen zu lassen.
Andere Tipps
Ich denke, Sie werden es eine ziemlich schwere Zeit damit haben. Mein Verständnis ist, dass der WSDL 2.0 -Standard auf XML 1.0 basiert. Welche Art von Dienst rufen Sie also an, der sich selbst mit WSDL beschreibt (unter der Annahme von XML 1.0) und dann anfängt, Ihnen Nachrichten mit XML 1.1 -Zeichen zu senden?
Wenn Sie einen Axis2 -Dienst definieren, können Sie definieren, welche Handler sie in der Datei dienste.xml haben. Zum Beispiel auf diese Seite Sie haben einen Service, der den org.apache.axis2.receivers.rawxmlinoutMessagereceiver verwendet hat ... Ich weiß, das ist nicht das, was Sie versuchen zu tun, aber vielleicht ist es ein Ort, um zu suchen oder zu denken.
Es gibt noch eine Option - damit der Parser den Eingang als XML 1.1 behandelt. Da Axis2 Woodstox -Parser verwendet, können Sie die erweitern WstxInputFactory
und überschreiben die Methode createPrivateConfig()
:
@Override
public ReaderConfig createPrivateConfig() {
ReaderConfig config = super.createPrivateConfig();
config.enableXml11(true);
return config;
}
Verwenden Sie dann diese benutzerdefinierte Fabrik über die Systemeigenschaft: -Djavax.xml.stream.xmlinputfactory = mypackage.mywstxInputFactory
Beachten Sie, dass eine solche Problemumgehung nur für Fälle gilt, wenn Sie den fehlerhaften Webdienst, der ungültige XML erzeugt, absolut nicht ändern kann. Es ist möglich, Nebenwirkungen zu begegnen.