Updating this post with my latest examples based on responses below.
I am attempting to use MOXY to create a DynamicJAXBContext using a simple schema which uses GML 2.1.2 schemas (which imports xlink). It appears that moxy is having issues importing GML schemas (or the xlink schema imported by GML). I have tried supplying a jaxb bindings file to DynamicJAXBContextFactory but this isn't working.
I am using eclipselink 2.4.2 (2/20 nightly) and jaxb-xjc 2.1.12. The exception being generated is as follows:
Exception [EclipseLink-0] (Eclipse Persistence Services - 2.4.2.v20130220-bf58d47): org.eclipse.persistence.exceptions.IntegrityException Descriptor
Exceptions:
Exception [EclipseLink-217] (Eclipse Persistence Services - 2.4.2.v20130220-bf58d47): org.eclipse.persistence.exceptions.DescriptorException Exception Description: Invalid XPath for XMLDirectMapping/XMLCompositeDirectCollectionMapping. XPath must either contain an @ symbol for attributes or end in /text() for text nodes. For example: "@name" or "name/text()" Mapping: org.eclipse.persistence.oxm.mappings.XMLDirectMapping[title-->ns2:title] Descriptor: XMLDescriptor(org.w3._1999.xlink.Extended --> [])
Exception [EclipseLink-217] (Eclipse Persistence Services - 2.4.2.v20130220-bf58d47): org.eclipse.persistence.exceptions.DescriptorException Exception Description: Invalid XPath for XMLDirectMapping/XMLCompositeDirectCollectionMapping. XPath must either contain an @ symbol for attributes or end in /text() for text nodes. For example: "@name" or "name/text()" Mapping: org.eclipse.persistence.oxm.mappings.XMLDirectMapping[xlinkTitle1-->ns2:title] Descriptor: XMLDescriptor(org.w3._1999.xlink.LocatorType --> [DatabaseTable(ns2:locator)])
Exception [EclipseLink-217] (Eclipse Persistence Services - 2.4.2.v20130220-bf58d47): org.eclipse.persistence.exceptions.DescriptorException Exception Description: Invalid XPath for XMLDirectMapping/XMLCompositeDirectCollectionMapping. XPath must either contain an @ symbol for attributes or end in /text() for text nodes. For example: "@name" or "name/text()" Mapping: org.eclipse.persistence.oxm.mappings.XMLDirectMapping[xlinkTitle2-->ns2:title] Descriptor: XMLDescriptor(org.w3._1999.xlink.ArcType --> [DatabaseTable(ns2:arc)])
Runtime Exceptions:
at org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.initializeDescriptors(DatabaseSessionImpl.java:638) at org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.initializeDescriptors(DatabaseSessionImpl.java:574) at org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.initializeDescriptors(DatabaseSessionImpl.java:533) at org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.postConnectDatasource(DatabaseSessionImpl.java:777) at org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.login(DatabaseSessionImpl.java:735) at org.eclipse.persistence.oxm.XMLContext$XMLContextState.(XMLContext.java:940) at org.eclipse.persistence.oxm.XMLContext$XMLContextState.(XMLContext.java:915) at org.eclipse.persistence.oxm.XMLContext.(XMLContext.java:194) at org.eclipse.persistence.jaxb.dynamic.DynamicJAXBContext$SchemaContextInput.createContextState(DynamicJAXBContext.java:332) at org.eclipse.persistence.jaxb.JAXBContext.(JAXBContext.java:169) at org.eclipse.persistence.jaxb.dynamic.DynamicJAXBContext.(DynamicJAXBContext.java:70) at org.eclipse.persistence.jaxb.dynamic.DynamicJAXBContextFactory.createContextFromXSD(DynamicJAXBContextFactory.java:309) at ogc.catalog.moxy.TestMoxy.testMoxy(TestMoxy.java:45)
Here is my test moxy class:
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
import javax.xml.bind.JAXBException;
import javax.xml.transform.Source;
import javax.xml.transform.stream.StreamSource;
import org.eclipse.persistence.jaxb.dynamic.DynamicJAXBContext;
import org.eclipse.persistence.jaxb.dynamic.DynamicJAXBContextFactory;
import org.junit.Test;
public class TestMoxy {
private static final String SCHEMA = "example-feature.xsd";
@Test
public void testMoxy() throws JAXBException {
System.setProperty("javax.xml.bind.context.factory",
"org.eclipse.persistence.jaxb.DynamicJAXBContextFactory");
System.setProperty("com.sun.tools.xjc.api.impl.s2j.SchemaCompilerImpl.noCorrectnessCheck",
"true");
InputStream schema = this.getClass().getClassLoader().getResourceAsStream(SCHEMA);
Source schemaSource = new StreamSource(schema);
schemaSource.setSystemId(SCHEMA);
InputStream xjbStream = this.getClass().getClassLoader()
.getResourceAsStream("xlink-bindings.xjb");
Source xjbSource = new StreamSource(xjbStream);
xjbSource.setSystemId(SCHEMA);
Map<String, Object> props = new HashMap<String, Object>();
props.put(DynamicJAXBContextFactory.EXTERNAL_BINDINGS_KEY, xjbSource);
try {
DynamicJAXBContext jaxbContext = DynamicJAXBContextFactory.createContextFromXSD(
schemaSource, null, null, props);
} catch (Exception e) {
e.printStackTrace();
}
}
}
Here is example-feature.xsd:
<?xml version='1.0' encoding='UTF-8'?>
<xsd:schema elementFormDefault='qualified' targetNamespace='http://example.org'
xmlns:example='http://example.org'
xmlns:xsd='http://www.w3.org/2001/XMLSchema'
xmlns:gml='http://www.opengis.net/gml'>
<xsd:import namespace='http://www.opengis.net/gml' schemaLocation="http://schemas.opengis.net/gml/2.1.2/feature.xsd"/>
<xsd:complexType name='example_featureType'>
<xsd:complexContent>
<xsd:extension base='gml:AbstractFeatureType'>
<xsd:sequence>
<xsd:element maxOccurs='1' minOccurs='1' name='id' nillable='false' type='xsd:long'/>
<xsd:element maxOccurs='1' minOccurs='1' name='version' nillable='false' type='xsd:long'/>
<xsd:element maxOccurs='1' minOccurs='0' name='access_date' nillable='true' type='xsd:dateTime'/>
<xsd:element maxOccurs='1' minOccurs='0' name='ground_geom' nillable='true' type='gml:PolygonPropertyType'/>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:element name='exampleFeature' substitutionGroup='gml:_Feature' type='example:example_featureType'/>
</xsd:schema>
And xlink-bindings.xjb:
<jaxb:bindings version="1.0" 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" jaxb:extensionBindingPrefixes="xjc">
<jaxb:bindings schemaLocation="http://www.w3.org/1999/xlink.xsd">
<jaxb:bindings node="//xs:attributeGroup[@name='locatorAttrs']//xs:attribute[@ref='xlink:title']">
<jaxb:property name="xlink:title1" />
</jaxb:bindings>
<jaxb:bindings node="//xs:attributeGroup[@name='arcAttrs']//xs:attribute[@ref='xlink:title']">
<jaxb:property name="xlink:title2" />
</jaxb:bindings>
</jaxb:bindings>
<jaxb:bindings schemaLocation="http://schemas.opengis.net/gml/2.1.2/feature.xsd"
node="/xs:schema">
<jaxb:globalBindings fixedAttributeAsConstantProperty="false"
typesafeEnumBase="xs:string" typesafeEnumMemberName="generateName" generateIsSetMethod="true"
generateMixedExtensions="true">
<xjc:noValidator />
<xjc:noValidatingUnmarshaller />
</jaxb:globalBindings>
<jaxb:schemaBindings>
<jaxb:package name="ogc.schema.opengis.gml.v_2_1_2" />
<jaxb:nameXmlTransform>
<jaxb:elementName suffix="Element" />
</jaxb:nameXmlTransform>
</jaxb:schemaBindings>
<jaxb:bindings node="xs:element[@name='_geometryProperty']">
<jaxb:class name="AbstractGeometryProperty" />
</jaxb:bindings>
</jaxb:bindings>
</jaxb:bindings>
Note xjc is working for me: xjc -extension example-feature.xsd -b xlink-bindings.xjb
xjc version "JAXB 2.1.10 in JDK 6" *java version "1.6.0_38"*