Marshalling throws null value exception when value not null
-----------------------------------------------------------
Key: JIBX-105
URL: http://jira.codehaus.org/browse/JIBX-105
Project: JiBX
Type: Bug
Components: core
Versions: JiBX 1.1, JiBX 1.0.1
Environment: blackdown-jdk-1.4.2.03
Reporter: Nathan Egge
Attachments: jibx-test.tar.gz
I have a project where I have a Survey object that contains a Set of Locale
objects. These are managed by hibernate and the collection is lazy loaded. I
have the following binding definition:
<binding>
<mapping name="survey" class="model.Survey">
<value name="name" field="name"/>
<collection name="locales" field="locales"
factory="model.Survey.hashSetFactory">
<structure name="locale" type="model.Locale" pre-get="debug">
<value name="language" field="language"/>
</structure>
</collection>
</mapping>
</binding>
I have a JUnit test that attempts to load the Survey object and serialize it
using JiBX. When it runs here is the output:
test-module:
[echo] Testing domain...
[mkdir] Created dir: /home/nathan/svn/jibx-test/build/test/data
[junit] DEBUG --- Locale.debug()V(27) | id=1
[junit] DEBUG --- Locale.debug()V(28) | language=en
[junit] DEBUG --- Locale.debug()V(29) | country=null
[junit] DEBUG --- Locale.debug()V(30) | variant=null
[junit] DEBUG --- Locale.debug()V(31) | description=English
[junit] Testsuite: test.JibxTest
[junit] Tests run: 1, Failures: 0, Errors: 0, Time elapsed: 0.531 sec
[junit] ------------- Standard Error -----------------
[junit] org.jibx.runtime.JiBXException: null value for element "language"
from object of type model.Locale$$EnhancerByCGLIB$$9405c66f
[junit] at
org.jibx.runtime.impl.MarshallingContext.element(ILjava/lang/String;Ljava/lang/String;)Lorg/jibx/runtime/impl/MarshallingContext;(Unknown
Source)
[junit] at
model.Locale.JiBX_binding_marshal_2_0(Lorg/jibx/runtime/impl/MarshallingContext;)V(Locale.java:???)
[junit] at
model.JiBX_MungeAdapter.JiBX_binding_marshal_1_0(Ljava/util/Set;Lorg/jibx/runtime/impl/MarshallingContext;)V(:???)
[junit] at
model.Survey.JiBX_binding_marshal_2_0(Lorg/jibx/runtime/impl/MarshallingContext;)V(Survey.java:???)
[junit] at
model.JiBX_bindingSurvey_access.marshal(Ljava/lang/Object;Lorg/jibx/runtime/IMarshallingContext;)V(:???)
[junit] at
model.Survey.marshal(Lorg/jibx/runtime/IMarshallingContext;)V(Survey.java:???)
[junit] at
org.jibx.runtime.impl.MarshallingContext.marshalRoot(Ljava/lang/Object;)V(Unknown
Source)
[junit] at
org.jibx.runtime.impl.MarshallingContext.marshalDocument(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Boolean;Ljava/io/OutputStream;)V(Unknown
Source)
[junit] at test.JibxTest.testJibx()V(JibxTest.java:27)
[junit] at
jrockit.reflect.NativeMethodInvoker.invoke0(Ljava/lang/Object;ILjava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;(Unknown
Source)
[junit] at
jrockit.reflect.NativeMethodInvoker.invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;(Unknown
Source)
[junit] at
jrockit.reflect.VirtualNativeMethodInvoker.invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;(Unknown
Source)
[junit] at
java.lang.reflect.Method.invoke(Ljava/lang/Object;[Ljava/lang/Object;I)Ljava/lang/Object;(Unknown
Source)
[junit] at junit.framework.TestCase.runTest()V(TestCase.java:154)
[junit] at junit.framework.TestCase.runBare()V(TestCase.java:127)
[junit] at junit.framework.TestResult$1.protect()V(TestResult.java:106)
[junit] at
junit.framework.TestResult.runProtected(Ljunit/framework/Test;Ljunit/framework/Protectable;)V(TestResult.java:124)
[junit] at
junit.framework.TestResult.run(Ljunit/framework/TestCase;)V(TestResult.java:109)
[junit] at
junit.framework.TestCase.run(Ljunit/framework/TestResult;)V(TestCase.java:118)
[junit] at
junit.framework.TestSuite.runTest(Ljunit/framework/Test;Ljunit/framework/TestResult;)V(TestSuite.java:208)
[junit] at
junit.framework.TestSuite.run(Ljunit/framework/TestResult;)V(TestSuite.java:203)
[junit] at
org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.run()V(JUnitTestRunner.java:289)
[junit] at
org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.launch(Lorg/apache/tools/ant/taskdefs/optional/junit/JUnitTest;ZZZZLjava/util/Properties;)I(JUnitTestRunner.java:656)
[junit] at
org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.main([Ljava/lang/String;)V(JUnitTestRunner.java:558)
[junit] ------------- ---------------- ---------------
I'm not sure what exactly is going on, but when i disassembled the modified
Locale.class using Jad v1.5.8e, this is what the
model.Locale.JiBX_binding_marshal_2_0 method looked like:
public final void JiBX_binding_marshal_2_0(MarshallingContext arg1)
throws JiBXException
{
debug();
arg1.pushObject(this);
arg1.element(0, "language", language);
arg1.popObject();
return;
}
Somehow its printing out the fields of the Locale object, and then trying to
add the language field to the MarshallingContext and it becomes null before the
call to element().
I have created a project that demonstrates this behavior. I will tar it up and
attach it.h
--
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 xPML, a groundbreaking scripting language
that extends applications into web and mobile media. Attend the live webcast
and join the prime developer group breaking into this new coding territory!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642
_______________________________________________
jibx-devs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/jibx-devs