xjb binding file and catalog file
I have two schemas that exist in separate projects.
I utilize a catalog file to correctly take the namespace of a schema and refer to the specific location of the other schema. Long term the externalized schema will exist in a jar file.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE catalog PUBLIC "-//OASIS/DTD Entity Resolution XML Catalog V1.0//EN" "http://www.oasis-open.org/committees/entity/release/1.0/catalog.dtd">
<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog" prefer="public">
<public publicId="http://foo.com/common/model/contactpoint" uri="file:/C:/Development/workspace/foo-model-member/src/main/sample/contactpoint.xsd"/>
</catalog>
The problem is that the xjb file does not appear to use the same catalog file for resolving the schemaLocation attribute. Is there a way to apply the catalog to the schemaLocation attribute of the binding element? In the xjc command, I supply a catalog file and it correctly integrates this into the build process.
<jxb:bindings version="1.0" xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
>
<jxb:globalBindings
fixedAttributeAsConstantProperty="true" collectionType="java.util.ArrayList"
typesafeEnumBase="xs:NCName" choiceContentProperty="false"
typesafeEnumMemberName="generateError" enableFailFastCheck="false"
generateIsSetMethod="false" underscoreBinding="asCharInWord" />
<jxb:bindings schemaLocation="../xsd/member.xsd" node="/xs:schema">
<!--jxb:globalBindings>
<jxb:serializable/>
<jxb:javaType name="java.util.Calendar" xmlType="xs:date"
parseMethod="javax.xml.bind.DatatypeConverter.parseDate"
printMethod="javax.xml.bind.DatatypeConverter.printDate" />
</jxb:globalBindings-->
<jxb:schemaBindings>
<jxb:package name="com.foo.model.member">
<jxb:javadoc>
<![CDATA[<body>Package level documentation.</body>]]>
</jxb:javadoc>
</jxb:package>
</jxb:schemaBindings>
</jxb:bindings>
<jxb:bindings schemaLocation="http://foo.com/common/model/contactpoint"
node="/xs:schema/xs:complexType[@name='Address']">
<jxb:class ref="com.foo.commons.model.contactpoint.Address"/>
</jxb:bindings>
<jxb:bindings schemaLocation="http://foo.com/common/model/contactpoint"
node="/xs:schema/xs:complexType[@name='Email']">
<jxb:class ref="com.foo.commons.model.contactpoint.Email"/>
</jxb:bindings>
<jxb:bindings schemaLocation="http://foo.com/common/model/contactpoint"
node="/xs:schema/xs:complexType[@name='Phone']">
<jxb:class ref="com.foo.commons.model.contactpoint.Phone"/>
</jxb:bindings>
<jxb:bindings schemaLocation="http://foo.com/common/model/contactpoint"
node="/xs:schema/xs:complexType[@name='ContactPoint']">
<jxb:class ref="com.foo.commons.model.contactpoint.ContactPoint"/>
</jxb:bindings>
</jxb:bindings>
But it throughs exceptions on the jxb:bindings schemaLocation:
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Building Model
[INFO] task-segment: [generate-sources]
[INFO] ------------------------------------------------------------------------
[INFO] [jaxb2:xjc {execution: default}]
[INFO] Generating source...
[INFO] parsing a schema...
[ERROR] file:/C:/Development/workspace/model-member/src/main/xjb/member.xjb[28,57]
com.sun.istack.SAXParseException2: "http://foo.com/common/model/contactpoint" is not a part of this compilation. Is this a mistake for "file:/C:/Development/workspace/model-member/src/main/xjb/member.xjb"?
at com.sun.tools.xjc.reader.internalizer.Internalizer.reportError(Internalizer.java:501)
at com.sun.tools.xjc.reader.internalizer.Internalizer.reportError(Internalizer.java:495)
at com.sun.tools.xjc.reader.internalizer.Internalizer.buildTargetNodeMap(Internalizer.java:205)
at com.sun.tools.xjc.reader.internalizer.Internalizer.buildTargetNodeMap(Internalizer.java:289)
at com.sun.tools.xjc.reader.internalizer.Internalizer.transform(Internalizer.java:134)
at com.sun.tools.xjc.reader.internalizer.Internalizer.transform(Internalizer.java:96)
at com.sun.tools.xjc.reader.internalizer.DOMForest.transform(DOMForest.java:448)
at com.sun.tools.xjc.ModelLoader.buildDOMForest(ModelLoader.java:342)
at com.sun.tools.xjc.ModelLoader.loadXMLSchema(ModelLoader.java:374)
at com.sun.tools.xjc.ModelLoader.load(ModelLoader.java:167)
at com.sun.tools.xjc.ModelLoader.load(ModelLoader.java:113)
at com.sun.tools.xjc.Driver.run(Driver.java:313)
at org.codehaus.mojo.jaxb2.AbstractXjcMojo.execute(AbstractXjcMojo.java:297)
at org.apache.maven.plugin.DefaultPluginManager.executeMojo(DefaultPluginManager.java:490)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:694)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalWithLifecycle(DefaultLifecycleExecutor.java:556)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal(DefaultLifecycleExecutor.java:535)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalAndHandleFailures(DefaultLifecycleExecutor.java:387)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeTaskSegments(DefaultLifecycleExecutor.java:348)
at org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLifecycleExecutor.java:180)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:328)
at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:138)
at org.apache.maven.cli.MavenCli.main(MavenCli.java:362)
at org.apache.maven.cli.compat.CompatibleMain.main(CompatibleMain.java:60)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.codehaus.classworlds.Launcher.launchEnhanced(Launcher.java:315)
at org.codehaus.classworlds.Launcher.launch(Launcher.java:255)
at org.codehaus.classworlds.Launcher.mainWithExitCode(Launcher.java:430)
at org.codehaus.classworlds.Launcher.main(Launcher.java:375)
Thanks,
Jay