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&delay=0&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.