Okay, I'm able to parse successfully the exception and extract the location of the error.

In order to test, can you give me an exemple of an error which would fail only on the second validation check (the one with the ValidationContext), so that my code would be able to deal with errors in both validation levels.

Regards,
Jérôme.

2005/12/13, Dennis Sosnoski <[EMAIL PROTECTED]>:
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&opclick
_______________________________________________
jibx-devs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/jibx-devs

Reply via email to