SAXParseException: structures de document XML doit commencer et se terminer dans la même entité
Je suis d'appeler un service web de Apache Axis 1.4 client Java. L'appel parvient au serveur correctement, mais le client est en train de lancer cette exception après environ un couple de minutes:
AxisFault
faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException
faultSubcode:
faultString: org.xml.sax.SAXParseException: XML document structures must start and end within the same entity.
faultActor:
faultNode:
faultDetail:
L'exception n'est pas toujours le même. Parfois, il spécifie un élément spécifique dans la réponse:
AxisFault
faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException
faultSubcode:
faultString: org.xml.sax.SAXParseException: The element type "name" must be terminated by the matching end-tag "</name>".
faultActor:
faultNode:
faultDetail:
L'appel de service web que je suis en train de renvoie une grande quantité de données. Si j'ai configurer le serveur renvoie les moins de données, l'appel est terminé avec succès.
Remarque: Bien que je ne suis pas le client le temps de quelques exceptions, j'ai tenté d'augmenter la valeur pour le délai de cinq minutes, mais cela n'a eu aucun effet.
OriginalL'auteur Zak | 2011-09-05
Vous devez vous connecter pour publier un commentaire.
Apache Axis 1.4 prend en charge le protocole HTTP 1.0 par défaut. Le serveur est à l'aide de HTTP 1.1, qui, apparemment, supporte l'Encodage de Transfert en Bloc.
De w3.org:
Ce qui signifie que l'Axe 1.4 ne sait rien sur les morceaux dans la réponse HTTP et probablement ferme la connexion avant de recevoir tous les morceaux. Lorsqu'il tente de désérialiser le message SOAP, il se plaint de ce que le XML n'est pas bien formé et manque un peu de balise de fermeture, ce qui est normal car il n'a pas la complète de la réponse SOAP.
La solution est de configurer l'Axe d'utiliser CommonsHTTPSender qui supporte le protocole HTTP 1.1 par défaut. Vous faites cela par l'ajout d'un client-config.wsdd sur votre classpath sous org/apache/axe/client/client-config.wsdd avec le contenu suivant:
Le réglage correspondant est le transport avec le nom "http".
La plupart des serveurs d'applications ont déjà cette classe chargé dans leur chemin de classe, dans le cas où il n'est pas, vous devez ajouter les Apache Commons HTTP jar à votre classpath.
OriginalL'auteur Zak