Ah. There are actually two levels of validation being done. The first is
during the actual unmarshalling of the binding definition, where you're
missing a required element or have an unknown one present. Structural
errors of this type are handled by the basic unmarshalling code, which
doesn't have much in the way of hooks to support extracting information.
The validation that uses the ValidationContext is a much more detailed
check of the binding definition - but you never get to that point if you
have a structural error during unmarshalling.
I'll look into changing this in 1.1 so that you at least get the
position information for the error in some easy way. For right now the
best you can do is to parse it out of the JiBXException error message
(ugly, but shouldn't be too difficult). In 2.0 I'm hoping to use a more
flexible approach for unmarshalling which will allow continuing on after
an error.
- Dennis
Jérôme BERNARD wrote:
I'm getting more and more confused...
What I'm doing is calling the BindingElement.validateBinding() method
and do expect to have a JiBXException (I'm testing the case when there
is an error in the binding file). I'm doing this before running the
Compile task so that I can have precise reporting of where the binding
is wrong.
I do have a JiBXException thrown but the ValidationContext do not have
any problem!
So it's kind of like I'm being said "eh! there's an error, but I won't
tell you which one!" :-)
What is even "funnier" is that the ouput of the stacktrace give me a
nice error message and describes the location of the error. It sound
like if there is a JiBXException thrown somewhere, the
ValidationContext is not filled properly before throwing the exception
upper in the stack of code.
Here is a sample stack trace that will help you understand my problem
(I'm working with a binding file where there is a typo and the
attribute is spelled "valu" instead of "value"):
org.jibx.runtime.JiBXException : Expected "mapping" end tag, found
"valu" end tag (line 10, col 39, in
C:/jbernard/projects/test/test-jibx-plugin/src/main/resources/binding-Amazon.xml)
at org.jibx.runtime.impl.UnmarshallingContext.throwEndTagNameError
(Unknown Source)
at
org.jibx.runtime.impl.UnmarshallingContext.parsePastCurrentEndTag(Unknown
Source)
at
org.jibx.runtime.impl.UnmarshallingContext.parsePastEndTag(Unknown Source)
at org.jibx.binding.def.BindingBuilder.unmarshalMapping
(BindingBuilder.java:1565)
at
org.jibx.binding.def.BindingBuilder.unmarshalMappings(BindingBuilder.java:950)
at
org.jibx.binding.def.BindingBuilder.unmarshalBindingDefinition(BindingBuilder.java:1735)
at org.jibx.binding.Utility.loadBinding(Utility.java:308)
at org.jibx.binding.Utility.loadFileBinding(Utility.java:388)
at org.jibx.binding.Compile.compile(Compile.java:296)
at org.kalixia.intellij.jibx.BindingCompilerCompileTask$2.compute
(BindingCompilerCompileTask.java:154)
at
org.kalixia.intellij.jibx.BindingCompilerCompileTask$2.compute(BindingCompilerCompileTask.java:77)
at
com.intellij.openapi.application.impl.ApplicationImpl$7.run(ApplicationImpl.java
:1)
at
com.intellij.openapi.application.impl.ApplicationImpl.runReadAction(ApplicationImpl.java:343)
at
com.intellij.openapi.application.impl.ApplicationImpl.runReadAction(ApplicationImpl.java:348)
at
org.kalixia.intellij.jibx.BindingCompilerCompileTask.execute(BindingCompilerCompileTask.java:75)
at com.intellij.compiler.impl.CompileDriver.a(CompileDriver.java:763)
at com.intellij.compiler.impl.CompileDriver.a (CompileDriver.java:470)
at com.intellij.compiler.impl.CompileDriver.a(CompileDriver.java:307)
at
com.intellij.compiler.impl.CompileDriver.access$400(CompileDriver.java:427)
at com.intellij.compiler.impl.CompileDriver$4$1.run
(CompileDriver.java:5)
at
com.intellij.openapi.progress.impl.ProgressManagerImpl.runProcess(ProgressManagerImpl.java:49)
at
com.intellij.compiler.impl.CompileDriver$4.run(CompileDriver.java:1)
I need to extract the location of the error and hoped to find it in
the ValidationContext...
Regards,
Jérôme.
2005/12/9, Dennis Sosnoski <[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>>:
Jérôme BERNARD wrote:
>2005/11/26, Dennis Sosnoski <[EMAIL PROTECTED]
<mailto:[EMAIL PROTECTED]>>:
>
>[...]
>
>
>>The actual binding definition validation handling is built into the
>>org.jibx.binding.model.BindingElement class, in the
validateBinding()
>>method. This actually prints out the errors to System.out, but the
>>methods it uses are all public and could be used directly for other
>>types of reporting.
>>
>>
>
>I'm having problems trying to hook in
BindingElement.validateBinding().
>Basically the problem is BindingElement.validateBinding() calls
> BindingElement.readBinding() which throws JiBXException and do not
>"populate" the ValidationContext.
>
>Am I missing something obvious??
>
>
I suspect the part you're missing is that the binding model itself
uses
JiBX data binding, so the binding needs to be compiled whenever you
regenerate the binding model classes - but you can't run the binding
compiler normally without the binding model. There's a special command
line switch that makes the binding compiler skip the binding
validation
step, added to allow the binding model binding to be compiled. This is
the "-s" switch. You can look at the "compile-bind" target in the
main
JiBX build.xml (in the build directory) to see this in use.
This can be a nuisance when working with an IDE, since any time you
modify one of the binding model classes you need to recompile the
binding. I use a separate build-binding.xml Ant script to handle this
from within Eclipse; that way I can just right click on the
build-binding.xml file, select Run as/Ant task, and have the binding
compiled. I'll check this file in before I send this message (I'm
composing the message on a plane, so can't do either the check in
or the
send right now).
- Dennis
-------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc. Do you grep through
log files
for problems? Stop! Download the new AJAX search engine that makes
searching your log files as easy as surfing the web. DOWNLOAD
SPLUNK!
http://ads.osdn.com/?ad_idv37&alloc_id865&opclick
<http://ads.osdn.com/?ad_idv37&alloc_id%16865&opclick>
_______________________________________________
jibx-devs mailing list
[email protected]
<mailto:[email protected]>
https://lists.sourceforge.net/lists/listinfo/jibx-devs
-------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc. Do you grep through log files
for problems? Stop! Download the new AJAX search engine that makes
searching your log files as easy as surfing the web. DOWNLOAD SPLUNK!
http://ads.osdn.com/?ad_idv37&alloc_id865&op=click
_______________________________________________
jibx-devs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/jibx-devs