logo       

GET request works via curl, crashes from Java: msg#00212

lang.ruby.mongrel.general

Subject: GET request works via curl, crashes from Java

[That subject line is of course a severe truncation!]

I've got a REST request that works fine from curl but causes a
mongrel error when executed from a Java program. This all worked with
fine with rails 1.1.6 and webrick. I'm trying to update the app to
rails 1.2.1 (I need working around_filters).

I'm running in development mode with mongrel 1.01 running on macosx
10.4.8 w/ruby 1.8.4, rails 1.2.1.

When I do the following request with curl everything appears to work fine:

curl -I -X GET -H 'Accept: application/xml'
http://localhost:3000/1/offering/84/bundle/168/0

HTTP/1.1 200 OK
Connection: close
Date: Wed, 31 Jan 2007 04:41:24 GMT
Status: 200 OK
Cache-Control: no-cache
Server: Mongrel 1.0.1
Content-Type: text/xml; charset=utf-8
Content-Length: 2706

However when I try what is supposed to be the same request made from
a Java jnlp application mongrel reports this error:

You have a nil object when you didn't expect it!
You might have expected an instance of ActiveRecord::Base.
The error occurred while evaluating nil.update

/usr/local/lib/ruby/gems/1.8/gems/actionpack-1.13.1/lib/action_controller/request.rb:13:in

`parameters'

/usr/local/lib/ruby/gems/1.8/gems/actionpack-1.13.1/lib/action_controller/request.rb:20:in

`method'

/usr/local/lib/ruby/gems/1.8/gems/actionpack-1.13.1/lib/action_controller/routing.rb:1307:in

`extract_request_environment'

/usr/local/lib/ruby/gems/1.8/gems/actionpack-1.13.1/lib/action_controller/routing.rb:1256:in

`recognize'

/usr/local/lib/ruby/gems/1.8/gems/rails-1.2.1/lib/dispatcher.rb:40:in
`dispatch'

/usr/local/lib/ruby/gems/1.8/gems/mongrel-1.0.1/lib/mongrel/rails.rb:78:in
`process'

/usr/local/lib/ruby/gems/1.8/gems/mongrel-1.0.1/lib/mongrel/rails.rb:76:in
`process'

/usr/local/lib/ruby/gems/1.8/gems/mongrel-1.0.1/lib/mongrel.rb:618:in
`process_client'

/usr/local/lib/ruby/gems/1.8/gems/mongrel-1.0.1/lib/mongrel.rb:617:in
`process_client'
/usr/local/lib/ruby/gems/1.8/gems/mongrel-1.0.1/lib/mongrel.rb:736:in `run'
/usr/local/lib/ruby/gems/1.8/gems/mongrel-1.0.1/lib/mongrel.rb:736:in `run'
/usr/local/lib/ruby/gems/1.8/gems/mongrel-1.0.1/lib/mongrel.rb:720:in `run'

/usr/local/lib/ruby/gems/1.8/gems/mongrel-1.0.1/lib/mongrel/configurator.rb:271:in

`run'

/usr/local/lib/ruby/gems/1.8/gems/mongrel-1.0.1/lib/mongrel/configurator.rb:270:in

`run'

/usr/local/lib/ruby/gems/1.8/gems/mongrel-1.0.1/bin/mongrel_rails:127:in
`run'

/usr/local/lib/ruby/gems/1.8/gems/mongrel-1.0.1/lib/mongrel/command.rb:211:in
`run'
/usr/local/lib/ruby/gems/1.8/gems/mongrel-1.0.1/bin/mongrel_rails:243

/usr/local/lib/ruby/gems/1.8/gems/activesupport-1.4.0/lib/active_support/dependencies.rb:489:in

`load'

/usr/local/lib/ruby/gems/1.8/gems/activesupport-1.4.0/lib/active_support/dependencies.rb:343:in

`new_constants_in'

/usr/local/lib/ruby/gems/1.8/gems/activesupport-1.4.0/lib/active_support/dependencies.rb:489:in

`load'

/usr/local/lib/ruby/gems/1.8/gems/rails-1.2.1/lib/commands/servers/mongrel.rb:60
/usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in `require'

/usr/local/lib/ruby/gems/1.8/gems/activesupport-1.4.0/lib/active_support/dependencies.rb:496:in

`require'

/usr/local/lib/ruby/gems/1.8/gems/activesupport-1.4.0/lib/active_support/dependencies.rb:343:in

`new_constants_in'

/usr/local/lib/ruby/gems/1.8/gems/activesupport-1.4.0/lib/active_support/dependencies.rb:496:in

`require'
/usr/local/lib/ruby/gems/1.8/gems/rails-1.2.1/lib/commands/server.rb:39
/usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in `require'

/usr/local/lib/ruby/gems/1.8/gems/activesupport-1.4.0/lib/active_support/dependencies.rb:496:in

`require'

/usr/local/lib/ruby/gems/1.8/gems/activesupport-1.4.0/lib/active_support/dependencies.rb:343:in

`new_constants_in'

/usr/local/lib/ruby/gems/1.8/gems/activesupport-1.4.0/lib/active_support/dependencies.rb:496:in

`require'
script/server:3

Here's the code in request.rb:

# Returns both GET and POST parameters in a single hash.
def parameters
@parameters ||=
request_parameters.update(query_parameters).update(path_parameters).with_indifferent_access
end

The Java program is expecting an xml file and obviously isn't getting
what it is supposed to:

org.eclipse.emf.ecore.resource.Resource$IOWrappedException: Content
is not allowed in prolog.

I thought it was unlikely to be helpful but I turned $mongrel_debug_client:

kill -USR1 900

This appeared in the mongrel_log but nothing else:

** USR1 received, toggling $mongrel_debug_client to true

I'm not able to get the Java program to log any more info about just
what request it made until I can get ion touch with the programmer.

Somehow I'm stuck thinking there must be a difference in the actual
http requests (though their shouldn't be).

The result from the Java request using webrick in 1.2.1 is also an
error and is similar to a warning in he Mongrel FAQ page:

The request from curl via webrick:

127.0.0.1 - - [31/Jan/2007:00:50:43 EST] "GET
/1/offering/84/bundle/168/0 HTTP/1.1" 200 2706

The request from Java via webrick:

127.0.0.1 - - [31/Jan/2007:00:51:43 EST] "GET
/1/offering/84/bundle/168/0 HTTP/1.1" 500 309

The error occurs in the same place in request.rb in Webrick so this
isn't mongrel specific.

Is there a way I can get mongrel to log more about the http request
so I can compare the two in more detail?

I was able to set a breakpoint in the rails controller method and get
detailed info from rails about the request that worked. But none of
my breakpoints get touched with the request that causes the error.

Thanks for any help or pointers.

--
- Stephen Bannasch
Concord Consortium, http://www.concord.org


<Prev in Thread] Current Thread [Next in Thread>
Google Custom Search

News | FAQ | advertise