users@jaxb.java.net

Re: Can I apply bindings to included schemas?

From: Peter <peter.follo+javadev_at_foi.se>
Date: Wed, 27 Jun 2012 16:22:44 +0200

Thanks for the tip Wolfgang! I've tried several variants in vail, this
is one of them:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns="http://www.citygml.org/citygml/profiles/base/1.0"
           xmlns:xs="http://www.w3.org/2001/XMLSchema"
           xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
           xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:annox="http://annox.dev.java.net"
           xsi:schemaLocation="http://java.sun.com/xml/ns/jaxb
http://java.sun.com/xml/ns/jaxb/bindingschema_2_0.xsd"
           jaxb:extensionBindingPrefixes="xjc annox"
           jaxb:version="2.1"
           elementFormDefault="qualified"
           attributeFormDefault="unqualified"
           targetNamespace="http://www.citygml.org/citygml/profiles/base/1.0">
   <xs:include
schemaLocation="http://schemas.opengis.net/citygml/profiles/base/1.0/CityGML.xsd"/>
   <xs:annotation>
     <xs:appinfo>
       <jaxb:globalBindings>
        <annox:annotate>
          <annox:annotate annox:class="java.lang.SuppressWarnings" value="unused"/>
        </annox:annotate>
       </jaxb:globalBindings>
     </xs:appinfo>
   </xs:annotation>
</xs:schema>

The output running xjc often looks somethning like this:
[ERROR] cvc-complex-type.2.4.a: Invalid content was found starting with
element 'annox:annotate'. One of
'{"http://java.sun.com/xml/ns/jaxb":javaType,
"http://java.sun.com/xml/ns/jaxb":serializable,
"http://java.sun.com/xml/ns/jaxb/xjc":serializable,
"http://java.sun.com/xml/ns/jaxb/xjc":superClass,
"http://java.sun.com/xml/ns/jaxb/xjc":superInterface,
"http://java.sun.com/xml/ns/jaxb/xjc":typeSubstitution,
"http://java.sun.com/xml/ns/jaxb/xjc":smartWildcardDefaultBinding,
"http://java.sun.com/xml/ns/jaxb/xjc":simple,
"http://java.sun.com/xml/ns/jaxb/xjc":treatRestrictionLikeNewType,
"http://java.sun.com/xml/ns/jaxb/xjc":javaType,
"http://java.sun.com/xml/ns/jaxb/xjc":generateElementProperty,
"http://java.sun.com/xml/ns/jaxb/xjc":noMarshaller,
"http://java.sun.com/xml/ns/jaxb/xjc":noUnmarshaller,
"http://java.sun.com/xml/ns/jaxb/xjc":noValidator,
"http://java.sun.com/xml/ns/jaxb/xjc":noValidatingUnmarshaller}' is
expected.
   line 18 of file:/home/follo/CityGML-jaxb/myCityGML-schema.xsd

Which makes sense I guess.

I have also tried using component designators. This went without errors
but also without wanted annotations. :-P


PS
I didn't find any doc about globalBindings being recursive in inline
declarations. Maybe I'm missing some essential piece of documentation,
can you point me to where you found it? I did find doc about
restrictions in external bindings that may imply that it is not
recursive in that case though.
DS


On 06/27/2012 01:57 PM, Wolfgang Laun wrote:
> The inline binding element<globalBindings> is documented as acting
> recursively into included and imported schemas.
>
> If you don't want to modify your top level XML schema, write another
> one<include>ing that one.
>
> Untried.
> -W
>
> On 27/06/2012, peter.follo+javadev_at_foi.se<peter.follo+javadev_at_foi.se> wrote:
>> If one wants to annotate every 'complexType' in the generated code with
>> say a 'SuppressWarnings' annotation one could use a binding file
>> looking something like this:
>>
>> <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
>> <jaxb:bindings
>> xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
>> xmlns:xs="http://www.w3.org/2001/XMLSchema"
>> xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>> xmlns:annox="http://annox.dev.java.net"
>> xsi:schemaLocation="http://java.sun.com/xml/ns/jaxb
>> http://java.sun.com/xml/ns/jaxb/bindingschema_2_0.xsd"
>> jaxb:extensionBindingPrefixes="xjc annox"
>> version="2.1">
>>
>> <jaxb:bindings
>> schemaLocation="http://schemas.opengis.net/gml/3.1.1/base/gmlBase.xsd"
>> node="/xs:schema">
>> <jaxb:bindings node="xs:complexType" multiple="true"
>> required="false">
>> <annox:annotate>
>> <annox:annotate annox:class="java.lang.SuppressWarnings"
>> value="unused"/>
>> </annox:annotate>
>> </jaxb:bindings>
>> </jaxb:bindings>
>>
>> </jaxb:bindings>
>>
>> And it works all fine :-)
>>
>> However, if the schema imports other schemas, such as
>> http://schemas.opengis.net/citygml/profiles/base/1.0/CityGML.xsd do,
>> this binding rule won't traverse recursively to the imported schemas.
>> Is there a way to make this rule traverse imported schemas? Can I use
>> some sort of global binding instead? Can I use some kind of wildcard as
>> a value to schemaLocation? Ideas anyone?
>>