On Thu, Nov 01, 2018 at 02:22:26PM +0100, Emmanuel Bourg wrote: > On 01/11/2018 01:54, tony mancill wrote: > > > I am definitely open to (and appreciative of) your suggestions. > > Hi Tony, even if the jaxb package doesn't yet provide the xjc executable > (#905357), you can invoke it with: > > java -jar /usr/share/java/jaxb-xjc.jar
Hi Emmanuel, It doesn't seem to be quite that straight-forward. I've spend a fair amount of time trying to build up proper classpath, but actually trying to use XJC to compile anything fails with classloader exceptions. For example, I build up a command like the following: XJC="java -cp /usr/share/java/xml-resolver.jar:/usr/share/java/jaxb-api.jar:/usr/share/java/jaxb-core.jar:/usr/share/java/jaxb-impl.jar:/usr/share/java/jaxb-jxc.jar:/usr/share/java/jaxb-xjc.jar -jar /usr/share/java/jaxb-xjc.jar" And it dies with this exception stack, despite the xml-resolver being on the classpath: > parsing a schema... > Exception in thread "main" java.lang.AssertionError: > javax.xml.bind.JAXBException: Implementation of JAXB-API has not been found > on module path or classpath. > - with linked exception: > [java.lang.ClassNotFoundException: > com.sun.xml.internal.bind.v2.ContextFactory] > at > com.sun.tools.xjc.reader.xmlschema.bindinfo.BindInfo.getCustomizationContext(BindInfo.java:356) > at > com.sun.tools.xjc.reader.xmlschema.bindinfo.BindInfo.getCustomizationUnmarshaller(BindInfo.java:362) > at > com.sun.tools.xjc.reader.xmlschema.bindinfo.AnnotationParserFactoryImpl$1.<init>(AnnotationParserFactoryImpl.java:85) > at > com.sun.tools.xjc.reader.xmlschema.bindinfo.AnnotationParserFactoryImpl.create(AnnotationParserFactoryImpl.java:84) > at > com.sun.xml.xsom.impl.parser.NGCCRuntimeEx.createAnnotationParser(NGCCRuntimeEx.java:401) > at > com.sun.xml.xsom.impl.parser.state.annotation.action0(annotation.java:89) > at > com.sun.xml.xsom.impl.parser.state.annotation.enterElement(annotation.java:114) > at > com.sun.xml.xsom.impl.parser.state.NGCCRuntime.sendEnterElement(NGCCRuntime.java:422) > at > com.sun.xml.xsom.impl.parser.state.NGCCHandler.spawnChildFromEnterElement(NGCCHandler.java:114) > at > com.sun.xml.xsom.impl.parser.state.Schema.enterElement(Schema.java:317) > at > com.sun.xml.xsom.impl.parser.state.NGCCRuntime.sendEnterElement(NGCCRuntime.java:422) > at > com.sun.xml.xsom.impl.parser.state.NGCCHandler.revertToParentFromEnterElement(NGCCHandler.java:151) > at > com.sun.xml.xsom.impl.parser.state.foreignAttributes.enterElement(foreignAttributes.java:91) > at > com.sun.xml.xsom.impl.parser.state.NGCCRuntime.sendEnterElement(NGCCRuntime.java:422) > at > com.sun.xml.xsom.impl.parser.state.NGCCHandler.spawnChildFromEnterElement(NGCCHandler.java:114) > at > com.sun.xml.xsom.impl.parser.state.Schema.enterElement(Schema.java:229) > at > com.sun.xml.xsom.impl.parser.state.NGCCRuntime.sendEnterElement(NGCCRuntime.java:422) > at > com.sun.xml.xsom.impl.parser.state.Schema.enterElement(Schema.java:273) > at > com.sun.xml.xsom.impl.parser.state.NGCCRuntime.sendEnterElement(NGCCRuntime.java:422) > at > com.sun.xml.xsom.impl.parser.state.Schema.enterElement(Schema.java:309) > at > com.sun.xml.xsom.impl.parser.state.NGCCRuntime.sendEnterElement(NGCCRuntime.java:422) > at > com.sun.xml.xsom.impl.parser.state.Schema.enterElement(Schema.java:293) > at > com.sun.xml.xsom.impl.parser.state.NGCCRuntime.sendEnterElement(NGCCRuntime.java:422) > at > com.sun.xml.xsom.impl.parser.state.Schema.enterElement(Schema.java:221) > at > com.sun.xml.xsom.impl.parser.state.NGCCRuntime.sendEnterElement(NGCCRuntime.java:422) > at > com.sun.xml.xsom.impl.parser.state.Schema.enterElement(Schema.java:257) > at > com.sun.xml.xsom.impl.parser.state.NGCCRuntime.startElement(NGCCRuntime.java:263) > at > java.xml/org.xml.sax.helpers.XMLFilterImpl.startElement(XMLFilterImpl.java:551) > at > com.sun.tools.xjc.util.SubtreeCutter.startElement(SubtreeCutter.java:108) > at > com.sun.tools.xjc.reader.ExtensionBindingChecker.startElement(ExtensionBindingChecker.java:150) > at > java.xml/org.xml.sax.helpers.XMLFilterImpl.startElement(XMLFilterImpl.java:551) > at > com.sun.tools.xjc.reader.xmlschema.parser.IncorrectNamespaceURIChecker.startElement(IncorrectNamespaceURIChecker.java:128) > at > java.xml/org.xml.sax.helpers.XMLFilterImpl.startElement(XMLFilterImpl.java:551) > at > com.sun.tools.xjc.reader.xmlschema.parser.CustomizationContextChecker.startElement(CustomizationContextChecker.java:193) > at > java.xml/org.xml.sax.helpers.XMLFilterImpl.startElement(XMLFilterImpl.java:551) > at > com.sun.tools.xjc.ModelLoader$SpeculationChecker.startElement(ModelLoader.java:455) > at > java.xml/org.xml.sax.helpers.XMLFilterImpl.startElement(XMLFilterImpl.java:551) > at > com.sun.tools.xjc.reader.internalizer.VersionChecker.startElement(VersionChecker.java:103) > at > java.xml/org.xml.sax.helpers.XMLFilterImpl.startElement(XMLFilterImpl.java:551) > at > java.xml/com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:510) > at > java.xml/com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(XMLNSDocumentScannerImpl.java:374) > at > java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2708) > at > java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:605) > at > java.xml/com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:112) > at > java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:534) > at > java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:888) > at > java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:824) > at > java.xml/com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141) > at > java.xml/com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1216) > at > java.xml/com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:635) > at > java.xml/org.xml.sax.helpers.XMLFilterImpl.parse(XMLFilterImpl.java:357) > at com.sun.xml.xsom.parser.JAXPParser.parse(JAXPParser.java:100) > at com.sun.tools.xjc.ModelLoader$2.parse(ModelLoader.java:479) > at > com.sun.tools.xjc.ModelLoader$XMLSchemaParser.parse(ModelLoader.java:251) > at > com.sun.xml.xsom.impl.parser.NGCCRuntimeEx.parseEntity(NGCCRuntimeEx.java:381) > at > com.sun.xml.xsom.impl.parser.ParserContext.parse(ParserContext.java:128) > at com.sun.xml.xsom.parser.XSOMParser.parse(XSOMParser.java:171) > at > com.sun.tools.xjc.ModelLoader.createXSOMSpeculative(ModelLoader.java:496) > at com.sun.tools.xjc.ModelLoader.loadXMLSchema(ModelLoader.java:351) > at com.sun.tools.xjc.ModelLoader.load(ModelLoader.java:162) > at com.sun.tools.xjc.ModelLoader.load(ModelLoader.java:117) > at com.sun.tools.xjc.Driver.run(Driver.java:354) > at com.sun.tools.xjc.Driver.run(Driver.java:221) > at com.sun.tools.xjc.Driver._main(Driver.java:144) > at com.sun.tools.xjc.Driver.access$000(Driver.java:82) > at com.sun.tools.xjc.Driver$1.run(Driver.java:103) > Caused by: javax.xml.bind.JAXBException: Implementation of JAXB-API has not > been found on module path or classpath. > - with linked exception: > [java.lang.ClassNotFoundException: > com.sun.xml.internal.bind.v2.ContextFactory] > at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:278) > at javax.xml.bind.ContextFinder.find(ContextFinder.java:421) > at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:721) > at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:662) > at > com.sun.tools.xjc.reader.xmlschema.bindinfo.BindInfo.getCustomizationContext(BindInfo.java:336) > ... 65 more > Caused by: java.lang.ClassNotFoundException: > com.sun.xml.internal.bind.v2.ContextFactory > at > java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:583) > at > java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178) > at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521) > at > javax.xml.bind.ServiceLoaderUtil.nullSafeLoadClass(ServiceLoaderUtil.java:122) > at > javax.xml.bind.ServiceLoaderUtil.safeLoadClass(ServiceLoaderUtil.java:155) > at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:276) > ... 69 more > Exception in thread "main" java.lang.NoClassDefFoundError: > org/apache/xml/resolver/CatalogManager > at com.sun.tools.xjc.CatalogUtil.getCatalog(CatalogUtil.java:60) > at com.sun.tools.xjc.Options.addCatalog(Options.java:842) > at com.sun.tools.xjc.Options.parseArgument(Options.java:691) > at com.sun.tools.xjc.Driver$OptionsEx.parseArgument(Driver.java:532) > at com.sun.tools.xjc.Options.parseArguments(Options.java:857) > at com.sun.tools.xjc.Driver.run(Driver.java:261) > at com.sun.tools.xjc.Driver.run(Driver.java:221) > at com.sun.tools.xjc.Driver._main(Driver.java:144) > at com.sun.tools.xjc.Driver.access$000(Driver.java:82) > at com.sun.tools.xjc.Driver$1.run(Driver.java:103) > Caused by: java.lang.ClassNotFoundException: > org.apache.xml.resolver.CatalogManager > at > java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:583) > at > java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178) > at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521) > ... 10 more > :xjc FAILED > :xjc (Thread[Daemon worker,5,main]) completed. Took 1.19 secs. Can you help me understand why this patch (https://salsa.debian.org/java-team/jaxb/blob/master/debian/patches/04-xml-resolver-compatibility.patch) was necessary? Perhaps it's related to the failure I'm seeing? I've also started looking at updating jaxb 2.3.1, but it will take me a bit of time. Thank you, tony
signature.asc
Description: PGP signature