Keith

Now I've got mapping to work, things are looking a lot better. In the mapping file I've defined mappings for Mzzz and I'm no longer getting duplicates or "AsReference"
in the marshalled file.

Thanks for the pointers: you helped me a lot.

Steve

On 24 Aug 2005, at 05:58, Keith Visco wrote:

Steve,

Did you regenerate your classes + descriptors and recompile both after making the changes to the properties file?

What does your binding file look like? The binding file takes a higher precendence than what's in the properties file, so sometimes a configuration setting in the binding file may be conflicting with that in the properties file. A good example of this is when using "type" vs "element" centric binding methods.

Are you using a byte-code modifier like cglib that could possibly be injecting code into your classes before the marshalling takes place? If so Castor will have trouble matching the modified class with that specified in the binding file since the classes won't be equal as they're loaded with two different class loaders.

If none of the above helps then I don't think I'm going to be able to guess as to what the problem might be without looking at it first hand. If you can send me a test case which demonstrates the issue I'll be happy to take a look at it here.

--Keith




Stephen Winnall wrote:

I've solved the problem of the exception being thrown by setMapping (). As the discerning reader will have noticed, I forgot to pass a classloader (e.g. getClass().getClassLoader()) to the Mapping constructor. 1 down, 2 to go. Maybe marketing isn't for me after all...
Steve
On 23 Aug 2005, at 16:47, Stephen Winnall wrote:

Keith

Thanks for the feedback.



It sounds like the generated classes have the JDO friendly getters which return an actual reference to the internal collections instead of a copy. Which would explain why "AsReference" appears in the getter names of the generated sources.



I switched off the JDO-friendly getters with

    org.exolab.castor.builder.extraCollectionMethods=false

and still get the "AsReference" suffix on the marshalled elements. There are NO getters generated with this suffix, even with the above set to "true".



Though I'm not sure why the "AsReference" methods would be showing up in the XML, it sounds like Castor was not able to find the proper ***Descriptor.class. Make sure you compiled all the descriptor classes, also you may need to define a mapping file for your MyOwnStuff class which simply declares that it extends the Mzzz class so that Castor doesn't try to re- introspect the class.



I'm pretty sure that all the descriptor files have been compiled. They're in a folder together with the other SourceGen generated files which I wipe out en bloc before generating new sets of files. Eclipse compiles them automatically. Of course,
MyOwnStuff doesn't have a descriptor file...

I have tried to set up a mapping file. However, I get the following error from
setMapping:

org.exolab.castor.mapping.MappingException: Nested error: org.exolab.castor.mapping.MappingException: Could not find the class a.b.c.d.MyOwnStuff

My mapping file contains entries like the following:

    <class name="a.b.c.d.MyOwnStuff"
        extends="a.b.c.d.xml.Mzzz"> </class>
    <class name="a.b.c.d.xml.Mzzz"> </class>

I have a sneaking suspicion that this may be because MyOwnStuff is in a different folder from the SourceGen generated files (a.b.c.d.xml.*), but I'm not sure. I use the following code in class a.b.c.d.WriteModel to set up the mapping:

        Mapping mapping = new Mapping();
mapping.loadMapping(getClass().getResource("model- mapping.xml"));
        ...
        marshaller.setMapping(mapping);

where "model-mapping.xml" is also in a.b.c.d.



If you are using 0.9.7 you can put this mapping in a ".castor.xml" file so that castor will automatically load the mapping without needing to specify it.



I am indeed using 0.9.7. I didn't know about ".castor.xml", so I looked in the source to try to work out how to use it. I could only find the following declaration in SourceGenerator.java:

    private static final String MAPPING_FILE = ".castor.xml";

but it doesn't seem to be referenced anywhere, so I'm none the wiser.

This whole thing is something of a show-stopper for me, so I'd be greatful for any assitance anyone could offer. In the meantime I'm contemplating whether to retrain
for a career in marketing.

Cheers
Steve



Stephen Winnall wrote:



I have generated (in simplified terms) the following structure with SourceGen:
public abstract class MAbstractRoot {}          // written by me
public class MBaseType extends MAbstractRoot {} // generated by SourceGen, "extends" defined in binding file
public class Mxxx extends MBaseType {}    // generated by SoureGen
.... // generated by SourceGen public class Mzzz extends Myyy {} // generated by SourceGen
public class MyOwnStuff extends Mzzz {}    // written by me
When I marshal an object from the class MyOwnStuff, all of the fields generated are duplicated and are identical, except for the fact one of the pairs has the suffix
"AsReference" on the element name.
I have only been able to find references to the "AsReference" suffix in conjunction with getters and setters. Could someone please point me at an explanation of what is happening
here and how to control (OK - prevent) it?
Regards
Steve
-------------------------------------------------
If you wish to unsubscribe from this list, please send an empty message to the following address:
[EMAIL PROTECTED]
-------------------------------------------------





-------------------------------------------------
If you wish to unsubscribe from this list, please send an empty message to the following address:

[EMAIL PROTECTED]
-------------------------------------------------






-------------------------------------------------
If you wish to unsubscribe from this list, pleasesend an empty message to the following address:

[EMAIL PROTECTED]
-------------------------------------------------



-------------------------------------------------
If you wish to unsubscribe from this list, please send an empty message to the following address:
[EMAIL PROTECTED]
-------------------------------------------------



-------------------------------------------------
If you wish to unsubscribe from this list, please send an empty message to the following address:

[EMAIL PROTECTED]
-------------------------------------------------




-------------------------------------------------
If you wish to unsubscribe from this list, please send an empty message to the following address:

[EMAIL PROTECTED]
-------------------------------------------------

Reply via email to