0 votes

Ruby REXML lève une ParseException, mais le parseur xml de PHP fonctionne

J'essaie d'appeler un service web depuis une page PHP via un script en Ruby. Le script PHP renvoie une chaîne de caractères et appelle lui-même un autre service web ; j'ai testé le script PHP seul et il renvoie une seule chaîne de caractères. J'essaie d'appeler cette méthode via RPC en utilisant le code suivant :

require 'soap/rpc/driver'
driver = SOAP::RPC:Driver.new('http://mysite.com/services/webservices.php', 'urn:mysite')
driver.add_method('getMobileCarrier', 'phoneNumber')
driver.getMobileCarrier('15551234567') # fake number, obviously

Je reçois ce résultat :

REXML::ParseException: malformed XML: missing tag start
Line: 
Position: 
Last 80 unconsumed characters:
< in <b>/var/www/html/services/webservices.php</b>
    from /opt/local/lib/ruby/1.8/rexml/parsers/baseparser.rb:356:in `pull'
    from /opt/local/lib/ruby/1.8/rexml/parsers/streamparser.rb:16:in `parse'
    from /opt/local/lib/ruby/1.8/rexml/document.rb:201:in `parse_stream'
    from /opt/local/lib/ruby/1.8/xsd/xmlparser/rexmlparser.rb:27:in `do_parse'
    from /opt/local/lib/ruby/1.8/soap/parser.rb:92:in `parse'
    from /opt/local/lib/ruby/1.8/soap/processor.rb:39:in `unmarshal'
    from /opt/local/lib/ruby/1.8/soap/rpc/proxy.rb:236:in `unmarshal'
    from /opt/local/lib/ruby/1.8/soap/rpc/proxy.rb:175:in `route'
    from /opt/local/lib/ruby/1.8/soap/rpc/proxy.rb:141:in `call'
    from /opt/local/lib/ruby/1.8/soap/rpc/driver.rb:178:in `call'
    from /opt/local/lib/ruby/1.8/soap/rpc/driver.rb:232:in `getMobileCarrier'
    from (irb):4

Cependant, lorsque j'exécute le code PHP lui-même (et que je lui donne une valeur réelle, évidemment), il ne génère aucune erreur et renvoie la valeur attendue. Cela ne fonctionne pas avec Ruby et REXML ; comment puis-je résoudre ce problème ? Le service web que le script PHP appelle est celui d'un tiers et je ne peux pas modifier la réponse, mais il est évident que la réponse fonctionne bien en PHP mais que REXML a un problème avec elle.

1voto

Mark Carey Points 1043

Sans le xml qui est retourné, il est difficile de dire. Avez-vous essayé d'utiliser un outil de validation xml comme : xmlstarlet, xmllint, ou tidy.

Ces outils vous indiqueront si votre xml est bien formé. S'il n'est pas bien formé, tout dépend de ce qui ne va pas et de la façon dont vous pouvez le corriger.

Postez plus de détails pour une meilleure réponse.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X