hi,

i found some confusing information regarding the usage of xsi:nil to indicate if an obejct or value is null.

on the mailing list i found the following entry:

[jibx-users] JiBX 1.1 beta4 release
Dennis Sosnoski
Thu, 25 May 2006 21:26:05 -0700

4. Added nillable attribute to object group and value element, supporting the xsi:nil attribute at runtime (requires element name, not allowed on abstract mapping)

in the docs i found out that the value element doesn't support nillable=true. interestingly i can add that to my binding and it compiles well. but when it comes to runtime, i get a weird exception:

java.lang.IndexOutOfBoundsException: only START_TAG can have attributes END_TAG seen ...</street>\r\n\t\t<city xsi:nil="true" / >... @10:26
        at org.xmlpull.mxp1.MXParser.getAttributeValue(MXParser.java:927)
at org.jibx.runtime.impl.XMLPullReaderFactory $XMLPullReader.getAttributeValue(XMLPullReaderFactory.java:395) at org.jibx.runtime.impl.UnmarshallingContext.getAttributeValue (UnmarshallingContext.java:356) at org.jibx.runtime.impl.UnmarshallingContext.attributeBoolean (UnmarshallingContext.java:1881) at data.Address.JiBX_C__JavaDev322_JiXB_Test_src_customer_binding_unmarshal _1_1(Address.java) at data.Customer.JiBX_C__JavaDev322_JiXB_Test_src_customer_binding_unmarsha l_1_2(Customer.java) at data.JiBX_C__JavaDev322_JiXB_Test_src_customer_bindingCustomer_access1.u nmarshal() at org.jibx.runtime.impl.UnmarshallingContext.unmarshalElement (UnmarshallingContext.java:2537) at org.jibx.runtime.impl.UnmarshallingContext.unmarshalDocument (UnmarshallingContext.java:2680)
        at test.CustomerWAddressTest.main(CustomerWAddressTest.java:23)

i don't get this is i remove 'nillable=true' from the binding, but then of course the value is not null, it's an empty string (which means something different in our case).

here's the binding:
<?xml version="1.0" encoding="ISO-8859-2"?>
<binding>
<mapping name="customer" class="data.Customer" flexible="true" ordered="false" allow-repeats="true">
                <value name="id" set-method="setJiXBId" get-method="getJiXBId"/>
<value name="first" set-method="setJiXBFirstName" get- method="getJiXBFirstName"/> <value name="last" set-method="setJiXBLastName" get- method="getJiXBLastName"/> <!-- <collection field="addresses" flexible="true" ordered="false"> --> <structure name="address" type="data.Address" allow-repeats="true" flexible="true" ordered="false" set-method="addAddress" get- method="getAddress">
                                <value name="id" set-method="setJiXBId" 
get-method="getJiXBId"/>
<value name="street" set-method="setJiXBStreet" get- method="getJiXBStreet" usage="optional"/> <value name="city" set-method="setJiXBCity" get- method="getJiXBCity" usage="optional" nillable="true"/>
                        </structure>
<!--                 </collection> -->
        </mapping>
</binding>

and here's the example data:
<?xml version="1.0" encoding="ISO-8859-2"?>
<customer xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";>
        <id>1234</id>
        <first>Heinz</first>
        <last>Prueller</last>
        <asdasd>asasd</asdasd>
        <address>
                <id>111</id>
                <street>Daham 1</street>
                <city xsi:nil="true" />
        </address>
</customer>

so do i need to change something in my binding? could i use structure instead of value (and if how can i do that)?

br,
günther

--
Günther Wieser


-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >>  http://get.splunk.com/
_______________________________________________
jibx-users mailing list
jibx-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jibx-users

Reply via email to