我正在尝试通过Ruby脚本从PHP页面调用Web服务。 PHP脚本返回一个字符串,它本身调用另一个Web服务;我已经单独测试了PHP脚本,它返回一个字符串。我正在尝试使用以下代码通过RPC调用此方法:
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
我得到了这个结果:
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
然而,当我运行PHP代码本身(显然给它一个真正的值)时,它根本不会抛出任何错误并返回预期的值。它只是不使用Ruby和REXML;我怎样才能解决这个问题? PHP脚本正在调用的Web服务由第三方提供,我无法修改响应,但很明显,响应在PHP中运行良好,但REXML存在问题。
答案 0 :(得分:1)
如果没有返回的xml,很难说。您是否尝试使用xml验证工具,例如:xmlstarlet,xmllint或tidy。
这些工具会告诉您xml是否格式正确。如果它没有很好地形成,那么它取决于它如何解决它的问题。
发布更多详细信息以获得更好的答案。