That sounds great.

I wonder BTW if we should just provide a constructor to the
XStreamDataFormat class which allows a list of classes to be
specified?

Then in spring XML you can do the equivalent of invoking the constructor...

XStreamDataFormat(Class... classesWithAnnotations) {
...
}

2008/10/23 cmoulliard <[EMAIL PROTECTED]>:
>
> James,
>
> In the meantime, I have implemented an interesting workaround to allow what
> I describe in my previous message.
>
> Here is a explanation + code of what I have done. Maybe, this could interest
> other users.
>
> 1) Formatter Class
>
> I have created a factory Formatter class who will generate a
> XStreamDataFormat object through a createInstance method. This method is
> called by Spring through the factory-method property and receives as
> parameter the name of the class to be formatted by Xstream.
>
> import org.apache.camel.dataformat.xstream.XStreamDataFormat;
>
> import com.thoughtworks.xstream.XStream;
>
> public class Formatter {
>
>        private static XStreamDataFormat myDataformat;
>
>        private Formatter() {}
>
>        @SuppressWarnings("unchecked")
>        public static XStreamDataFormat createInstance(Class 
> classToBeFormated) {
>
>        XStream xstream = new XStream();
>        xstream.processAnnotations(classToBeFormated);
>        myDataformat = new XStreamDataFormat();
>        myDataformat.setXStream(xstream);
>
>                return myDataformat;
>
>        }
>
> }
>
> 2) Spring and Camel configuration
>
> To allow Camel to use the XStreamDataFormat object formatted with my
> StockPrice class, I create a bean reference in the spring-camel.xml file
> where the parameter provided as argument is the name of the class to be
> formatted and the method to be called in my factory is createInstance.
>
> <bean id="myXstreamDataFormat" class="com.mycompany.model.Formatter"
>                factory-method="createInstance">
>                <constructor-arg value="com.mycompany.model.StockPrice" />
> </bean>
>
> Here is a snaphot of the Camel route who uses the myXStreamDataFormat bean
> reference
>
> <route>
>        <from
> uri="timer:generateStockPrice?fixedRate=true&amp;delay=0&amp;period=6000" />
>                <to uri="bean:stockPriceGenerator" />
>                <marshal ref="myXstreamDataFormat" />
>
> Remark : the class to be formatted uses Xstream annotation
>
> Here is the code :
>
> import com.thoughtworks.xstream.annotations.XStreamAlias;
> import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
>
> @XStreamAlias("price")
> public class StockPrice {
>        @XStreamAsAttribute
>    private String stock;
>
>        @XStreamAsAttribute
>        private double price;
>
>        @XStreamAsAttribute
>        private String movement;
>
>        @XStreamAsAttribute
>        private double offer;
>
>    public double getOffer() {
>                return offer;
>        }
>
>        public void setOffer(double offer) {
>                this.offer = offer;
>        }
>
>    public String getMovement() {
>                return movement;
>        }
>
>        public void setMovement(String movement) {
>                this.movement = movement;
>        }
>
>    public String getStock() {
>        return stock;
>    }
>
>    public void setStock(String stock) {
>        this.stock = stock;
>    }
>
>    public double getPrice() {
>        return price;
>    }
>
>    public void setPrice(double price) {
>        this.price = price;
>    }
>
>    @Override
>    public String toString() {
>        return "StockPrice[stock: " + stock + " bid: " + price + " offer: "
> + offer + " movement: " + movement + "]";
>    }
> }
>
> In consequence, using spring in combination with XStream Annotation, I'm
> able to marshall/unsmarshall my objects no matter which model is required
> (StockPrice.class, ....) and mapping strategy required between the XML
> and/or java attributes.
>
> KR,
>
> Charles
>
> James.Strachan wrote:
>>
>> 2008/10/22 cmoulliard <[EMAIL PROTECTED]>:
>>>
>>> Many thanks.
>>>
>>> In this case, it will be required that I create my own format
>>> (XSTreamDataFormat) like this o use annotation :
>>>
>>>                XStream xstream = new XStream();
>>>                xstream.processAnnotations(StockPrice.class);
>>>                XStreamDataFormat myformat = new XStreamDataFormat();
>>>                myformat.setXStream(xstream);
>>>
>>>                from("direct:in").marshal(myformat).to("mock:result");
>>
>>
>> Do you have to tell XStream which classes to look for annotations? I'd
>> have thought, like JAXB, it'd just look for the annotations by default
>> on whatever classes it was marshalling. But I guess for unmarshalling
>> it needs to know (rather like the JAXBContext needs to know the
>> classes/packages)
>>
>>> Remark :
>>>
>>> It should be interesting to use the xstream dataformat with a parameter
>>> indicating that XStream must process annotation
>>> from("").marshal().xstream().processAnnotation().to("") to avoid to
>>> create
>>> its own DataFormat ?
>>
>> I think like JAXB, we'd just need to create the XStreamDataFormat
>> explicitly using whatever configuration is required
>>
>> --
>> James
>> -------
>> http://macstrac.blogspot.com/
>>
>> Open Source Integration
>> http://fusesource.com/
>>
>>
>
>
> -----
> Enterprise Architect
>
> Xpectis
> 12, route d'Esch
> L-1470 Luxembourg
>
> Phone +352 25 10 70 470
> Mobile +352 621 45 36 22
>
> e-mail : [EMAIL PROTECTED]
> web site :  www.xpectis.com www.xpectis.com
> My Blog :  http://cmoulliard.blogspot.com/ http://cmoulliard.blogspot.com/
> --
> View this message in context: 
> http://www.nabble.com/Xstream-marshalling---Alias-tp20089956s22882p20130279.html
> Sent from the Camel - Users mailing list archive at Nabble.com.
>
>



-- 
James
-------
http://macstrac.blogspot.com/

Open Source Integration
http://fusesource.com/

Reply via email to