Peter K Chan created JRUBY-6619:
-----------------------------------

             Summary: NoMethodError 'upcase' on Java string
                 Key: JRUBY-6619
                 URL: https://jira.codehaus.org/browse/JRUBY-6619
             Project: JRuby
          Issue Type: Bug
          Components: Java Integration
    Affects Versions: JRuby 1.6.7
         Environment: Windows Server 2008 and Windows Server 2008 R2 with JDK 
7u3
            Reporter: Peter K Chan


I have a Rails 2.3.14 app, running on Trinidad. However, when starting up the 
web app, I am getting sporadic NoMethodError when serving initial pages.

{code}
Application Error
org.jruby.exceptions.RaiseException: (NoMethodError) undefined method `upcase' 
for #<Java::JavaLang::String:0x17a4277>
        at 
LazyEnv.load_headers(file:C:/java/xjruby/lib/ruby/gems/1.8/gems/jruby-rack-1.1.4/lib/jruby-rack-1.1.4.jar!/rack/handler/servlet.rb:101)
{code}

Here is the section of code from jruby-rack-1.1.4:

{code}
...
@servlet_env.getHeaderNames.each do |h|
  next if h =~ /^Content-(Type|Length)$/i
  puts h.inspect; puts h.class.name; k = "HTTP_#{h.upcase.gsub(/-/, '_')}" # 
line 101 / puts added for tracing.
  env[k] = @servlet_env.getHeader(h) unless env.has_key?(k)
end
...

{code}

It appears that on line 101 of jruby-rack-1.1.4, when loading headers, JRuby is 
not automatically converting Java strings into Ruby strings, leading to the 
NoMethodError.

Here is a full transcript of two web app launches, with the above trace 
statements.

The first one is a normal one.

{code}
C:\work\app>web.bat
Apr 04, 2012 12:09:48 AM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["http-bio-5000"]
Apr 04, 2012 12:09:48 AM org.apache.catalina.core.StandardService startInternal
INFO: Starting service Tomcat
Apr 04, 2012 12:09:48 AM org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet Engine: Apache Tomcat/7.0.23
2012-04-04 05:09:48 INFO: No global web.xml found
Info: received max runtimes = 1
jruby 1.6.7 (ruby-1.8.7-p357) (2012-02-22 3e82bc8) (Java HotSpot(TM) Client VM 
1.7.0_03) [Windows Server 2008-x86-java]
Runtime start
2012-04-04 05:10:00 INFO: Starting ProtocolHandler ["http-bio-5000"]
"host"
String
"user-agent"
String
"accept"
String
"accept-language"
String
"accept-encoding"
String
"accept-charset"
String
"keep-alive"
String
"connection"
String
"cookie"
String
"if-none-match"
String
"cache-control"
String
"host"
String
"user-agent"
String
"accept"
String
"accept-language"
String
"accept-encoding"
String
"accept-charset"
String
"keep-alive"
String
"connection"
String
"referer"
String
"cookie"
String
"if-modified-since"
String
"cache-control"
String
"host"
String
"user-agent"
String
"accept"
String
"accept-language"
String
"accept-encoding"
String
"accept-charset"
String
"keep-alive"
String
"connection"
String
"referer"
String
"cookie"
String
"if-modified-since"
String
"cache-control"
String
"host"
String
"user-agent"
String
"accept"
String
"accept-language"
String
"accept-encoding"
String
"accept-charset"
String
"keep-alive"
String
"connection"
String
"referer"
String
"cookie"
String
"if-modified-since"
String
"cache-control"
String
2012-04-04 05:10:05 INFO: Pausing ProtocolHandler ["http-bio-5000"]
2012-04-04 05:10:05 INFO: Stopping service Tomcat
Runtime exit
2012-04-04 05:10:05 INFO: Stopping ProtocolHandler ["http-bio-5000"]
2012-04-04 05:10:06 INFO: Destroying ProtocolHandler ["http-bio-5000"]
Terminate batch job (Y/N)? ^C
{code}

The second one is the one where JRuby failed to convert Java string to Ruby 
string:

{code}

C:\work\app>web.bat
Apr 04, 2012 12:10:12 AM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["http-bio-5000"]
Apr 04, 2012 12:10:12 AM org.apache.catalina.core.StandardService startInternal
INFO: Starting service Tomcat
Apr 04, 2012 12:10:12 AM org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet Engine: Apache Tomcat/7.0.23
2012-04-04 05:10:13 INFO: No global web.xml found
Info: received max runtimes = 1
jruby 1.6.7 (ruby-1.8.7-p357) (2012-02-22 3e82bc8) (Java HotSpot(TM) Client VM 
1.7.0_03) [Windows Server 2008-x86-java]
Runtime start
2012-04-04 05:10:24 INFO: Starting ProtocolHandler ["http-bio-5000"]
#<Java::JavaLang::String:0x17a4277>
Java::JavaLang::String
Application Error
org.jruby.exceptions.RaiseException: (NoMethodError) undefined method `upcase' 
for #<Java::JavaLang::String:0x17a4277>
        at 
LazyEnv.load_headers(file:C:/java/xjruby/lib/ruby/gems/1.8/gems/jruby-rack-1.1.4/lib/jrub
y-rack-1.1.4.jar!/rack/handler/servlet.rb:101)
        at 
Enumeration.each(C:/java/xjruby/lib/ruby/site_ruby/shared/builtin/java/java.util.rb:39)
        at 
LazyEnv.load_headers(file:C:/java/xjruby/lib/ruby/gems/1.8/gems/jruby-rack-1.1.4/lib/jrub
y-rack-1.1.4.jar!/rack/handler/servlet.rb:99)
        at 
LazyEnv.load_env_key(file:C:/java/xjruby/lib/ruby/gems/1.8/gems/jruby-rack-1.1.4/lib/jrub
y-rack-1.1.4.jar!/rack/handler/servlet.rb:74)
        at 
LazyEnv.initialize(file:C:/java/xjruby/lib/ruby/gems/1.8/gems/jruby-rack-1.1.4/lib/jruby-
rack-1.1.4.jar!/rack/handler/servlet.rb:59)
        at org.jruby.RubyProc.call(org/jruby/RubyProc.java:270)
        at org.jruby.RubyProc.call(org/jruby/RubyProc.java:220)
        at org.jruby.RubyHash.default(org/jruby/RubyHash.java:647)
        at org.jruby.RubyHash.[](org/jruby/RubyHash.java:1007)
        at 
Env.populate(file:C:/java/xjruby/lib/ruby/gems/1.8/gems/jruby-rack-1.1.4/lib/jruby-rack-1
.1.4.jar!/rack/handler/servlet.rb:47)
        at 
Env.initialize(file:C:/java/xjruby/lib/ruby/gems/1.8/gems/jruby-rack-1.1.4/lib/jruby-rack
-1.1.4.jar!/rack/handler/servlet.rb:41)
        at 
Servlet.create_env(file:C:/java/xjruby/lib/ruby/gems/1.8/gems/jruby-rack-1.1.4/lib/jruby-
rack-1.1.4.jar!/rack/handler/servlet.rb:24)
        at 
Servlet.call(file:C:/java/xjruby/lib/ruby/gems/1.8/gems/jruby-rack-1.1.4/lib/jruby-rack-1
.1.4.jar!/rack/handler/servlet.rb:20)
#<Java::JavaLang::String:0x17a4277>
Java::JavaLang::String
Error: Couldn't handle error
org.jruby.exceptions.RaiseException: (NoMethodError) undefined method `upcase' 
for #<Java::JavaLang:
:String:0x17a4277>
        at 
LazyEnv.load_headers(file:C:/java/xjruby/lib/ruby/gems/1.8/gems/jruby-rack-1.1.4/lib/jrub
y-rack-1.1.4.jar!/rack/handler/servlet.rb:101)
        at 
Enumeration.each(C:/java/xjruby/lib/ruby/site_ruby/shared/builtin/java/java.util.rb:39)
        at 
LazyEnv.load_headers(file:C:/java/xjruby/lib/ruby/gems/1.8/gems/jruby-rack-1.1.4/lib/jrub
y-rack-1.1.4.jar!/rack/handler/servlet.rb:99)
        at 
LazyEnv.load_env_key(file:C:/java/xjruby/lib/ruby/gems/1.8/gems/jruby-rack-1.1.4/lib/jrub
y-rack-1.1.4.jar!/rack/handler/servlet.rb:74)
        at 
LazyEnv.initialize(file:C:/java/xjruby/lib/ruby/gems/1.8/gems/jruby-rack-1.1.4/lib/jruby-
rack-1.1.4.jar!/rack/handler/servlet.rb:59)
        at org.jruby.RubyProc.call(org/jruby/RubyProc.java:270)
        at org.jruby.RubyProc.call(org/jruby/RubyProc.java:220)
        at org.jruby.RubyHash.default(org/jruby/RubyHash.java:647)
        at org.jruby.RubyHash.[](org/jruby/RubyHash.java:1007)
        at 
Env.populate(file:C:/java/xjruby/lib/ruby/gems/1.8/gems/jruby-rack-1.1.4/lib/jruby-rack-1
.1.4.jar!/rack/handler/servlet.rb:47)
        at 
Env.initialize(file:C:/java/xjruby/lib/ruby/gems/1.8/gems/jruby-rack-1.1.4/lib/jruby-rack
-1.1.4.jar!/rack/handler/servlet.rb:41)
        at 
Servlet.create_env(file:C:/java/xjruby/lib/ruby/gems/1.8/gems/jruby-rack-1.1.4/lib/jruby-
rack-1.1.4.jar!/rack/handler/servlet.rb:24)
        at 
Servlet.call(file:C:/java/xjruby/lib/ruby/gems/1.8/gems/jruby-rack-1.1.4/lib/jruby-rack-1
.1.4.jar!/rack/handler/servlet.rb:20)
{code}

I can reproduce this about 40% of the time. Generally, if this happens, my 
webapp will not work and I need to restart it a few times until it works. I am 
at a loss as to how to debug this further. Any suggestions appreciated.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://jira.codehaus.org/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

---------------------------------------------------------------------
To unsubscribe from this list, please visit:

    http://xircles.codehaus.org/manage_email


Reply via email to