2012-10-24 76 views
0

所以,當你使用wash_out寶石Rails和客戶端發送壞XML,反應是這樣的:wash_out解析故障:SOAP錯誤,而不是HTML錯誤

<html>… 
    <body> 
    <h1>REXML::ParseException</h1> 
    … 

取而代之的是正確的SOAP響應,像這樣:

<soap:Body> 
    <soap:Fault> 
    <faultcode>soap:Client</faultcode> 
    … 

我第一次嘗試修補wash_out本身。我設法在其測試中重現了 REXML :: ParseException,但後來發現我的沮喪 Rails實際上在bad_out之前解析(並且爆炸)了不良的XML,然後012_觸及了參數。

那麼,wash_out gem應該如何鉤入Rails,以便它可以解救那些異常,僅限於它擁有的路由?

這是我們必須合作的回溯。我很肯定有它的一些 點是天造地設掛接到,但我還不知道其中:

malformed XML: missing tag start 
Line: 13 
Position: 558 
Last 80 unconsumed characters: 
<urn:    <Width xsi:type="xsd:int">1</Width>    <Height x 
Line: 13 
Position: 558 
Last 80 unconsumed characters: 
<urn:    <Width xsi:type="xsd:int">1</Width>    <Height x): 
    /home/rking/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/rexml/parsers/treeparser.rb:95:in `rescue in parse' 
    /home/rking/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/rexml/parsers/treeparser.rb:20:in `parse' 
    /home/rking/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/rexml/document.rb:231:in `build' 
    /home/rking/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/rexml/document.rb:43:in `initialize' 
    activesupport (3.2.8) lib/active_support/xml_mini/rexml.rb:30:in `new' 
    activesupport (3.2.8) lib/active_support/xml_mini/rexml.rb:30:in `parse' 
    activesupport (3.2.8) lib/active_support/xml_mini.rb:80:in `parse' 
    activesupport (3.2.8) lib/active_support/core_ext/hash/conversions.rb:90:in `from_xml' 
    actionpack (3.2.8) lib/action_dispatch/middleware/params_parser.rb:41:in `parse_formatted_parameters' 
    actionpack (3.2.8) lib/action_dispatch/middleware/params_parser.rb:17:in `call' 
    actionpack (3.2.8) lib/action_dispatch/middleware/flash.rb:242:in `call' 
    rack (1.4.1) lib/rack/session/abstract/id.rb:205:in `context' 
    rack (1.4.1) lib/rack/session/abstract/id.rb:200:in `call' 
    actionpack (3.2.8) lib/action_dispatch/middleware/cookies.rb:339:in `call' 
    activerecord (3.2.8) lib/active_record/query_cache.rb:64:in `call' 
    activerecord (3.2.8) lib/active_record/connection_adapters/abstract/connection_pool.rb:473:in `call' 
    actionpack (3.2.8) lib/action_dispatch/middleware/callbacks.rb:28:in `block in call' 
    activesupport (3.2.8) lib/active_support/callbacks.rb:405:in `_run__937528092__call__217727214__callbacks' 
    activesupport (3.2.8) lib/active_support/callbacks.rb:405:in `__run_callback' 
    activesupport (3.2.8) lib/active_support/callbacks.rb:385:in `_run_call_callbacks' 
    activesupport (3.2.8) lib/active_support/callbacks.rb:81:in `run_callbacks' 
    actionpack (3.2.8) lib/action_dispatch/middleware/callbacks.rb:27:in `call' 
    actionpack (3.2.8) lib/action_dispatch/middleware/reloader.rb:65:in `call' 
    actionpack (3.2.8) lib/action_dispatch/middleware/remote_ip.rb:31:in `call' 
    actionpack (3.2.8) lib/action_dispatch/middleware/debug_exceptions.rb:16:in `call' 
    actionpack (3.2.8) lib/action_dispatch/middleware/show_exceptions.rb:56:in `call' 
    railties (3.2.8) lib/rails/rack/logger.rb:26:in `call_app' 
    railties (3.2.8) lib/rails/rack/logger.rb:16:in `call' 
    actionpack (3.2.8) lib/action_dispatch/middleware/request_id.rb:22:in `call' 
    rack (1.4.1) lib/rack/methodoverride.rb:21:in `call' 
    rack (1.4.1) lib/rack/runtime.rb:17:in `call' 
    activesupport (3.2.8) lib/active_support/cache/strategy/local_cache.rb:72:in `call' 
    rack (1.4.1) lib/rack/lock.rb:15:in `call' 
    actionpack (3.2.8) lib/action_dispatch/middleware/static.rb:62:in `call' 
    railties (3.2.8) lib/rails/engine.rb:479:in `call' 
    railties (3.2.8) lib/rails/application.rb:223:in `call' 
    rack (1.4.1) lib/rack/content_length.rb:14:in `call' 
    railties (3.2.8) lib/rails/rack/log_tailer.rb:17:in `call' 
    rack (1.4.1) lib/rack/handler/webrick.rb:59:in `service' 
    /home/rking/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/webrick/httpserver.rb:138:in `service' 
    /home/rking/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/webrick/httpserver.rb:94:in `run' 
    /home/rking/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/webrick/server.rb:191:in `block in start_thread' 

謝謝! -☈

回答