thanks a lot!

Günther Wieser schrieb:
> hi maria,
>
> unfortunately i'm not allowed to post concrete sample code due to  
> legal restrictions of the company i'm working with.
>
> but i can give you an overview of what needs to be done.
>
> think about the following value-entry that cause the problem:
> <value name="text" field="text" usage="optional" nillable="true"/>
>
> you could change that into a structure-entry if you would have an  
> unmarshaller/marshaller:
> <structure name="text" usage="optional" nillable="true"  
> unmarshaller="com.company.YourUnmarshaller"/>
>
> this unmarshaller does the following:
> - receive a jibx unmarshalling context where it can read the content  
> XML structure easily
> - in this case there is no real "structure" as you would expect only  
> content as you replace value-entries
> - so the unmarshaller simply has to read the content from the context,  
> deserialize it into the correct datatype, and give it back
>
> deserialization is, in our case, NOT handled inside the unmarshaller,  
> as we don't know which type exactly to create. so what we have are  
> special jibx-setters on the target objects that allow to set the value  
> as a String, and they handle their deserialization by themselves, eg.:
>
> public class MyClass {
>
> private Integer value;
>
> // normal setter, not used by JiBX
> public void setValue(Integer newValue) {
>       this.value = newValue;
> }
>
> // setter used with JiBX, can be private as it will be included in  
> byte code creation directly
> private void setJiBXValue(String valueAsString) {
>       try {
>               this.value = new Integer(valueAsString);
>       } catch (NumberFormatException nfe) {
>               // do your error handling here
>       }
> }
> }
>
> this is the workaround that we use here until this error get's fixed  
> (if ever).
>
> br,
> günther
>
> Am 28.03.2008 um 15:04 schrieb Maria Aschauer:
>
>   
>> thanks for your reply.
>>
>> we decided to use only the attribute usage="optional" now, but in the
>> near future the support of both attributes is required and this  
>> problem
>> has to be solved. therefore some sample code would be still very  
>> helpful.
>>
>> br,
>> maria
>>
>> Günther Wieser schrieb:
>>     
>>> hi maria,
>>>
>>> i opened a bug for that in the codehaus jira for jibx. did this a few
>>> months ago, so far this bug has not been opened by the developers,
>>> unfortunately.
>>>
>>> we overcome this problem in our production systems by writing our own
>>> unmarshaller so that we could use a structure tag instead of the  
>>> value
>>> tag. using structure plus our own unmarshaller solved this, the
>>> unmarshaller of course is quite easy as long as you can easily detect
>>> your datatypes coming easily (you need to create the correct datatype
>>> from an input string, our datatypes were able to do that already).
>>>
>>> if you need more details let me know, i could post some demo code if
>>> you need it (but it will take until tuesday as monday is off here at
>>> my place).
>>>
>>> br,
>>> günther
>>>
>>> Am 21.03.2008 um 11:18 schrieb Maria Aschauer:
>>>
>>>
>>>       
>>>> hi,
>>>> i am facing the same problem now, is there any solution?
>>>>
>>>> lg maria
>>>>
>>>> Günther Wieser schrieb:
>>>>
>>>>         
>>>>> hi,
>>>>>
>>>>> we found a problem with using nillable="true" and optional="true"  
>>>>> on
>>>>> the very same value tag.
>>>>>
>>>>> think about the following example binding:
>>>>> <?xml version="1.0" encoding="ISO-8859-2"?>
>>>>> <binding>
>>>>>   <mapping name="Data" class="usageoptreq.UsageOptReqData"
>>>>>           ordered="false" flexible="true">
>>>>>           <value name="optional1" field="optional1" nillable="true"
>>>>> usage="optional"/>
>>>>>           <value name="optional2" field="optional2" nillable="true"
>>>>> usage="optional"/>
>>>>>           <value name="optional3" field="optional3" nillable="true"
>>>>> usage="optional"/>
>>>>>           <value name="optional4" field="optional4" nillable="true"
>>>>> usage="optional"/>
>>>>>   </mapping>
>>>>> </binding>
>>>>>
>>>>>
>>>>> we get the following error during runtime (compilation works fine):
>>>>>
>>>>> java.lang.IndexOutOfBoundsException: only START_TAG can have
>>>>> attributes TEXT seen ...<optional1>OO Optional1<... @6: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
>>>>> usageoptreq
>>>>> .UsageOptReqData.JiBX_binding_unmarshal_1_2(UsageOptReqData.java)
>>>>>   at usageoptreq.JiBX_bindingUsageOptReqData_access.unmarshal()
>>>>>   at
>>>>> org
>>>>> .jibx
>>>>> .runtime
>>>>> .impl
>>>>> .UnmarshallingContext.unmarshalElement(UnmarshallingContext.java:
>>>>> 2537)
>>>>>   at
>>>>> org
>>>>> .jibx
>>>>> .runtime
>>>>> .impl
>>>>> .UnmarshallingContext.unmarshalDocument(UnmarshallingContext.java:
>>>>> 2680)
>>>>>   at
>>>>> usageoptreq
>>>>> .UsageOptReqTest.testCompileAndTransform(UsageOptReqTest.java:34)
>>>>>   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>>>>   at
>>>>> sun
>>>>> .reflect
>>>>> .NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:
>>>>> 39)
>>>>>   at
>>>>> sun
>>>>> .reflect
>>>>> .DelegatingMethodAccessorImpl
>>>>> .invoke(DelegatingMethodAccessorImpl.java:
>>>>> 25)
>>>>>   at java.lang.reflect.Method.invoke(Method.java:324)
>>>>>   at junit.framework.TestCase.runTest(TestCase.java:154)
>>>>>   at junit.framework.TestCase.runBare(TestCase.java:127)
>>>>>   at junit.framework.TestResult$1.protect(TestResult.java:106)
>>>>>   at junit.framework.TestResult.runProtected(TestResult.java:124)
>>>>>   at junit.framework.TestResult.run(TestResult.java:109)
>>>>>   at junit.framework.TestCase.run(TestCase.java:118)
>>>>>   at junit.framework.TestSuite.runTest(TestSuite.java:208)
>>>>>   at junit.framework.TestSuite.run(TestSuite.java:203)
>>>>>   at
>>>>> org
>>>>> .eclipse
>>>>> .jdt
>>>>> .internal
>>>>> .junit
>>>>> .runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:
>>>>> 128)
>>>>>   at
>>>>> org
>>>>> .eclipse
>>>>> .jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
>>>>>   at
>>>>> org
>>>>> .eclipse
>>>>> .jdt
>>>>> .internal
>>>>> .junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:
>>>>> 460)
>>>>>   at
>>>>> org
>>>>> .eclipse
>>>>> .jdt
>>>>> .internal
>>>>> .junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:
>>>>> 673)
>>>>>   at
>>>>> org
>>>>> .eclipse
>>>>> .jdt
>>>>> .internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:
>>>>> 386)
>>>>>   at
>>>>> org
>>>>> .eclipse
>>>>> .jdt
>>>>> .internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:
>>>>> 196)
>>>>>
>>>>> so far the only workaround we found is either not to use
>>>>> nillable="true" or not to use optional="true". you can guess that
>>>>> this
>>>>> is not what we wanted ;-)
>>>>>
>>>>> is there a chance to get a bugfix? doesn anyone know a better
>>>>> workaround?
>>>>>
>>>>> br,
>>>>> günther
>>>>>
>>>>>
>>>>>
>>>>>           
>>>> -------------------------------------------------------------------------
>>>> This SF.net email is sponsored by: Microsoft
>>>> Defy all challenges. Microsoft(R) Visual Studio 2008.
>>>> http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
>>>> _______________________________________________
>>>> jibx-users mailing list
>>>> jibx-users@lists.sourceforge.net
>>>> https://lists.sourceforge.net/lists/listinfo/jibx-users
>>>>
>>>>
>>>>         
>>>
>>>
>>>       
>> -------------------------------------------------------------------------
>> Check out the new SourceForge.net Marketplace.
>> It's the best place to buy or sell services for
>> just about anything Open Source.
>> http://ad.doubleclick.net/clk;164216239;13503038;w?http://sf.net/marketplace
>> _______________________________________________
>> jibx-users mailing list
>> jibx-users@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/jibx-users
>>
>>     
>
>
>
>   


-------------------------------------------------------------------------
Check out the new SourceForge.net Marketplace.
It's the best place to buy or sell services for
just about anything Open Source.
http://ad.doubleclick.net/clk;164216239;13503038;w?http://sf.net/marketplace
_______________________________________________
jibx-users mailing list
jibx-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jibx-users

Reply via email to