Inheritance plugin
Inheritance plugin
Makes schema-derived classes extend certain class or implement certain interfaces.
Activation
Use -Xinheritance argument to activate the plugin.
Usage
- Declare the http://jaxb2-commons.dev.java.net/basic/inheritance customization namespace.
- Use <inheritance:extends>com.acme.foo.MyClass</inheritance:extends> or <inheritance:implements>com.acme.foo.MyInterface</inheritance:implements> customization elements to specify which classes or interfaces should your schema-derived class extend or implement.
- Use <inheritance:objectFactory packageName="com.acme.foo"/> to customize the object factory class.
Works with class outlines, enum outlines, element and package outlines.
Example
<?xml version="1.0"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" xmlns:inheritance="http://jaxb2-commons.dev.java.net/basic/inheritance" jaxb:version="2.1" jaxb:extensionBindingPrefixes="inheritance"> <!-- ... --> <xs:annotation> <xs:appinfo> <jaxb:schemaBindings> <jaxb:package name="com.acme.foo" /> </jaxb:schemaBindings> <inheritance:objectFactory packageName="com.acme.foo"> <inheritance:implements>java.lang.Cloneable</inheritance:implements> </inheritance:objectFactory> </xs:appinfo> </xs:annotation> <!-- ... --> <xs:complexType name="WillBeMadeCloneableType"> <xs:annotation> <xs:appinfo> <inheritance:implements>java.lang.Cloneable</inheritance:implements> </xs:appinfo> </xs:annotation> <!-- ... --> </xs:complexType> <!-- ... --> </xs:schema>
<jaxb:bindings xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:inheritance="http://jaxb2-commons.dev.java.net/basic/inheritance" jaxb:extensionBindingPrefixes="inheritance" jaxb:version="2.1"> <jaxb:bindings schemaLocation="schema.xsd" node="/xsd:schema"> <jaxb:bindings node="xsd:simpleType[@name='issueJIIB38Type']"> <inheritance:implements>java.lang.Cloneable</inheritance:implements> </jaxb:bindings> <jaxb:bindings node="xsd:element[@name='issueJIIB38']"> <jaxb:class/> <inheritance:implements>java.lang.Cloneable</inheritance:implements> </jaxb:bindings> </jaxb:bindings> </jaxb:bindings>
Support for generics
Since 0.6.4 the plugin also supports generics.
Assume you have a generic interface:
public interface IssueJIIB48Interface<T> { public T getValue(); }
You can now use the following customization:
<xs:complexType name="issueJIIB48Type"> <xs:annotation> <xs:appinfo> <inheritance:implements>org.jvnet.jaxb2_commons.tests.issues.IssueJIIB48Interface<java.lang.String></inheritance:implements> </xs:appinfo> </xs:annotation> <xs:sequence> <xs:element name="value" type="xs:string"/> </xs:sequence> </xs:complexType>
You'll get the following code:
public class IssueJIIB48Type implements IssueJIIB48Interface<String> { @XmlElement(required = true) protected String value; public String getValue() { return value; } public void setValue(String value) { this.value = value; } // ... }
Parsing of the org.jvnet.jaxb2_commons.tests.issues.IssueJIIB48Interface<java.lang.String> declaration is performed via the excellent JavaParser library. |