I found what the problem was. First I thought, that I only need the classes in the mapping file, which I want to modify. But after hours of tests, I found out, that I have to put the whole corresponding class-structure there. Otherwise all the statements in the mapping file will be ignored. I didn't know that. The following mapping file works now:
<?xml version="1.0"?> <!DOCTYPE mapping PUBLIC "-//EXOLAB/Castor Mapping DTD Version 1.0//EN" "http://castor.org/mapping.dtd"> <mapping> <description>Testbestellung</description> <class name="bestellung.ORDERS05"> <field name="IDOC" type="bestellung.IDOC"> <bind-xml name="IDOC" node="element" /> </field> </class> <class name="bestellung.IDOC"> <field name="BEGIN" type="string"> <bind-xml name="BLABLABLA" node="attribute" /> </field> <field name="EDI_DC40" type="bestellung.EDI_DC40"> <bind-xml name="EDI_DC40" node="element" /> </field> <field name="E1EDK01" type="bestellung.E1EDK01"> <bind-xml name="E1EDK01" node="element" /> </field> <field name="E1EDKA1" type="bestellung.E1EDKA1"> <bind-xml name="E1EDKA1" node="element" /> </field> <field name="E1EDK02" type="bestellung.E1EDK02"> <bind-xml name="E1EDK02" node="element" /> </field> <field name="E1EDP01" type="bestellung.E1EDP01"> <bind-xml name="E1EDP01" node="element" /> </field> </class> <class name="bestellung.EDI_DC40" auto-complete="true" /> <class name="bestellung.E1EDK01" auto-complete="true" /> <class name="bestellung.E1EDKA1" auto-complete="true" /> <class name="bestellung.E1EDK02" auto-complete="true" /> <class name="bestellung.E1EDP01"> <field name="POSEX" type="string" /> <field name="MENGE" type="string" /> <field name="MENEE" type="string" /> <field name="E1EDP20" type="bestellung.E1EDP20"> <bind-xml name="E1EDP20" node="element" /> </field> <field name="E1EDP19" type="bestellung.E1EDP19"> <bind-xml name="E1EDP19" node="element" /> </field> </class> <class name="bestellung.E1EDP20" auto-complete="true" /> <class name="bestellung.E1EDP19" auto-complete="true" /> </mapping> Best regards, Konni Konni wrote: > > Now I reduced my application to only the first few XML tags. Now the > mapping file works, but now I get an additional attribute in the root tag > (ORDERS05) called "valid". How can I avoid this ? I still don't understand > why it works with only a few xml tags. > > Here is the result: > > <?xml version="1.0" encoding="iso-8859-1"?> > <ORDERS05 valid="true"> > <IDOC BLABLA="1"/> > </ORDERS05> > > BR, > Konni > > PS: The original code is also at jira.codehaus.org. > > > > Werner Guttmann wrote: >> >> Okay, that makes it more complete to understand what you are trying to >> achieve. With regards to your question, yes, this should be possible out >> of the box. >> >> My working assumption is that your mapping file is not being picked up, >> for whatever reason. The fact that you are seeing one of the info >> messages does not necessarily indicate that Castor XML uses a descriptor >> as derived from the mapping. >> >> Can you please create a Jira issue and somebody will be having a look ? >> When doing so, can you please follow the guidelines at >> >> http://castor.org/how-to-submit-an-xml-bug.html >> >> Regards >> Werner >> >> Konni wrote: >>> Yes, I used castor's code generator to generate the Java classes. Maybe >>> I was >>> misunderstanding something, since I'm new to castor. I'll explain what I >>> want to achieve. >>> >>> We want to do EDI (especially purchase orders) with several suppliers. >>> Most >>> of them have SAP software. So I created a general XML schema definition >>> (XSD) for this message from which I generated the Java classes. But not >>> all >>> of the suppliers will follow correctly this guideline. So for them I >>> wanted >>> to use an individual mapping file. >>> >>> Isn't this possible ? >>> >>> Best regards, >>> Konni >>> >>> >>> >>> Werner Guttmann wrote: >>>> Hold on, did you use Castor's code generator to generate Java classes >>>> from your XML schema ? If yes, why do you want to use a mapping file at >>>> all ? >>>> >>>> Werner >>>> >>>> Konni wrote: >>>>> The fully qualified class name "bestellung.IDOC" is needed here. >>>>> Otherwise I >>>>> get a MappingException (Class not found...). Since the IDOC class >>>>> extends >>>>> the SAP_IDOC class, I also tried the following: >>>>> >>>>> <class name="bestellung.SAP_IDOC"> >>>>> or >>>>> <class name="bestellung.IDOC" extends="bestellung.SAP_IDOC"> >>>>> >>>>> Both have no effect. The getter and setter methods are in the SAP_IDOC >>>>> class. >>>>> I'm using castor version 1.1.2.1. >>>>> >>>>> Here is a snippet of the corresponding XML schema. Maybe this helps. >>>>> >>>>> <xs:complexType name="root"> >>>>> <xs:sequence> >>>>> <xs:element name="IDOC" type ="SAP_IDOC"/> >>>>> </xs:sequence> >>>>> </xs:complexType> >>>>> >>>>> <xs:complexType name="SAP_IDOC"> >>>>> <xs:sequence> >>>>> <xs:element name="EDI_DC40" type="header" minOccurs="0"/> >>>>> <xs:element name="E1EDK01" type="K01"/> >>>>> <xs:element name="E1EDKA1" type="KA1" maxOccurs="3"/> >>>>> <xs:element name="E1EDK02" type="K02"/> >>>>> <xs:element name="E1EDK35" type="K35" minOccurs="0"/> >>>>> <xs:element name="E1EDP01" type="P01" maxOccurs="unbounded"/> >>>>> </xs:sequence> >>>>> <xs:attribute name="BEGIN" type="xs:string" fixed="1"/> >>>>> </xs:complexType> >>>>> >>>>> Best regards, >>>>> Konni >>>>> >>>>> >>>>> >>>>> >>>>> Werner Guttmann wrote: >>>>>> Hi, >>>>>> >>>>>> very hard to tell, as looking at this, I cannot spot the obvious >>>>>> error. >>>>>> What about the fulyl qualified class name of the IDOC class ? If >>>>>> that#s >>>>>> wrong, Castor XML will use introspection, which might be what is >>>>>> happening ? >>>>>> >>>>>> Regards >>>>>> Werner >>>>>> >>>>>> PS What Castor version are you using ? >>>>>> >>>>>> Konni wrote: >>>>>>> I'm new to castor and I wanted to use a mapping file in order to >>>>>>> modify >>>>>>> my >>>>>>> xml-file in the marshalling process. But the mapping file has no >>>>>>> effect. >>>>>>> >>>>>>> Here is the mapping file (Mapping.xml): >>>>>>> >>>>>>> <?xml version="1.0" encoding="iso-8859-1"?> >>>>>>> <mapping> >>>>>>> <class name="bestellung.IDOC"> >>>>>>> <map-to xml="IDOC"/> >>>>>>> <field name="BEGIN" type="string"> >>>>>>> <bind-xml name="BLABLABLA" node="attribute" /> >>>>>>> </field> >>>>>>> </class> >>>>>>> </mapping> >>>>>>> >>>>>>> Here is the beginning of the original xml file: >>>>>>> >>>>>>> <?xml version="1.0" encoding="iso-8859-1"?> >>>>>>> <ORDERS05> >>>>>>> <IDOC BEGIN="1"> >>>>>>> <EDI_DC40 SEGMENT="1"> >>>>>>> ... >>>>>>> >>>>>>> Here is my Java code: >>>>>>> >>>>>>> ... >>>>>>> FileWriter writer = new >>>>>>> FileWriter("Testbestellung_neu.xml"); >>>>>>> Marshaller marshaller = new Marshaller(writer); >>>>>>> Mapping mapping = new Mapping(); >>>>>>> mapping.loadMapping(new >>>>>>> URL("file:/D:/Temp/XML/Mapping.xml")); >>>>>>> marshaller.setMapping(mapping); >>>>>>> marshaller.setEncoding("iso-8859-1"); >>>>>>> marshaller.marshal(orders05); >>>>>>> writer.close(); >>>>>>> ... >>>>>>> >>>>>>> I expected the IDOC segment after the marshalling process like the >>>>>>> following: >>>>>>> >>>>>>> <IDOC BLABLABLA="1"> >>>>>>> >>>>>>> The mapping file is in the classpath. When I call the program, there >>>>>>> is >>>>>>> the >>>>>>> INFO message "Loading mapping descriptors from ...". So the file >>>>>>> will >>>>>>> be >>>>>>> found. And there are no error messages. >>>>>>> >>>>>>> What am I doing wrong ? >>>>>>> >>>>>> --------------------------------------------------------------------- >>>>>> To unsubscribe from this list please visit: >>>>>> >>>>>> http://xircles.codehaus.org/manage_email >>>>>> >>>>>> >>>>>> >>>> >>>> --------------------------------------------------------------------- >>>> To unsubscribe from this list please visit: >>>> >>>> http://xircles.codehaus.org/manage_email >>>> >>>> >>>> >>> >> >> >> --------------------------------------------------------------------- >> To unsubscribe from this list please visit: >> >> http://xircles.codehaus.org/manage_email >> >> >> > > -- View this message in context: http://www.nabble.com/Problem-with-mapping-file-tf4594474.html#a13151000 Sent from the Castor - User mailing list archive at Nabble.com. --------------------------------------------------------------------- To unsubscribe from this list please visit: http://xircles.codehaus.org/manage_email

