# Error calling a SOAP service from within a Rails controller

**URL:** <https://www.ruby-forum.com/t/error-calling-a-soap-service-from-within-a-rails-controller/97776>\
**Category:** Ruby\
**Created:** [January 26, 2006, 9:38pm UTC](https://www.ruby-forum.com/t/error-calling-a-soap-service-from-within-a-rails-controller/97776 "2006-01-26T21:38:18Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![deanhiller](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/df705f/32.png) [@deanhiller](https://www.ruby-forum.com/u/deanhiller)\
**Post date:** [January 26, 2006, 9:38pm UTC](https://www.ruby-forum.com/t/error-calling-a-soap-service-from-within-a-rails-controller/97776/1 "2006-01-26T21:38:18Z")

</div>

The following works fine as a standalone ruby program:

* * *

t = Time.now  
starter = Time.local(t.year,t.mon, t.day) + (24 \*3600)  
ender = starter + 7 \* 24 \*3600  
lat = 40.352039  
lon = -74.191961

require ‘soap/wsdlDriver’

params = {:maxt =\> false, :mint =\> false, :temp =\> true, :dew =\> false,  
:pop12 =\> false, :qpf =\> false, :sky =\> false, :snow =\> false,  
:wspd =\> false, :wdir =\> false, :wx =\> false, :waveh =\> false,  
:icons =\> false, :rh =\> false, :appt =\> true}

wsdl = “[http://www.weather.gov/forecasts/xml/DWMLgen/wsdl/ndfdXML.wsdl](http://www.weather.gov/forecasts/xml/DWMLgen/wsdl/ndfdXML.wsdl)”  
drv = SOAP::WSDLDriverFactory.new(wsdl).create\_rpc\_driver  
drv.wiredump\_dev = STDOUT if $DEBUG  
dwml = drv.NDFDgen(lat, lon, ‘time-series’, starter, ender, params)  
puts dwml  
require ‘xsd/mapping’  
data = XSD::Mapping.xml2obj(dwml).data

* * *

However, when I try to call the same from within a ruby controller, I  
get:

SOAP::HTTPStreamError (502: Bad Gateway):  
c:/ruby-1.8.4/lib/ruby/1.8/soap/streamHandler.rb:200:in `send_post' c:/ruby-1.8.4/lib/ruby/1.8/soap/streamHandler.rb:109:in `send’  
c:/ruby-1.8.4/lib/ruby/1.8/soap/rpc/proxy.rb:170:in `route' c:/ruby-1.8.4/lib/ruby/1.8/soap/rpc/proxy.rb:141:in `call’  
c:/ruby-1.8.4/lib/ruby/1.8/soap/rpc/driver.rb:178:in `call' c:/ruby-1.8.4/lib/ruby/1.8/soap/rpc/driver.rb:232:in `nDFDgen’  
c:/ruby-1.8.4/lib/ruby/1.8/soap/wsdlDriver.rb:117:in `NDFDgen’

The code in my controller is:

* * *

```
   def get_weather
            lat = params[:lat]
            lon = params[:lon]

            t = Time.now
            starter = Time.local(t.year,t.mon, t.day) + (24 *3600)
            ender = starter + 7 * 24 *3600

            params = {:maxt => false, :mint => false, :temp =>

```

true, :dew =\> false,  
:pop12 =\> false, :qpf =\> false, :sky =\> false,  
:snow =\> false,  
:wspd =\> false, :wdir =\> false, :wx =\> false,  
:waveh =\> false,  
:icons =\> false, :rh =\> false, :appt =\> true}

```
            wsdl =

```

“[http://www.weather.gov/forecasts/xml/DWMLgen/wsdl/ndfdXML.wsdl](http://www.weather.gov/forecasts/xml/DWMLgen/wsdl/ndfdXML.wsdl)”  
drv =  
SOAP::WSDLDriverFactory.new(wsdl).create\_rpc\_driver  
drv.wiredump\_dev = STDOUT if $DEBUG  
dwml = drv.NDFDgen(lat, lon, ‘time-series’, starter,  
ender, params)

```
            @data = XSD::Mapping.xml2obj(dwml).data

    end

```

* * *

---

<div class="post-metadata">

**Author:** ![deanhiller](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/df705f/32.png) [@deanhiller](https://www.ruby-forum.com/u/deanhiller)\
**Post date:** [January 26, 2006, 9:50pm UTC](https://www.ruby-forum.com/t/error-calling-a-soap-service-from-within-a-rails-controller/97776/2 "2006-01-26T21:50:22Z")

</div>

When you’re playing with SOAP in Rails, I think you want to use  
ActionWebService. See:  
[http://rails.rubyonrails.com/classes/ActionWebService/Client/Soap.html](http://rails.rubyonrails.com/classes/ActionWebService/Client/Soap.html)

For Rails specific questions such as this, try the Rails mailing list,  
at [http://lists.rubyonrails.org/mailman/listinfo/rails](http://lists.rubyonrails.org/mailman/listinfo/rails) or  
[http://www.ruby-forum.com/forum/3](http://www.ruby-forum.com/forum/3)

---

<div class="post-metadata">

**Author:** ![deanhiller](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/df705f/32.png) [@deanhiller](https://www.ruby-forum.com/u/deanhiller)\
**Post date:** [January 26, 2006, 10:23pm UTC](https://www.ruby-forum.com/t/error-calling-a-soap-service-from-within-a-rails-controller/97776/3 "2006-01-26T22:23:38Z")

</div>

thanks, I’ve tried using ActionWebService::Client::SOAP, but I get the  
same error (pretty much), here’s the version of the method within my  
Controller that used ActionWebService:

def get\_weather  
lat = params[:lat]  
lon = params[:lon]  
t = Time.now  
starter = Time.local(t.year,t.mon, t.day) + (24 \*3600)  
ender = starter + 7 \* 24 \*3600

```
	params = WeatherParametersType.new({:maxt => false, :mint => false,

```

:temp =\> true, :dew =\> false,  
:pop12 =\> false, :qpf =\> false, :sky =\> false, :snow =\> false,  
:wspd =\> false, :wdir =\> false, :wx =\> false, :waveh =\> false,  
:icons =\> false, :rh =\> false, :appt =\> true})

```
  	soap_client = ActionWebService::Client::Soap.new(WeatherAPI,

```

“[NuSOAP: ndfdXML](http://www.weather.gov/forecasts/xml/SOAP_server/ndfdXMLserver.php)”)  
@dwml = soap\_client.NDFDgen(lat, lon, ‘time-series’, starter, ender,  
params)  
@data = @dwml  
end

and I’m using these classes I’ve defined:

class WeatherParametersType \< ActionWebService::Struct  
member :maxt, :boolean  
member :mint, :boolean  
member :temp, :boolean  
member :dew, :boolean  
member :pop12, :boolean  
member :qpf, :boolean  
member :sky, :boolean  
member :snow, :boolean  
member :wspd, :boolean  
member :wdir, :boolean  
member :wx, :boolean  
member :waveh, :boolean  
member :icons, :boolean  
member :rh, :boolean  
member :appt, :boolean  
end

class WeatherAPI \< ActionWebService::API::Base  
api\_method :NDFDgen, :expects =\> [[Float], [Float], [String], [Time],  
[Time], [WeatherParametersType]], :returns =\> [String]  
end

The error stack trace:

SOAP::HTTPStreamError (502: Bad Gateway):  
c:/ruby-1.8.4/lib/ruby/1.8/soap/streamHandler.rb:200:in `send_post' c:/ruby-1.8.4/lib/ruby/1.8/soap/streamHandler.rb:109:in `send’  
c:/ruby-1.8.4/lib/ruby/1.8/soap/rpc/proxy.rb:170:in `route' c:/ruby-1.8.4/lib/ruby/1.8/soap/rpc/proxy.rb:141:in `call’  
c:/ruby-1.8.4/lib/ruby/1.8/soap/rpc/driver.rb:178:in `call' c:/ruby-1.8.4/lib/ruby/1.8/soap/rpc/driver.rb:232:in `NDFDgen’  
c:/ruby-1.8.4/lib/ruby/gems/1.8/gems/actionwebservice-1.0.0/lib/action\_web\_s  
ervice/client/soap\_client.rb:61:in `perform_invocation' c:/ruby-1.8.4/lib/ruby/gems/1.8/gems/actionwebservice-1.0.0/lib/action_web_s ervice/client/base.rb:15:in `method\_missing’

---

<div class="post-metadata">

**Author:** ![deanhiller](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/df705f/32.png) [@deanhiller](https://www.ruby-forum.com/u/deanhiller)\
**Post date:** [January 28, 2006, 1:06am UTC](https://www.ruby-forum.com/t/error-calling-a-soap-service-from-within-a-rails-controller/97776/4 "2006-01-28T01:06:58Z")

</div>

well it turns out I was passing bad parameters to the service. weird  
response though…
