Hi Werner
>> But I have to define a global element as an unbounded sequence, so that
>> there is no good workaround for this.
> Why not ? What is the exact reason you have to set min-/maxOccurs on the
> sequence rather than the enclosed element definitions ?
Ok, in my special case, the sequence consists of one element only. So I
can change
element - sequence(0, n) - element
to
element - sequence(1, 1) - element(0, n)
But if the sequence contains more than one element I cant do
element - sequence(1, 1) -(element, element, ...) (0, n)
A workaround would be
element - sequence(1, 1) - sequence(1, n) (element, ....)
Ok, for my project it works fine if a put the cardinalities to the
element and not to the sequence.
Another problem occurs when unmarshalling XMLs with more than one
namespace. With Castor-Version 1.1.2 it works but with higher versions
there are problems. It seems that order of namespace declarations at the
root element is of importance. If I write the root element like
<root xmlns="first/namespace" xmlns:other="other/namespace">
the XML is read correctly. But if a write
<root xmlns:other="other/namespace" xmlns="first/namespace">
there are errors like
The field '_element' (whose xml name is 'element') is a required field
of class com.castorgen.ElementXml
although the XML satisfies the schema.
Do you know whether there are changes in higher version that handle
namespace declaration in another way?
My problem is, that for my first problem I need the newest version
(1.3rc1), but my second problem is only solved by an earlier version
(e.g. 1.1.2).
Best regards
/Roman
>
>> Do you have any ideas regarding this strange behaviour?
> No, not really. I am not sure whether this is a bug or not.
>
>>
>> Thank you
>> /roman
>>
>> Werner Guttmann schrieb:
>>> Hi Roman,
>>>
>>> I just got your sample working (against SVN trunk) by changing the code
>>> to unmarshal things to:
>>>
>>> XMLContext context = new XMLContext();
>>> context.addPackage("your.package");
>>>
>>> Unmarshaller unmarshaller = context.createUnmarshaller();
>>>
>>> Reader source = new FileReader(exampleXml);
>>> Object object = unmarshaller.unmarshal(source);
>>>
>>> I hope this helps.
>>>
>>> Regards
>>> Werner
>>>
>>> Roman Klaehne wrote:
>>>> Hi Werner,
>>>>
>>>>
>>>> before creating a Jira issue I want to be sure whether I did all correct
>>>> and that it is really a bug. It is that I need the functionality as soon
>>>> as possible and I think it will take a quite long time for resolving the
>>>> issue.
>>>>
>>>> For this reason I give you exactly the data of my simple test case,
>>>> plain in this mail. It would be interesting whether you can reproduce
>>>> the failure:
>>>>
>>>> The data:
>>>>
>>>> ########## XML-Schema #####################
>>>> ###########################################
>>>> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
>>>> elementFormDefault="qualified" attributeFormDefault="unqualified">
>>>> <xs:element name="oneElement">
>>>> <xs:complexType/>
>>>> </xs:element>
>>>> <xs:element name="otherElement">
>>>> <xs:complexType/>
>>>> </xs:element>
>>>> </xs:schema>
>>>> ########################################
>>>> ########################################
>>>>
>>>> ########## Binding file ################
>>>> ########################################
>>>> <?xml version="1.0" encoding="ISO-8859-1"?>
>>>> <binding defaultBindingType="type">
>>>> <package>
>>>> <name>castorgen</name>
>>>> <namespace></namespace>
>>>> </package>
>>>>
>>>> <elementBinding name="oneElement">
>>>> <java-class name="OneElementXml"/>
>>>> </elementBinding>
>>>> <elementBinding name="otherElement">
>>>> <java-class name="OtherElementXml"/>
>>>> </elementBinding>
>>>> </binding>
>>>> ########################################
>>>> ########################################
>>>>
>>>> ########## exampleXml ##################
>>>> ########################################
>>>> <?xml version="1.0" encoding="ISO-8859-1"?>
>>>> <oneElement>
>>>> </oneElement>
>>>> ########################################
>>>> ########################################
>>>>
>>>> The call to Unmarshaller producing the exception:
>>>>
>>>> ########################################
>>>> ########################################
>>>> Reader source = new FileReader(exampleXml);
>>>> Unmarshaller unm = new Unmarshaller();
>>>> Object o = unm.unmarshal(source);
>>>> ########################################
>>>> ########################################
>>>>
>>>> The used java libraries are listed below.
>>>>
>>>>
>>>> Best Regards
>>>> /Roman
>>>>
>>>> Werner Guttmann schrieb:
>>>>> Sorry, Roman, but no attachments to any of the mailing lists, as there's
>>>>> no guarantee that they arrive at the other end.
>>>>>
>>>>> As already suggested, can you please create a new Jira issue and attach
>>>>> your files ?
>>>>>
>>>>> Regards
>>>>> Werner
>>>>>
>>>>> Roman Klaehne wrote:
>>>>>> Hi Werner,
>>>>>>
>>>>>>
>>>>>> in the attachment you will find a very simple Eclipse project, containing
>>>>>>
>>>>>> (i) a simple XML Schema (in xml-schema/)
>>>>>>
>>>>>> (ii) a binding file for the schema (in xml-schema/castor-bindings)
>>>>>>
>>>>>> (iii) the generated class files (in lib/castorgen.jar)
>>>>>>
>>>>>> (iv) a simple class castor.test.Test (in src/)
>>>>>>
>>>>>> (v) two xml instances in (xml-instances/)
>>>>>>
>>>>>> (vi) an ant build file containing the tasks for generating the java
>>>>>> sources and for compiling the Test class.
>>>>>>
>>>>>> The following libraries has to be on the classpath (see .classpath) and
>>>>>> are not included in the attached ZIP file:
>>>>>>
>>>>>> ant-contrib.jar
>>>>>> castor-1.2-anttasks.jar
>>>>>> castor-1.2-codegen.jar
>>>>>> castor-1.2.jar
>>>>>> castor-1.2-xml.jar
>>>>>> castor-1.2-xml-schema.jar
>>>>>> commons-logging.jar
>>>>>> serializer.jar
>>>>>> velocity-dep.jar
>>>>>> xalan-2.7.0.jar
>>>>>> xercesImpl.jar
>>>>>> xml-apis.jar
>>>>>>
>>>>>> When running the test class (specifying an xml instance, e.g.,
>>>>>> xml-instances/oneElement.xml) the following exception occurs:
>>>>>>
>>>>>> Exception in thread "main" org.exolab.castor.xml.MarshalException: The
>>>>>> class for the root element 'oneElement' could not be found.{File: [not
>>>>>> available]; line: 2; column: 13}
>>>>>> at
>>>>>> org.exolab.castor.xml.Unmarshaller.convertSAXExceptionToMarshalException(Unmarshaller.java:761)
>>>>>> at org.exolab.castor.xml.Unmarshaller.unmarshal(Unmarshaller.java:727)
>>>>>> at org.exolab.castor.xml.Unmarshaller.unmarshal(Unmarshaller.java:616)
>>>>>> at castor.test.Test.main(Test.java:23)
>>>>>> Caused by: org.xml.sax.SAXException: The class for the root element
>>>>>> 'oneElement' could not be found.
>>>>>> at
>>>>>> org.exolab.castor.xml.UnmarshalHandler.startElement(UnmarshalHandler.java:1589)
>>>>>> .....................
>>>>>>
>>>>>> What is going wrong?
>>>>>>
>>>>>>
>>>>>> Best Regards!
>>>>>> /Roman
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> Werner Guttmann schrieb:
>>>>>>> Roman,
>>>>>>>
>>>>>>> a test case attached to a Jira issue. I don't see a reason why this does
>>>>>>> not work. Can you as such please create an issue at
>>>>>>>
>>>>>>> http://jira.codehaus.org/browse/CASTOR
>>>>>>>
>>>>>>> and attach a fully working test case. If you are using Maven, there's an
>>>>>>> archetype available to assist you with this (as documented at
>>>>>>> http://castor.org/maven-archetypes.html).
>>>>>>>
>>>>>>> Regards
>>>>>>> Werner
>>>>>>>
>>>>>>> Roman Klaehne wrote:
>>>>>>>> Hi Werner,
>>>>>>>>
>>>>>>>>> that should work out of the box.
>>>>>>>> This sounds good. I also thought that it should work.
>>>>>>>>
>>>>>>>>> When you used the XML code generator to
>>>>>>>>> generate the Java classes from your XML schema, it produced
>>>>>>>>> (so-called)
>>>>>>>>> descriptor classes as well. Did you compile those as well, and are
>>>>>>>>> these
>>>>>>>>> available on your classpath as well ?
>>>>>>>> Yes, the descriptor classes are generated and all generated classes are
>>>>>>>> on the classpath.
>>>>>>>>
>>>>>>>> As I said the following code works fine:
>>>>>>>>
>>>>>>>> ***************************************************
>>>>>>>> Unmarshaller u = new Unmarshaller(RootXml.class)
>>>>>>>> Object o = u.unmarshal(reader)
>>>>>>>> ***************************************************
>>>>>>>>
>>>>>>>> But if I instantiate the Unmarshaller without a "root class" argument
>>>>>>>> (using the empty constructor), the error message
>>>>>>>>
>>>>>>>> "The class for the root element 'root' could not be found."
>>>>>>>>
>>>>>>>> arises.
>>>>>>>>
>>>>>>>> My XML-Schema also have a namespace. I don't know whether this is
>>>>>>>> important. But my XML sources have a the same namespace of course.
>>>>>>>>
>>>>>>>> What more information you need to analyze this matter?
>>>>>>>>
>>>>>>>>
>>>>>>>> All the best
>>>>>>>> /roman
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>> Regards
>>>>>>>>> Werner Guttmann
>>>>>>>>>
>>>>>>>>> Roman Klaehne wrote:
>>>>>>>>>> Hi,
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> I am using the Castor Source Code Generator together with Castor
>>>>>>>>>> Unmarshaller.
>>>>>>>>>>
>>>>>>>>>> For the simple XML schema:
>>>>>>>>>>
>>>>>>>>>> *******************************************************************
>>>>>>>>>> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
>>>>>>>>>> elementFormDefault="qualified" attributeFormDefault="unqualified">
>>>>>>>>>> <xs:element name="root"/>
>>>>>>>>>> <xs:element name="element"/>
>>>>>>>>>> </xs:schema>
>>>>>>>>>> *******************************************************************
>>>>>>>>>>
>>>>>>>>>> I have such a binding file:
>>>>>>>>>>
>>>>>>>>>> **************************************************
>>>>>>>>>> <binding defaultBindingType="type">
>>>>>>>>>> <elementBinding name="root">
>>>>>>>>>> <java-class name="RootXml"/>
>>>>>>>>>> </elementBinding>
>>>>>>>>>> <elementBinding name="element">
>>>>>>>>>> <java-class name="ElementXml"/>
>>>>>>>>>> </elementBinding>
>>>>>>>>>> </binding>
>>>>>>>>>> **************************************************
>>>>>>>>>>
>>>>>>>>>> After generating the source code for the schema using the binding
>>>>>>>>>> file
>>>>>>>>>> above I want to unmarshall XML sources to the repective Java classes.
>>>>>>>>>>
>>>>>>>>>> When doing
>>>>>>>>>>
>>>>>>>>>> ***************************************************
>>>>>>>>>> Unmarshaller u = new Unmarshaller(RootXml.class)
>>>>>>>>>> Object o = u.unmarshal(reader)
>>>>>>>>>> ***************************************************
>>>>>>>>>>
>>>>>>>>>> the object o is correctly unmarshalled and is an instance of class
>>>>>>>>>> RootXml (as it should be).
>>>>>>>>>>
>>>>>>>>>> But when using the default constructor of Unmarshaller (without
>>>>>>>>>> giving
>>>>>>>>>> the root class RootXml.class) I get the following error message:
>>>>>>>>>>
>>>>>>>>>> "The class for the root element 'root' could not be found."
>>>>>>>>>>
>>>>>>>>>> My intention is to have XML documents with root elements "<root>" or
>>>>>>>>>> "<element>" and when calling Unmarshaller.unmarshal() I don't know
>>>>>>>>>> the
>>>>>>>>>> type of the XML source (root or element). That means I want to do the
>>>>>>>>>> following:
>>>>>>>>>>
>>>>>>>>>> ****************************************
>>>>>>>>>> Unmarshaller u = new Unmarshaller();
>>>>>>>>>> Object o = u.unmarshal();
>>>>>>>>>>
>>>>>>>>>> if(o instanceof RootXml) {
>>>>>>>>>> doRoot();
>>>>>>>>>> }
>>>>>>>>>> else if(o instanceof ElementXml) {
>>>>>>>>>> doElement();
>>>>>>>>>> }
>>>>>>>>>> ****************************************
>>>>>>>>>>
>>>>>>>>>> Do you have any ideas to get this working?
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> Thanks in advance and best regards
>>>>>>>>>> /Roman Klähne
>>>>>>>>>> (ZIB Berlin)
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> ---------------------------------------------------------------------
>>>>>>>>>> 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
>>>>>>>>
>>>>>>>>
>>>>>>> ---------------------------------------------------------------------
>>>>>>> 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
>>>>>
>>>>>
>>>> ---------------------------------------------------------------------
>>>> 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
>>
>>
>
> ---------------------------------------------------------------------
> 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