Skip to content

JAXB2 Wildcard Plugin

Vojtěch Frič edited this page May 27, 2019 · 2 revisions

Wildcard plugin allows you to specify wildcard mode for the wildcard property.

Consider the following schema fragment:

<xs:complexType name="issueJIIB10Type" mixed="true">
    <xs:complexContent mixed="true">
        <xs:extension base="xs:anyType"/>
    </xs:complexContent>
</xs:complexType>

By default, XJC will generate the following "catch-all" property:

@XmlAnyElement(lax = true)
protected List<Object> content;
 
public List<Object> getContent() {
    if (content == null) {
        content = new ArrayList<Object>();
    }
    return this.content;
}

This property corresponds to the SKIP wildcard mode (strings or DOM elements only). There's also STRICT (JAXB elements only) and LAX modes (if given element is known in current JAXB context the JAXB element, otherwise DOM element). Wildcard plugin allows you to specify the desired wildcard mode - possibly overriding schema-driven defaults.

For instance, if you want this property to be generated in the LAX style, add the following customization:

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
    xmlns:wildcard="http://jaxb2-commons.dev.java.net/basic/wildcard"
    jaxb:version="2.1"
    jaxb:extensionBindingPrefixes="wildcard">
 
...
 
    <xs:complexType name="issueJIIB10Type" mixed="true">
        <xs:annotation>
            <xs:appinfo>
                <wildcard:lax/>
            </xs:appinfo>
        </xs:annotation>
        <xs:complexContent mixed="true">
            <xs:extension base="xs:anyType"/>
        </xs:complexContent>
    </xs:complexType>
 
...
 
</xs:schema>

This will change the content property:

@XmlAnyElement(lax = true)
protected List<Object> content;

Accordingly, other customization elements you can use are wildcard:strict and wildcard:skip.

Since 0.6.4 you can apply this customization globally to all schemas:

<jaxb:bindings
    xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:wildcard="http://jaxb2-commons.dev.java.net/basic/wildcard"
    jaxb:extensionBindingPrefixes="wildcard"
 
    jaxb:version="2.1">
 
    <jaxb:bindings schemaLocation="schema.xsd" node="/xsd:schema">
        <wildcard:lax/>
    </jaxb:bindings>
</jaxb:bindings>