# ActionWebService date casting error

**URL:** <https://www.ruby-forum.com/t/actionwebservice-date-casting-error/89248>\
**Category:** Rails\
**Created:** [March 28, 2006, 6:06pm UTC](https://www.ruby-forum.com/t/actionwebservice-date-casting-error/89248 "2006-03-28T18:06:56Z")\
**Posts on this page:** 11\
**Page:** 1

<div class="post-metadata">

**Author:** ![justinj](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/b38774/32.png) [@justinj](https://www.ruby-forum.com/u/justinj)\
**Post date:** [March 28, 2006, 6:06pm UTC](https://www.ruby-forum.com/t/actionwebservice-date-casting-error/89248/1 "2006-03-28T18:06:56Z")

</div>

I have defined a web service to return information from a database as  
follows.

class BackendApi \< ActionWebService::API::Base  
api\_method :find\_all\_vobs,  
:returns =\> [[:int]]

api\_method :find\_vob\_by\_id,  
:expects =\> [:int],  
:returns =\> [Vob]

class BackendController \< ApplicationController  
wsdl\_service\_name ‘Backend’  
web\_service\_scaffold :invoke

def find\_all\_vobs  
Vob.find(:all).map{ |v| v.id }  
end

def find\_vob\_by\_id(id)  
Vob.find(id)  
end  
end

mysql\> describe vobs;  
±------------------------±--------------±-----±----±--------------------±---------------+  
| Field | Type | Null | Key | Default  
| Extra |  
±------------------------±--------------±-----±----±--------------------±---------------+  
| id | int(11) | | PRI | NULL  
| auto\_increment |  
| replica\_family\_uuid | varchar(100) | | |  
| |  
| created\_by | varchar(100) | | |  
| |  
| created\_on | datetime | | | 0000-00-00  
00:00:00 | |  
| server\_host | varchar(50) | | |  
| |  
| tag | varchar(50) | | |  
| |  
| replica\_name | varchar(150) | | |  
| |  
| master\_replica | varchar(150) | | |  
| |  
| region | varchar(50) | | |  
| |  
| owner | varchar(20) | | |  
| |  
| primary\_group | varchar(20) | | |  
| |  
| feature\_level | varchar(5) | | |  
| |  
| database\_schema\_version | varchar(5) | | |  
| |  
| access | varchar(10) | | |  
| |  
| identity\_preserving | tinyint(1) | | | 0  
| |  
| permission\_preserving | tinyint(1) | | | 0  
| |  
| replica\_names | text | | |  
| |  
| global\_path | varchar(150) | | |  
| |  
| space\_used | decimal(10,2) | | | 0.00  
| |  
±------------------------±--------------±-----±----±--------------------±---------------+  
19 rows in set (0.00 sec)

When I connect via [http://localhost:3000/backend/invoke](http://localhost:3000/backend/invoke) (using the web  
service scaffolding) FindAllVobs works as expected, but FindVobById  
returns an error as seen below. The date that “parse” is puking on in  
the database is set to ‘2001-10-15 10:41:41’.

ArgumentError in Backend#invoke\_submit  
invalid date

c:/ruby/lib/ruby/1.8/date.rb:1214:in `new_with_hash' c:/ruby/lib/ruby/1.8/date.rb:1258:in `parse’  
c:/ruby/lib/ruby/gems/1.8/gems/actionwebservice-1.0.0.4008/lib/action\_web\_service/casting.rb:103:in  
`cast_base_type' c:/ruby/lib/ruby/gems/1.8/gems/actionwebservice-1.0.0.4008/lib/action_web_service/casting.rb:62:in `cast’  
c:/ruby/lib/ruby/gems/1.8/gems/actionwebservice-1.0.0.4008/lib/action\_web\_service/casting.rb:123:in  
`cast_to_structured_type' c:/ruby/lib/ruby/gems/1.8/gems/actionwebservice-1.0.0.4008/lib/action_web_service/casting.rb:121:in `each\_member’  
c:/ruby/lib/ruby/gems/1.8/gems/actionwebservice-1.0.0.4008/lib/action\_web\_service/support/signature\_types.rb:205:in  
`each' c:/ruby/lib/ruby/gems/1.8/gems/actionwebservice-1.0.0.4008/lib/action_web_service/support/signature_types.rb:205:in `each\_member’  
c:/ruby/lib/ruby/gems/1.8/gems/actionwebservice-1.0.0.4008/lib/action\_web\_service/casting.rb:121:in  
`cast_to_structured_type' c:/ruby/lib/ruby/gems/1.8/gems/actionwebservice-1.0.0.4008/lib/action_web_service/casting.rb:60:in `cast’  
c:/ruby/lib/ruby/gems/1.8/gems/actionwebservice-1.0.0.4008/lib/action\_web\_service/casting.rb:38:in  
`cast_returns' c:/ruby/lib/ruby/gems/1.8/gems/actionwebservice-1.0.0.4008/lib/action_web_service/casting.rb:25:in `cast\_returns’  
c:/ruby/lib/ruby/gems/1.8/gems/actionwebservice-1.0.0.4008/lib/action\_web\_service/api.rb:193:in  
`cast_returns' c:/ruby/lib/ruby/gems/1.8/gems/actionwebservice-1.0.0.4008/lib/action_web_service/dispatcher/abstract.rb:182:in `web\_service\_create\_response’  
.  
.  
.

The book Agile Web D. with Rails seems to indicate that this  
should just work the way I have set it up. Does anyone have any  
suggestions as to what I should be looking for to solve this? I’m  
running the Rails 1.1 candidate from the gems on Windows XP with Ruby  
1.8.2.

Thanks,  
Justin

---

<div class="post-metadata">

**Author:** ![justinj](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/b38774/32.png) [@justinj](https://www.ruby-forum.com/u/justinj)\
**Post date:** [March 28, 2006, 6:48pm UTC](https://www.ruby-forum.com/t/actionwebservice-date-casting-error/89248/2 "2006-03-28T18:48:43Z")

</div>

Have you tried to upgrade your Rails to 1.1?

Kent

---

<div class="post-metadata">

**Author:** ![justinj](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/b38774/32.png) [@justinj](https://www.ruby-forum.com/u/justinj)\
**Post date:** [March 28, 2006, 7:53pm UTC](https://www.ruby-forum.com/t/actionwebservice-date-casting-error/89248/3 "2006-03-28T19:53:05Z")

</div>

I updated to Rails 1.1 and Ruby 1.8.4 preview 3 (latest one click  
installer for Windows) and now I get the following error. It appears  
to be the same error but more informative.

ArgumentError in Backend#invoke\_submit  
3 elements of civil date are necessary

---

<div class="post-metadata">

**Author:** ![justinj](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/b38774/32.png) [@justinj](https://www.ruby-forum.com/u/justinj)\
**Post date:** [March 28, 2006, 9:45pm UTC](https://www.ruby-forum.com/t/actionwebservice-date-casting-error/89248/4 "2006-03-28T21:45:18Z")

</div>

I’ve just noticed the default value for your created\_on column. It all  
comes to:

$ irb  
irb(main):001:0\> require ‘date’  
=\> true  
irb(main):002:0\> Date.parse(‘0000-00-00 00:00:00’)  
ArgumentError: invalid date  
from /usr/local/lib/ruby/1.8/date.rb:591:in `civil' from /usr/local/lib/ruby/1.8/date.rb:652:in `new\_with\_hash’  
from /usr/local/lib/ruby/1.8/date.rb:695:in `parse’  
from (irb):2  
from :0  
irb(main):003:0\>

Kent.

On 3/28/06, Justin J. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> > ```
> > :returns => [[:int]]
> > Vob.find(:all).map{ |v| v.id }
> > 
> > ```
> > 
> > | Field | Type | Null | Key | Default  
> > | server\_host | varchar(50) | | |  
> > | |  
> > | permission\_preserving | tinyint(1) | | | 0  
> > When I connect via [http://localhost:3000/backend/invoke](http://localhost:3000/backend/invoke)  
> > c:/ruby/lib/ruby/1.8/date.rb:1258:in `parse’  
> > c:/ruby/lib/ruby/gems/1.8/gems/actionwebservice-  
> > 1.0.0.4008/lib/action\_web\_service/casting.rb:38:in  
> > .
> > 
> > Kent
> 
> * * *
> 
> Rails mailing list  
> removed\_email\_address@domain.invalid  
> [http://lists.rubyonrails.org/mailman/listinfo/rails](http://lists.rubyonrails.org/mailman/listinfo/rails)

## – Kent

> **[DATANOISE.COM](https://www.datanoise.com/)**
>
> DATANOISE.COM - Contact us for any business inquiries

---

<div class="post-metadata">

**Author:** ![justinj](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/b38774/32.png) [@justinj](https://www.ruby-forum.com/u/justinj)\
**Post date:** [March 28, 2006, 10:23pm UTC](https://www.ruby-forum.com/t/actionwebservice-date-casting-error/89248/5 "2006-03-28T22:23:04Z")

</div>

self.\_parse in date/format.rb starting on line 250 doesn’t match the  
year  
for some reason, leaving elem[:year] set to nil. Then  
self.new\_with\_hashfails at line 1213 of  
date.rb because year (which it extracted from elem[:year]) is nil.

---

<div class="post-metadata">

**Author:** ![justinj](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/b38774/32.png) [@justinj](https://www.ruby-forum.com/u/justinj)\
**Post date:** [March 29, 2006, 8:22pm UTC](https://www.ruby-forum.com/t/actionwebservice-date-casting-error/89248/6 "2006-03-29T20:22:35Z")

</div>

Can someone tell me if the following works for you? This is what is  
happening in cast\_base\_type in  
actionwebservice-1.1.0\lib\action\_web\_service\casting.rb line 105.

C:\>irb

irb(main):001:0\> require ‘date’  
=\> true

irb(main):002:0\> Time.now  
=\> Wed Mar 29 12:16:09 Central Standard Time 2006  
irb(main):003:0\> DateTime.parse Time.now.to\_s  
ArgumentError: 3 elements of civil date are necessary  
from c:/ruby/lib/ruby/1.8/date.rb:1214:in `new_with_hash' from c:/ruby/lib/ruby/1.8/date.rb:1258:in`parse’  
from (irb):3  
irb(main):004:0\>

---

<div class="post-metadata">

**Author:** ![justinj](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/b38774/32.png) [@justinj](https://www.ruby-forum.com/u/justinj)\
**Post date:** [March 29, 2006, 8:33pm UTC](https://www.ruby-forum.com/t/actionwebservice-date-casting-error/89248/7 "2006-03-29T20:33:46Z")

</div>

Can someone tell me if the following works for you? This is what is  
happening in cast\_base\_type in  
actionwebservice-1.1.0\lib\action\_web\_service\casting.rb line 105.

C:\>irb  
irb(main):001:0\> require ‘date’  
=\> true  
irb(main):002:0\> Time.now  
=\> Wed Mar 29 12:16:09 Central Standard Time 2006  
irb(main):003:0\> DateTime.parse Time.now.to\_s  
ArgumentError: 3 elements of civil date are necessary  
from c:/ruby/lib/ruby/1.8/date.rb:1214:in `new_with_hash' from c:/ruby/lib/ruby/1.8/date.rb:1258:in`parse’  
from (irb):3  
irb(main):004:0\>

---

<div class="post-metadata">

**Author:** ![justinj](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/b38774/32.png) [@justinj](https://www.ruby-forum.com/u/justinj)\
**Post date:** [March 29, 2006, 8:52pm UTC](https://www.ruby-forum.com/t/actionwebservice-date-casting-error/89248/8 "2006-03-29T20:52:12Z")

</div>

Justin J. wrote:

> =\> Wed Mar 29 12:16:09 Central Standard Time 2006  
> irb(main):003:0\> DateTime.parse Time.now.to\_s  
> ArgumentError: 3 elements of civil date are necessary  
> from c:/ruby/lib/ruby/1.8/date.rb:1214:in `new_with_hash' from c:/ruby/lib/ruby/1.8/date.rb:1258:in`parse’  
> from (irb):3  
> irb(main):004:0\>

It’s a bug in DateTime.parse specific to Windows. It’s caused by the  
long time  
zone string, i.e. “Central Standard Time” instead of “CST”.

It’s fixed in the Ruby 1.9 branch. Whether or not you can just copy  
date.rb  
into your stdlib, I’m not sure.

Regards,

Dan

---

<div class="post-metadata">

**Author:** ![justinj](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/b38774/32.png) [@justinj](https://www.ruby-forum.com/u/justinj)\
**Post date:** [March 29, 2006, 9:03pm UTC](https://www.ruby-forum.com/t/actionwebservice-date-casting-error/89248/9 "2006-03-29T21:03:51Z")

</div>

Thank you!

---

<div class="post-metadata">

**Author:** ![justinj](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/b38774/32.png) [@justinj](https://www.ruby-forum.com/u/justinj)\
**Post date:** [April 25, 2006, 5:38pm UTC](https://www.ruby-forum.com/t/actionwebservice-date-casting-error/89248/10 "2006-04-25T17:38:59Z")

</div>

Was anyone able to find a workaround for this problem? Does using the  
date.rb file for 1.9 work? If so, where can I find this – I was unable  
to find the 1.9 branch in the CVS repository.

Thanks!

Justin J. wrote:

> Thank you!

---

<div class="post-metadata">

**Author:** ![justinj](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/b38774/32.png) [@justinj](https://www.ruby-forum.com/u/justinj)\
**Post date:** [April 30, 2006, 5:38pm UTC](https://www.ruby-forum.com/t/actionwebservice-date-casting-error/89248/11 "2006-04-30T17:38:13Z")

</div>

I’d love to know as well… I dropped date.rb, date2.rb and  
date/format.rb from the 1.9 branch into my 1.8 directory but still had  
the same problem!

Josh wrote:

> Was anyone able to find a workaround for this problem? Does using the  
> date.rb file for 1.9 work? If so, where can I find this – I was unable  
> to find the 1.9 branch in the CVS repository.
> 
> Thanks!
> 
> Justin J. wrote:
> 
> > Thank you!
