Provide more information about which field failed when unmarshalling
--------------------------------------------------------------------

                 Key: JIBX-204
                 URL: http://jira.codehaus.org/browse/JIBX-204
             Project: JiBX
          Issue Type: Improvement
          Components: core
    Affects Versions: JiBX 1.1.5
         Environment: All
            Reporter: Joshua Davies


When Jibx encounters a malformed element (for example, an invalid boolean or 
integer value), the caller is not provided with much information on which field 
was malformed.  Line & column numbers are supplied, but it's not always easy to 
match those up with the request text.  It would be easy if jibx could state 
which field it was parsing and what invalid value it encountered.

Here's a concrete example.  Suppose I have this simple binding:

<binding direction="input" track-source="true">
  <mapping name="target" class="Target">
    <value name="bool1" field="bool1" />
  </mapping>
</binding>

And I give it this invalid input:

<target>
  <bool1>abc</bool1>
</target>

The response I'm going to get back from the runtime will be:

Exception in thread "main" org.jibx.runtime.JiBXException: Invalid boolean 
value (line 3, col 2)
        at 
org.jibx.runtime.impl.UnmarshallingContext.convertBoolean(UnmarshallingContext.java:1847)
        at 
org.jibx.runtime.impl.UnmarshallingContext.parseElementBoolean(UnmarshallingContext.java:1904)
        at Target.JiBX_binding_unmarshal_1_0(Target.java)
        at JiBX_bindingTarget_access.unmarshal()
        at 
org.jibx.runtime.impl.UnmarshallingContext.unmarshalElement(UnmarshallingContext.java:2537)
        at 
org.jibx.runtime.impl.UnmarshallingContext.unmarshalDocument(UnmarshallingContext.java:2694)
        at Main.main(Main.java:17)

First of all - the line and column numbers don't match my sample document (I'm 
still researching to figure out exactly why).

However, even with correct line & column numbers, it would be helpful to see:

Exception in thread "main" org.jibx.runtime.JiBXException: Invalid boolean 
value 'abc' for field 'bool1' (line 2, col 3)

I've looked through the UnmarshallingContext source code, and it appears that 
it wouldn't be terribly difficult to add this information.  For example, the 
call stack for the boolean above is:

UnmarshallingContext.parseElementBoolean( String ns, String tag )
UnmarshallingContext.convertBoolean( String text )

convertBoolean throws an instance of JiBXException on a malformed value.

I propose creating a JiBXException subclass named JiBXParseException with three 
additional fields: m_namespace, m_tag, m_value.

Then convertBoolean (and convertFloat, convertShort, etc.) can set the m_value 
at constructor time.  Finally, parseElementBoolean (and parseElementFloat and 
attributeBoolean and attributeFloat, etc.) can catch the exception, add the 
namespace & tag information and rethrow it.

If everybody agrees that this is a worthwhile endeavor, I would be happy to 
prepare a patch and submit it.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: 
http://jira.codehaus.org/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

-------------------------------------------------------------------------
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-devs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/jibx-devs

Reply via email to