Oxerp utilise un marshaller/unmarshaller custom. Les classes de ce marshaller sont dans les packages org.oxerp.xml.*.
Le marshaller utilise un fichier de mapping. Son format est compatible avec celui du projet Castor (org.exolab.xml). En conséquence, vous pouvez utiliser les tags XDoclet castor pour le générer. Une section de ce fichier de mapping :
<class name='org.oxerp.xml.test.ClassTest'> <map-to xml='product' /> <field name='categ' type='java.lang.String' direct='true'> <bind-xml name='category' node='attribute' /> </field> <field name='lib' type='string' direct='true'> <bind-xml name='libelle' /> </field> <field name='d' type='date'> <bind-xml name='date' node='attribute' /> </field> <field name='examples' type='string' collection="collection"> <bind-xml name='col-ex' node='element' /> </field> <field name="inner" type="org.oxerp.xml.test.ClassTestInner"> <bind-xml name="inner" /> </field> <field name='inners' type="org.oxerp.xml.test.ClassTestInner" collection="collection"> <bind-xml name='inners' node='element' /> </field> <field name='paymentConditions' type="org.oxerp.xml.test.ClassTestAbstract"> <bind-xml name='payment-conditions' node='element' /> </field> <field name='examplesSet' type='string' collection="set"> <bind-xml name='col-ex-set' node='element' /> </field> </class>
-
Tag class, attribut name : la classe concernée par le marshalling
-
Tag field, attribut name : un attribut java dans la classe si direct est réglé à true, un couple de méthodes set/get sinon
-
Tag field, attribut type : string, java.lang.String, date, java.util.Date, integer, int, double, long, short, boolean, double, float sont les types de base par défaut. Vous pouvez créez vos propres type en vous appuyant sur une de vos classes et en décrivant ce nouveau type dans ce fichier de mapping.
-
Tag field, attribut collection : si sa valeur est 'collection' une java.util.List est attendue, si sa valeur est "set", un java.util.Set est utilisé
-
Tag bind-xml : la contre-partie xml du champ, xml attribut ou xml element
Vous pouvez mettre en place vos propres types simples. Pour cela, créez une sous-classe de org.oxerp.xml.SimpleType, definissez les méthodes format, parse et getClassType. Ajoutez ensuite une section "simple-type" dans le fichier de mapping (cette partie est incompatible avec le format Castor) ; l'attribut name est le nom du type de base, que vous réutiliserez dans les attributs field d'une classe Voir org.oxerp.xml.test.SimpleTypeDecimal avec oxerp_mapping.xml dans oxerp-marshaller.jar.
<simple-type name="decimal" class="org.oxerp.xml.test.SimpleTypeDecimal"/>
Mapping m = new Mapping(); try { m.loadMapping("oxerp_mapping.xml"); unmarshaller = new Unmarshaller(); unmarshaller.setMapping(m); Reader reader = new BufferedReader(new FileReader(file)); Object o = unmarshaller.unmarshal(reader, ClassTest.class); ClassTest ct = (ClassTest)o; Marshaller marshaller = new Marshaller(); marshaller.setMapping(m); Writer w = new BufferedWriter(new FileWriter(file)); marshaller.marshal(o, w); w.close();