Re: Unmarshal Settings from xml file

184 views
Skip to first unread message

Lukas Eder

unread,
Dec 13, 2012, 3:23:45 AM12/13/12
to Sean Qiu, jooq...@googlegroups.com
Hello Sean,

I'm CC'ing this message to the user group, as I think it may be of
interest to a larger audience.
So far, I hadn't validated jOOQ's code generation / runtime
configuration against the XSD specification that I have published.
You're probably right, elementFormDefault="qualified" should be
specified as such. I have registered #2008 for this:
https://github.com/jOOQ/jOOQ/issues/2008

Cheers
Lukas

2012/12/13 Sean Qiu <xiang...@gmail.com>:
> Hello Lukas,
>
> I've been using JOOQ with one of our projects. Everything has been working great and I like it a lot.
> There is one issue I did ran into to lately which is about loading schema mapping configuration from the xml file into a Settings object.
>
> When I follow the xml example you have in the manual and validate against "http://www.jooq.org/xsd/jooq-runtime-2.5.0.xsd", it fails.
>
> Here the xml contents I got:
>
> <settings xmlns="http://www.jooq.org/xsd/jooq-runtime-2.5.0.xsd">
> <renderMapping>
> <schemata>
> <schema>
> <input>dev</input>
> <output>my_schema</output>
> <tables>
> <table>
> <input>table</input>
> <output>my_table</output>
> </table>
> </tables>
> </schema>
> </schemata>
> </renderMapping>
> </settings>
>
> The error message is:Error - Line 2, 17: org.xml.sax.SAXParseException; lineNumber: 2; columnNumber: 17; cvc-complex-type.2.4.a: Invalid content was found starting with element 'renderMapping'. One of '{renderSchema, renderMapping, renderNameStyle, renderKeywordStyle, renderFormatted, statementType, executeLogging, executeListeners, executeWithOptimisticLocking, attachRecords}' is expected.
>
> If I add elementFormDefault="qualified" in the xsd file you provide, the validation will succeed.
>
> I got the same error either when doing the validation on
> http://www.utilities-online.info/xsdvalidation/#.UMlnoKWVtAS
> or when I am unmarshaling the settings in Java and with JAXB debug mode turned on.
>
> So my question is has anyone else ran into the same issue as I did, and if it is possible to add the elementFormDefault="qualified" option into the xsd file.
>
> Thanks,
> Sean
>
>

Lukas Eder

unread,
Dec 14, 2012, 7:56:20 AM12/14/12
to Sean Qiu, jooq...@googlegroups.com
Hello Sean,

This is fixed on GitHub master and will be included in jOOQ 3.0

Cheers
Lukas

2012/12/13 Lukas Eder <lukas...@gmail.com>:

Sean Qiu

unread,
Dec 18, 2012, 12:07:50 AM12/18/12
to Lukas Eder, jooq...@googlegroups.com
Lukas,

Thanks for taking some actions on the issue I reported. I really appreciate that. 

When I was testing with unmarshaling the settings xml file with JAXB with the following piece of code:

JAXBContext jc;

Unmarshaller u;

Settings s;

try {

jc = JAXBContext.newInstance( "org.jooq.conf");

u = jc.createUnmarshaller();

u.setEventHandler(new javax.xml.bind.helpers.DefaultValidationEventHandler());

JAXBElement<Settings> j = (JAXBElement<Settings>) u.unmarshal( new File( "./jooq-runtime.xml" ) ); // ok

s = j.getValue();

} catch (JAXBException e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

}


I gets some similar validation error from the DefaultValidationEventHandler. It seems JAXB is does the validation by inspecting the Settings class instead of reaching out to find the actual .xsd file. This might be the reason why unmarshaling returns a incomplete Setting object(packed with default values). 


As you may have already been aware, the Settings class probably also needs to by fixed in some way so that the unmarshaling can work correctly. Let me know if I am understanding anything wrong here.


Also, I am kind new to GitHub, is there a way I can pack and use the current master copy before JOOQ 3.0 actually got released.


Thanks,

Sean

--
Sean

Lukas Eder

unread,
Dec 18, 2012, 3:35:38 AM12/18/12
to jooq...@googlegroups.com, Sean Qiu
Hello Sean, (sorry for the double E-Mail)

> I gets some similar validation error from the DefaultValidationEventHandler.
> It seems JAXB is does the validation by inspecting the Settings class
> instead of reaching out to find the actual .xsd file. This might be the
> reason why unmarshaling returns a incomplete Setting object(packed with
> default values).

Did you re-generate the code in org.jooq.conf? Specifically, the
package-info.java should now read:

@javax.xml.bind.annotation.XmlSchema(namespace =
"http://www.jooq.org/xsd/jooq-runtime-3.0.0.xsd", elementFormDefault =
javax.xml.bind.annotation.XmlNsForm.QUALIFIED)
package org.jooq.conf;

As you can see, the elementFormDefault has found its way into the annotations

> As you may have already been aware, the Settings class probably also needs
> to by fixed in some way so that the unmarshaling can work correctly. Let me
> know if I am understanding anything wrong here.

Your code example seems to have worked for me. What's the error you're getting?

> Also, I am kind new to GitHub, is there a way I can pack and use the current
> master copy before JOOQ 3.0 actually got released.

You should install Maven and build all the jooq deliverables. Another
option is to wait for me to publish a SNAPSHOT on the Sonatype
repositories. I do so infrequently (around once a week...). The
snapshot repositories are located here:
https://oss.sonatype.org/content/repositories/snapshots/org/jooq/

Cheers
Lukas

2012/12/18 Sean Qiu <xiang...@gmail.com>:

Sean Qiu

unread,
Dec 18, 2012, 3:10:28 PM12/18/12
to Lukas Eder, jooq...@googlegroups.com
Lukas,

Looks like you got it all taken care of in the annotations as well. That should take care of all the problems I had. Seems version 3.0 has quite a bit of changes. So I think i am gonna stick with 2.x version with a walk-around on the Settings part for now.

Great work!

Thanks,
Sean
--
Sean

Lukas Eder

unread,
Dec 19, 2012, 2:12:36 AM12/19/12
to Sean Qiu, jooq...@googlegroups.com
Hello Sean,

> Seems version 3.0 has quite a
> bit of changes. So I think i am gonna stick with 2.x version with a
> walk-around on the Settings part for now.

Yes, unless you want to pre-alpha test 3.0, you should better stick
with a 2.x stable version. Note that some backwards-compatible feature
increments will be merged downstream to a version 2.7. The XSD might
be one of them.

Cheers
Lukas
Reply all
Reply to author
Forward
0 new messages