[Seaside] Rest and POST method
Norbert Hartl
norbert at hartl.name
Wed Apr 6 16:11:34 UTC 2011
Am 06.04.2011 um 14:53 schrieb Olivier Auverlot:
> To infinite... and beyond !
>
I hope this wasn't a complaint :) I really like your using of rawBody. For just sending XML it is a good idea. Most of the time I use multipart messages an there rawBody doesn't help. In absence of multipart/related handling I just define the part "root" as the default one that carries the XML and the other parts are referenced from there
If you like to try Magritte-XML you can take a short cut. Define
---
Object subclass: #User
instanceVariableNames: 'fullName emailAddress password'
classVariableNames: ''
poolDictionaries: ''
category: 'Imagined-Model'
getter/setter for the instance variables
User class>descriptionContainer
^ super descriptionContainer
xmlElementName: 'user';
yourself
User class>>descriptionFullName
^ MAStringDescription new
accessor: #fullName;
priority: 100;
label: 'full name';
beRequired;
beXmlAttribute;
yourself
User class>>descriptionEmailAddress
^ MAStringDescription new
accessor: #emailAddress;
priority: 110;
label: 'email address';
beRequired;
beXmlAttribute;
xmlAttributeName: 'email';
yourself
User class>>descriptionPassword
^ MAStringDescription new
accessor: #password;
priority: 120;
label: 'password';
beRequired;
beHidden;
yourself
---
If you do
| user |
user := COUser new
fullName: 'John Doe';
emailAddress: 'john at doe.com';
password: 'fobar'.
User description toXml: user
you should get
'<user email="john at doe.com" fullName="John Doe"/>'
If you have only one description and you need easy printing than adding the following methods to your model objects might be feasible.
User>>xmlString
^ String streamContents: [:stream|
self printXMLOn: stream ]
User>>printXMLOn: aStream
aStream nextPutAll: (self description toXml: self)
Hope it helps,
Norbert
> Le 06/04/11 14:38, Philippe Marschall a écrit :
>> 2011/4/6 Olivier Auverlot<olivier.auverlot at gmail.com>:
>>> I have modified the code with the following modifications :
>>>
>>> HttpRequest>>#rawPostFields
>>> ^self propertyAt: #rawPostFields ifAbsentPut: [
>>> (self isPostRequest) ifTrue: [
>>> stream next: self contentLength
>>> ] ifFalse: [
>>> ''
>>> ].
>>> ]
>>>
>>> Now, it seems ok. I can send GET or POST requests and send XML data. For
>>> read this data, I use the rawBody propertie.
>>>
>>> For example:
>>>
>>> postXML
>>> <POST>
>>> <Consumes: 'text/xml'>
>>> <Path: '/postxml'>
>>> Transcript show: self requestContext request rawBody.
>>>
>>> Now, I must find a cool tool for parsing XML...
>> Magritte-XML ;-)
>>
>> Cheers
>> Philippe
>> _______________________________________________
>> seaside mailing list
>> seaside at lists.squeakfoundation.org
>> http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
>
> _______________________________________________
> seaside mailing list
> seaside at lists.squeakfoundation.org
> http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
More information about the seaside
mailing list