Hi I posted that message yesterday using the Nabble but it is still marked as 'pending' (http://camel.465427.n5.nabble.com/XStream-Omit-fields-configuration-patch-td2851421.html#a2851421). So now I try send it directly to the mailing list.
So... XStream allows to ignore selected fields for particular classes (kind of "transient" fields). This feature is descibed here - Tweaking XStream output (http://xstream.codehaus.org/manual-tweaking-output.html). I needed to use that functionality in the Camel XStream data transformation. AbstractXStreamWrapper provides support for aliases and implicit collections but doesn't for XStream#omitField. At this moment this problem can be handled with custom XStream Spring FactoryBean and AbstractXStreamWrapper#setXStream method (just like I did). However this solution is quite verbose. I think that if AbstractXStreamWrapper supports both aliases and implicit collections configuration, it should also supports fields omitting. I've created patch for AbstractXStreamWrapper and unit test for it. Maybe somebody could submit it to the codebase? Kind regards. -- Henryk Konsek
Index: components/camel-xstream/src/test/java/org/apache/camel/dataformat/xstream/XStreamDataFormatOmitFieldsTest.java =================================================================== --- components/camel-xstream/src/test/java/org/apache/camel/dataformat/xstream/XStreamDataFormatOmitFieldsTest.java (revision ) +++ components/camel-xstream/src/test/java/org/apache/camel/dataformat/xstream/XStreamDataFormatOmitFieldsTest.java (revision ) @@ -1,38 +0,0 @@ -package org.apache.camel.dataformat.xstream; - -import com.thoughtworks.xstream.XStream; -import org.apache.camel.impl.DefaultClassResolver; -import org.apache.camel.test.junit4.CamelTestSupport; -import org.junit.Assert; -import org.junit.Test; - -import java.util.HashMap; -import java.util.Map; - -/** - * @author Henryk Konsek - */ -public class XStreamDataFormatOmitFieldsTest extends CamelTestSupport { - - @Test - public void testOmitPrice() { - // GIVEN - PurchaseOrder purchaseOrder = new PurchaseOrder(); - purchaseOrder.setName("foo"); - purchaseOrder.setPrice(1); - - XStreamDataFormat xStreamDataFormat = new XStreamDataFormat(); - Map<String,String[]> omitFields = new HashMap<String,String[]>(); - omitFields.put(PurchaseOrder.class.getName(), new String[]{"price"}); - xStreamDataFormat.setOmitFields(omitFields); - - XStream xStream = xStreamDataFormat.createXStream(new DefaultClassResolver()); - - // WHEN - String marshalledOrder = xStream.toXML(purchaseOrder); - - // THEN - assertTrue(!marshalledOrder.contains("<price>")); - } - -} Index: components/camel-xstream/src/main/java/org/apache/camel/dataformat/xstream/AbstractXStreamWrapper.java =================================================================== --- components/camel-xstream/src/main/java/org/apache/camel/dataformat/xstream/AbstractXStreamWrapper.java (revision ) +++ components/camel-xstream/src/main/java/org/apache/camel/dataformat/xstream/AbstractXStreamWrapper.java (revision 962504) @@ -50,7 +50,6 @@ private List<String> converters; private Map<String, String> aliases; private Map<String, String[]> implicitCollections; - private Map<String, String[]> omitFields; public AbstractXStreamWrapper() { } @@ -88,14 +87,6 @@ } } - if(this.omitFields != null) { - for (Entry<String, String[]> entry : this.omitFields.entrySet()) { - for (String name : entry.getValue()) { - xstream.omitField(resolver.resolveMandatoryClass(entry.getKey()), name); - } - } - } - if (this.converters != null) { for (String name : this.converters) { Class<Converter> converterClass = resolver.resolveMandatoryClass(name, Converter.class); @@ -166,14 +157,6 @@ this.implicitCollections = implicitCollections; } - public Map<String, String[]> getOmitFields() { - return omitFields; - } - - public void setOmitFields(Map<String, String[]> omitFields) { - this.omitFields = omitFields; - } - public XStream getXstream() { return xstream; }