Hi,
I've localized my problem and also found a solution for it. But still the 
question is that the default behavior of binding generation is a bit strange in 
this particular case. I'll explain the problem with a more clear example 
(although not realistic) this time.

For example generating code and binding from the schema:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"; 
xmlns="http://uni.tuebingen.de/sfs/testexample"; elementFormDefault="qualified" 
targetNamespace="http://uni.tuebingen.de/sfs/testexample";>
    <xs:element name="example">
        <xs:complexType>
            <xs:choice maxOccurs="unbounded">
                <xs:element ref="text01"/>
                <xs:element ref="text02"/>
            </xs:choice>
            <xs:attribute name="lang" type="xs:string"/>
            <xs:attribute name="source" type="xs:anyURI"/>
        </xs:complexType>
    </xs:element>
    <xs:element name="text01">
        <xs:complexType>
            <xs:simpleContent>
                <xs:extension base="xs:string">
                </xs:extension>
            </xs:simpleContent>
        </xs:complexType>
    </xs:element>
    <xs:element name="text02">
        <xs:complexType>
            <xs:simpleContent>
                <xs:extension base="xs:string">
                    <xs:attribute name="ID" type="xs:ID"/>
                </xs:extension>
            </xs:simpleContent>
        </xs:complexType>
    </xs:element>
</xs:schema>


would generate binding with two different mapping scenarios for <text01> and 
<text02> although these elements differ only in attribute specification:

<binding xmlns:tns="http://uni.tuebingen.de/sfs/testexample"; name="binding" 
package="de.tuebingen.uni.sfs.testexample">
  <namespace uri="http://uni.tuebingen.de/sfs/testexample"; default="elements"/>
  <mapping class="de.tuebingen.uni.sfs.testexample.Example" name="example">
    <collection get-method="getChoices" set-method="setChoices" 
create-type="java.util.ArrayList">
      <structure type="de.tuebingen.uni.sfs.testexample.Example$Choice" 
ordered="false" choice="true">
        <structure type="de.tuebingen.uni.sfs.testexample.Text01" 
test-method="ifText01" get-method="getText01" set-method="setText01" 
usage="optional"/>
        <structure type="de.tuebingen.uni.sfs.testexample.Text02" 
test-method="ifText02" get-method="getText02" set-method="setText02" 
usage="optional"/>
      </structure>
    </collection>
    <value style="attribute" name="lang" get-method="getLang" 
set-method="setLang" usage="optional"/>
    <value style="attribute" name="source" get-method="getSource" 
set-method="setSource" usage="optional"/>
  </mapping>
  <mapping class="de.tuebingen.uni.sfs.testexample.Text01" name="text01">
    <value style="element" name="text01" get-method="getText01" 
set-method="setText01"/>
  </mapping>
  <mapping class="de.tuebingen.uni.sfs.testexample.Text02" name="text02">
    <value style="text" get-method="getString" set-method="setString"/>
    <value style="attribute" name="ID" get-method="getID" set-method="setID" 
usage="optional"/>
  </mapping>
</binding>


The result of such a binding is that the file below couldn't be unmarshalled:

<?xml version="1.0" encoding="UTF-8"?>
<example xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
    xmlns="http://uni.tuebingen.de/sfs/testexample";>
    <text01>Ich bin im Sande eingeschlafen.</text01>     
    <text02>Ich bin im Sande eingeschlafen.</text02>
</example>


Because the binding expects the file like this:

<?xml version="1.0" encoding="UTF-8"?>
<example xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
    xmlns="http://uni.tuebingen.de/sfs/testexample";>
    <text01>
        <text01>Ich bin im Sande eingeschlafen.</text01></text01>     
    <text02>Ich bin im Sande eingeschlafen.</text02>
</example>

The solution I found for it is to change the mapping for <text01>  manually, so 
that it looks similar to the mapping for <text02>, i.e. I've changed it to:

<mapping class="de.tuebingen.uni.sfs.testexample.Text01" name="text01">
    <!--<value style="element" name="text01" get-method="getText01" 
set-method="setText01"/>-->
    <value style="text" get-method="getText01" set-method="setText01"/>
  </mapping>

Now the file will be marshalled and unmarshalled correctly:

<?xml version="1.0" encoding="UTF-8"?>
<example xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
    xmlns="http://uni.tuebingen.de/sfs/testexample";>
    <text01>Ich bin im Sande eingeschlafen.</text01>     
    <text02>Ich bin im Sande eingeschlafen.</text02>
</example>

I think the default behavior is wrong. Changing binding file manually each time 
I regenerate it, it is not very convenient, so is it possible to customize 
this? How?

Kind regards,
Yana




      
------------------------------------------------------------------------------
_______________________________________________
jibx-users mailing list
jibx-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jibx-users

Reply via email to