Forum: Ruby on Rails Neither from_xml nor from_Json work in rails 2.1

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Tim U. (Guest)
on 2008-11-27 23:39
(Received via mailing list)
If you have the need to do a lot of XML processing you are better off
staying away from rails completely.  The State of SOAP on rails is a
mess to the point of being practically unusable.  The XML and json
deserialization is like playing russian roulette with five bullets in
the chamber.



Try it yourself.

u = User.find(1).
xml = u.to_xml

... Change the xml.

u.from_xml(xml)

Doesn't work.

Same with json. Doesn't work.

Half the time from_xml can't parse the xml to_xml put out.
Frederick C. (Guest)
on 2008-11-27 23:48
(Received via mailing list)
On Nov 27, 9:38 pm, "Tim U." <removed_email_address@domain.invalid> wrote:
>
> ... Change the xml.
>
> u.from_xml(xml)
>
> Doesn't work.
>
> Same with json. Doesn't work.
>

Minus your mysterious 'change the xml' that worked for me.If you could
produce a more precise example (or at least elaborate on "Doesn't
work" (raises an exception, does nothing, has the wrong attributes,
something else...)
 you might get a more helpful response.

Fred
Tim U. (Guest)
on 2008-11-28 00:11
(Received via mailing list)
> Minus your mysterious 'change the xml' that worked for me.If you could
> produce a more precise example (or at least elaborate on "Doesn't
> work" (raises an exception, does nothing, has the wrong attributes,
> something else...)
>  you might get a more helpful response.

Let's see.....


 u = User.find(3)

=> #<User id: 3, company_id: 3, login: "tm_user", email:
"removed_email_address@domain.invalid", crypted_password:
"b695db100847aa269fb477443a289d875cf2e001", salt:
"1e3a4ba1ccb233c2bbd92c3bdbb917307523671b", timezone: "UTC",
remember_token: nil, remember_token_expires_at: nil, activation_code:
"bab0c2bc67d43b6871005559b114b9b62b7b70bb", activated_at: "2008-11-19
22:12:07", password_reset_code: nil, enabled: true, created_at:
"2008-11-19 22:12:07", updated_at: "2008-11-19 22:12:07",
lock_version: 4, address_id: nil>

>> u.to_xml

=> "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<user>\n
<activated-at type=\"datetime\">2008-11-19T22:12:07Z</activated-at>\n
<activation-code>bab0c2bc67d43b6871005559b114b9b62b7b70bb</activation-code>\n
 <address-id type=\"integer\" nil=\"true\"></address-id>\n
<company-id type=\"integer\">3</company-id>\n
<crypted-password>b695db100847aa269fb477443a289d875cf2e001</crypted-password>\n
 <email>removed_email_address@domain.invalid</email>\n  <enabled
type=\"boolean\">true</enabled>\n  <id type=\"integer\">3</id>\n
<lock-version type=\"integer\">4</lock-version>\n
<login>tm_user</login>\n  <password-reset-code
nil=\"true\"></password-reset-code>\n  <remember-token
nil=\"true\"></remember-token>\n  <remember-token-expires-at
type=\"datetime\" nil=\"true\"></remember-token-expires-at>\n
<salt>1e3a4ba1ccb233c2bbd92c3bdbb917307523671b</salt>\n
<timezone>UTC</timezone>\n</user>\n"


Change the XML. Change the timezone from UTC to ABC

 a = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<user>\n
<activated-at type=\"datetime\">2008-11-19T22:12:07Z</activated-at>\n
<activation-code>bab0c2bc67d43b6871005559b114b9b62b7b70bb</activation-code>\n
 <address-id type=\"integer\" nil=\"true\"></address-id>\n
<company-id type=\"integer\">3</company-id>\n
<crypted-password>b695db100847aa269fb477443a289d875cf2e001</crypted-password>\n
 <email>removed_email_address@domain.invalid</email>\n  <enabled
type=\"boolean\">true</enabled>\n  <id type=\"integer\">3</id>\n
<lock-version type=\"integer\">4</lock-version>\n
<login>tm_user</login>\n  <password-reset-code
nil=\"true\"></password-reset-code>\n  <remember-token
nil=\"true\"></remember-token>\n  <remember-token-expires-at
type=\"datetime\" nil=\"true\"></remember-token-expires-at>\n
<salt>1e3a4ba1ccb233c2bbd92c3bdbb917307523671b</salt>\n
<timezone>ABC</timezone>\n</user>\n"


Apply it back to the record.

>> u.from_xml(a)

> u.from_xml(a)

=> #<User id: 3, company_id: 3, login: "tm_user", email:
"removed_email_address@domain.invalid", crypted_password:
"b695db100847aa269fb477443a289d875cf2e001", salt:
"1e3a4ba1ccb233c2bbd92c3bdbb917307523671b", timezone: "UTC",
remember_token: nil, remember_token_expires_at: nil, activation_code:
"bab0c2bc67d43b6871005559b114b9b62b7b70bb", activated_at: "2008-11-19
22:12:07", password_reset_code: nil, enabled: true, created_at:
"2008-11-19 22:12:07", updated_at: "2008-11-19 22:12:07",
lock_version: 4, address_id: nil>

Mmmmm. timezone is still UTC.

Let's save it.

>> u.save
=> true
>> u
=> #<User id: 3, company_id: 3, login: "tm_user", email:
"removed_email_address@domain.invalid", crypted_password:
"b695db100847aa269fb477443a289d875cf2e001", salt:
"1e3a4ba1ccb233c2bbd92c3bdbb917307523671b", timezone: "UTC",
remember_token: nil, remember_token_expires_at: nil, activation_code:
"bab0c2bc67d43b6871005559b114b9b62b7b70bb", activated_at: "2008-11-19
22:12:07", password_reset_code: nil, enabled: true, created_at:
"2008-11-19 22:12:07", updated_at: "2008-11-19 22:12:07",
lock_version: 5, address_id: nil>


Looks like the time zone never got changed.


Let's try with json


>> u.to_json
=> "{\"user\": {\"salt\":
\"1e3a4ba1ccb233c2bbd92c3bdbb917307523671b\", \"activated_at\":
\"2008-11-19T22:12:07Z\", \"remember_token_expires_at\": null,
\"crypted_password\": \"b695db100847aa269fb477443a289d875cf2e001\",
\"password_reset_code\": null, \"lock_version\": 5,
\"activation_code\": \"bab0c2bc67d43b6871005559b114b9b62b7b70bb\",
\"timezone\": \"UTC\", \"id\": 3, \"enabled\": true, \"address_id\":
null, \"remember_token\": null, \"company_id\": 3, \"login\":
\"tm_user\", \"email\": \"removed_email_address@domain.invalid\"}}"
>> j =  "{\"user\": {\"salt\": \"1e3a4ba1ccb233c2bbd92c3bdbb917307523671b\", 
\"activated_at\": \"2008-11-19T22:12:07Z\", \"remember_token_expires_at\": null, 
\"crypted_password\": \"b695db100847aa269fb477443a289d875cf2e001\", 
\"password_reset_code\": null, \"lock_version\": 5, \"activation_code\": 
\"bab0c2bc67d43b6871005559b114b9b62b7b70bb\", \"timezone\": \"ABC\", \"id\": 3, 
\"enabled\": true, \"address_id\": null, \"remember_token\": null, \"company_id\": 3, 
\"login\": \"tm_user\", \"email\": \"tm_user@panztelcom\"}}"
=> "{\"user\": {\"salt\":
\"1e3a4ba1ccb233c2bbd92c3bdbb917307523671b\", \"activated_at\":
\"2008-11-19T22:12:07Z\", \"remember_token_expires_at\": null,
\"crypted_password\": \"b695db100847aa269fb477443a289d875cf2e001\",
\"password_reset_code\": null, \"lock_version\": 5,
\"activation_code\": \"bab0c2bc67d43b6871005559b114b9b62b7b70bb\",
\"timezone\": \"ABC\", \"id\": 3, \"enabled\": true, \"address_id\":
null, \"remember_token\": null, \"company_id\": 3, \"login\":
\"tm_user\", \"email\": \"tm_user@panztelcom\"}}"
>> j
=> "{\"user\": {\"salt\":
\"1e3a4ba1ccb233c2bbd92c3bdbb917307523671b\", \"activated_at\":
\"2008-11-19T22:12:07Z\", \"remember_token_expires_at\": null,
\"crypted_password\": \"b695db100847aa269fb477443a289d875cf2e001\",
\"password_reset_code\": null, \"lock_version\": 5,
\"activation_code\": \"bab0c2bc67d43b6871005559b114b9b62b7b70bb\",
\"timezone\": \"ABC\", \"id\": 3, \"enabled\": true, \"address_id\":
null, \"remember_token\": null, \"company_id\": 3, \"login\":
\"tm_user\", \"email\": \"tm_user@panztelcom\"}}"
>> u.from_json(j)
=> #<User id: 3, company_id: 3, login: "tm_user", email:
"removed_email_address@domain.invalid", crypted_password:
"b695db100847aa269fb477443a289d875cf2e001", salt:
"1e3a4ba1ccb233c2bbd92c3bdbb917307523671b", timezone: "UTC",
remember_token: nil, remember_token_expires_at: nil, activation_code:
"bab0c2bc67d43b6871005559b114b9b62b7b70bb", activated_at: "2008-11-19
22:12:07", password_reset_code: nil, enabled: true, created_at:
"2008-11-19 22:12:07", updated_at: "2008-11-19 22:12:07",
lock_version: 5, address_id: nil>
>> u.save
=> true
>> u
=> #<User id: 3, company_id: 3, login: "tm_user", email:
"removed_email_address@domain.invalid", crypted_password:
"b695db100847aa269fb477443a289d875cf2e001", salt:
"1e3a4ba1ccb233c2bbd92c3bdbb917307523671b", timezone: "UTC",
remember_token: nil, remember_token_expires_at: nil, activation_code:
"bab0c2bc67d43b6871005559b114b9b62b7b70bb", activated_at: "2008-11-19
22:12:07", password_reset_code: nil, enabled: true, created_at:
"2008-11-19 22:12:07", updated_at: "2008-11-19 22:12:07",
lock_version: 6, address_id: nil>
>>



Exact same story.
Frederick C. (Guest)
on 2008-11-28 00:22
(Received via mailing list)
On Nov 27, 10:10 pm, "Tim U." <removed_email_address@domain.invalid> wrote:
> > Minus your mysterious 'change the xml' that worked for me.If you could
> > produce a more precise example (or at least elaborate on "Doesn't
> > work" (raises an exception, does nothing, has the wrong attributes,
> > something else...)
> >  you might get a more helpful response.
>
> Let's see.....
>

Is timezone a protected attribute (as in attr_protected or not on the
list given to attr_accessible) ?
Is the accessor function timezone= overwridden ? Does it work if you
change other attributes?

Fred
Tim U. (Guest)
on 2008-11-28 00:27
(Received via mailing list)
>
> Is timezone a protected attribute (as in attr_protected or not on the
> list given to attr_accessible) ?

No. It's changeable by the web GUI too.  Also if that was the case
you'd expect the validation to throw up an error right?

> Is the accessor function timezone= overwridden ? Does it work if you
> change other attributes?

No. It also doesn't work if you attempt to change other attributies.

Change the login field to "tm_user"changed"

>> j =  "{\"user\": {\"salt\": \"1e3a4ba1ccb233c2bbd92c3bdbb917307523671b\", 
\"activated_at\": \"2008-11-19T22:12:07Z\", \"remember_token_expires_at\": null, 
\"crypted_password\": \"b695db100847aa269fb477443a289d875cf2e001\", 
\"password_reset_code\": null, \"lock_version\": 5, \"activation_code\": 
\"bab0c2bc67d43b6871005559b114b9b62b7b70bb\", \"timezone\": \"ABC\", \"id\": 3, 
\"enabled\": true, \"address_id\": null, \"remember_token\": null, \"company_id\": 3, 
\"login\": \"tm_user_changed\", \"email\": \"tm_user@panztelcom\"}}"


>> u.from_json(j)
=> #<User id: 3, company_id: 3, login: "tm_user", email:
"removed_email_address@domain.invalid", crypted_password:
"b695db100847aa269fb477443a289d875cf2e001", salt:
"1e3a4ba1ccb233c2bbd92c3bdbb917307523671b", timezone: "UTC",
remember_token: nil, remember_token_expires_at: nil, activation_code:
"bab0c2bc67d43b6871005559b114b9b62b7b70bb", activated_at: "2008-11-19
22:12:07", password_reset_code: nil, enabled: true, created_at:
"2008-11-19 22:12:07", updated_at: "2008-11-19 22:12:07",
lock_version: 7, address_id: nil>
>>

Nope no change. Let's save it.

>> u.save
=> true
>> u.login
=> "tm_user"
>>


Didn't change.
Frederick C. (Guest)
on 2008-11-28 00:35
(Received via mailing list)
On Nov 27, 10:26 pm, "Tim U." <removed_email_address@domain.invalid> wrote:
> > Is timezone a protected attribute (as in attr_protected or not on the
> > list given to attr_accessible) ?
>
> No. It's changeable by the web GUI too.  Also if that was the case
> you'd expect the validation to throw up an error right?
>
actually no. if you try to mass assign a attr_protected attribute then
it just ignores it (you'll get a warning in the logs).

> > Is the accessor function timezone= overwridden ? Does it work if you
> > change other attributes?
>
> No. It also doesn't work if you attempt to change other attributies.
>
> Change the login field to "tm_user"changed"
>
weird. I'd check your logs in case there's a warning in there. This
sort of thing could happen if you had accidentally overwritten an
important activerecord method (eg if you had an association called
attributes) but hard to say without seeing more. you might find out
more if you were able to reduce this to a minimal example (or work the
other way - start with a fresh rails app & model and add stuff until
it breaks)

Fred
This topic is locked and can not be replied to.