Question

J'ai un service Web et un client qui font passer des chaînes contenant des références de caractère telles que & amp; # 26; (0x1A). Celles-ci ne sont pas valides dans XML 1.0 mais valides dans XML 1.1. L'analyseur XML d'Axis génère des exceptions à cause de ces références de caractère. Existe-t-il un moyen de le forcer à analyser la réponse en tant que XML 1.1 ou à insérer la déclaration XML? (Il n'y en a pas actuellement.) J'ai envisagé d'utiliser des gestionnaires, mais je crois comprendre qu'ils sont invoqués après l'analyse du code XML.

Était-ce utile?

La solution

Passez-vous un InputStream ou un Reader ? Si tel est le cas, vous pouvez envelopper le code source dans une autre classe (comme BufferedReader , mais l'utiliser pour supprimer les caractères inutiles.

Autres conseils

Je pense que vous allez avoir beaucoup de difficultés avec ça. Si j'ai bien compris, la norme WSDL 2.0 repose sur XML 1.0. Alors, quel genre de service appelez-vous qui se décrit avec WSDL (en supposant que XML 1.0) et commence ensuite à vous envoyer des messages contenant des caractères XML 1.1?

Lorsque vous définissez un service Axis2, vous pouvez définir ses gestionnaires dans le fichier services.xml. Par exemple, sur cette page , ils ont un service qui utilisé le org.apache.axis2.receivers.RawXMLINOutMessageReceiver ... Je sais que ce n'est pas ce que vous essayez de faire, mais peut-être que c'est un endroit pour commencer à regarder ou à penser.

Il existe une option supplémentaire: faire en sorte que l’analyseur traite l’entrée comme XML 1.1. Axis2 utilisant l’analyseur Woodstox, vous pouvez étendre la méthode WstxInputFactory et la méthode de substitution createPrivateConfig () :

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

Utilisez ensuite cette fabrique personnalisée via la propriété système: -Djavax.xml.stream.XMLInputFactory = mypackage.MyWstxInputFactory

Notez que cette solution de contournement concerne uniquement les cas dans lesquels vous ne pouvez absolument pas modifier le service Web défectueux générant un code XML non valide. Il est possible de rencontrer des effets secondaires.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top