Hi, Yes, 90% of the use cases don’t need java.xml in lib/endorsed.
Regards JB > Le 3 mars 2021 à 08:42, brock samson <brock.sams...@hotmail.com> a écrit : > > Hi JB > > I know you are quite busy so no need to apologize. > > Just to make sure I understood you correctly, the > org.apache.karaf.specs.java.xml-4.2.10.jar can be permanently removed from > the /endorsed dir without any negative side effects, right? > > From: Jean-Baptiste Onofre <j...@nanthrax.net> > Sent: Wednesday, March 3, 2021 12:14 AM > To: user <user@karaf.apache.org> > Subject: Re: Karaf 4.2.10 - NullPointerException during xml parsing > > Hi Brock, > > Sorry for the very late answer. > > The reason why javax.xml is in lib/endorsed folder is because core Karaf > loads just the spec and let you install the impl. > Anyway, you can remove it from endorsed and install bundles, it works as well. > It’s basically what we plan to do by default as part of KARAF-6703. > > Regards > JB > >> Le 3 mars 2021 à 05:50, brock samson <brock.sams...@hotmail.com >> <mailto:brock.sams...@hotmail.com>> a écrit : >> >> Hi João >> >> Thank you for looking into this issue. Its nice to know it no longer appears >> in karaf 4.3, but is there another way to resolve this in 4.2.10 without >> changing the code? More specifically, is there a reason why >> org.apache.karaf.specs.java.xml-4.2.10.jar resides in the /endorsed >> directory as opposed to being exposed by a bundle? The reason for me asking >> is because the bundle approach would allow me to choose which implementation >> my bundle would reference, while the current endorsed approach leaves me no >> choice. >> >> Regards, >> >> Brock >> >> >> From: João Assunção <joao.assun...@exploitsys.com >> <mailto:joao.assun...@exploitsys.com>> >> Sent: Tuesday, March 2, 2021 5:28 PM >> To: user@karaf.apache.org <mailto:user@karaf.apache.org> >> <user@karaf.apache.org <mailto:user@karaf.apache.org>> >> Subject: Re: Karaf 4.2.10 - NullPointerException during xml parsing >> >> Hi Brock, >> >> I tried your jar but it failed due to the layout of the jar (the MANIFEST >> was not the first entry in the jar or something like that). I created a >> bundle with our code and when I tried with karaf 4.3 it passed. >> I then tried with 4.2.7 and I experienced the same NPE. Apparently the >> behavior when the errorHandler is set to null is different between >> implementations of the XML libs supplied in these two versions of karaf. >> In your code setting the error handler to builder.setErrorHandler(new >> org.xml.sax.helpers.DefaultHandler()); seems to do the trick. >> >> I noticed your manifest is importing a bunch of packages not required for >> the code in question. >> >> Regards >> João Assunção >> >> Email: joao.assun...@exploitsys.com <mailto:joao.assun...@exploitsys.com> >> Mobile: +351 916968984 >> Phone: +351 211933149 >> Web: www.exploitsys.com <http://www.exploitsys.com/> >> >> >> >> >> On Tue, Mar 2, 2021 at 3:33 AM brock samson <brock.sams...@hotmail.com >> <mailto:brock.sams...@hotmail.com>> wrote: >> hi, JB. did you get a chance to run my bundle? >> >> >> From: brock samson <brock.sams...@hotmail.com >> <mailto:brock.sams...@hotmail.com>> >> Sent: Wednesday, February 24, 2021, 11:18 PM >> To: user@karaf.apache.org <mailto:user@karaf.apache.org> >> Subject: Re: Karaf 4.2.10 - NullPointerException during xml parsing >> >> hi, JB. >> >> thank you for looking at this. The attached zip (rename its extension from >> .txt to .zip) contains both the bundle (rename its extension from .txt to >> .jar) and its feature file. the bundle should be placed in the /bundles dir, >> and you know what to do with the feature file =) >> here are some points regarding the bundle: >> 1) the bundle executes automatically during Karaf startup to make it easier >> for you. >> 2) The bundle contains both the schema and the xml, so you dont have to >> really do anything to the bundle itself in order for it to just run >> 3) The bundle contains props.properties where you can specify external >> locations to both schema and xml file if you choose to do so for any reason. >> The provided files will be ignored in such case. >> 4) I have also provided the source .java alongside the binary just in case. >> >> again, really appreciate you taking the time to look at it. thanks!!! >> >> Brock Samson >> >> >> From: Jean-Baptiste Onofre <j...@nanthrax.net <mailto:j...@nanthrax.net>> >> Sent: Tuesday, February 23, 2021 11:56 AM >> To: user@karaf.apache.org <mailto:user@karaf.apache.org> >> <user@karaf.apache.org <mailto:user@karaf.apache.org>> >> Subject: Re: Karaf 4.2.10 - NullPointerException during xml parsing >> >> Hi Brock, >> >> Maybe you have xerces installed as bundle in your distribution ? >> >> It sounds like a version mismatch. >> >> Can you share the bundles installed ? >> >> Thanks, >> Regards >> JB >> >>> Le 23 févr. 2021 à 16:55, brock samson <brock.sams...@hotmail.com >>> <mailto:brock.sams...@hotmail.com>> a écrit : >>> >>> Hello, >>> >>> I am using Karaf 4.2.10 and attempting to perform a rather simple xml >>> parsing: >>> >>> Caused by: java.lang.NullPointerException >>> at org.apache.xerces.util.ErrorHandlerProxy.error(Unknown >>> Source) ~[!/:?] >>> at >>> com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(ErrorHandlerWrapper.java:137) >>> ~[?:1.8.0_102] >>> at >>> com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:396) >>> ~[?:1.8.0_102] >>> at >>> com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:327) >>> ~[?:1.8.0_102] >>> at >>> com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:284) >>> ~[?:1.8.0_102] >>> at >>> com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.handleStartElement(XMLSchemaValidator.java:1900) >>> ~[?:1.8.0_102] >>> at >>> com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.startElement(XMLSchemaValidator.java:740) >>> ~[?:1.8.0_102] >>> at >>> com.sun.org.apache.xerces.internal.jaxp.validation.ValidatorHandlerImpl.startElement(ValidatorHandlerImpl.java:570) >>> ~[?:1.8.0_102] >>> at >>> org.apache.xerces.jaxp.JAXPValidatorComponent$XNI2SAX.startElement(Unknown >>> Source) ~[!/:?] >>> at >>> org.apache.xerces.jaxp.JAXPValidatorComponent.startElement(Unknown Source) >>> ~[!/:?] >>> at >>> org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanStartElement(Unknown >>> Source) ~[!/:?] >>> at >>> org.apache.xerces.impl.XMLNSDocumentScannerImpl$NSContentDispatcher.scanRootElementHook(Unknown >>> Source) ~[!/:?] >>> at >>> org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown >>> Source) ~[!/:?] >>> at >>> org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown >>> Source) ~[!/:?] >>> at >>> org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source) ~[!/:?] >>> at >>> org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source) ~[!/:?] >>> at org.apache.xerces.parsers.XMLParser.parse(Unknown >>> Source) ~[!/:?] >>> at org.apache.xerces.parsers.DOMParser.parse(Unknown >>> Source) ~[!/:?] >>> at org.apache.xerces.jaxp.DocumentBuilderImpl.parse(Unknown >>> Source) ~[!/:?] >>> at >>> javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:121) >>> ~[?:1.8.0_102] >>> >>> After snooping around, I noticed a >>> /container/lib/endorsed/org.apache.karaf.specs.java.xml-4.2.10.jar lib >>> containing parser-related libs. My code executed successfully once I ran >>> Karaf without this particular file, though I don’t feel right just pulling >>> it out of Karaf blindly, as its absence creates a distinct possibility of >>> unforeseen issues down the road. >>> >>> Here are the only imports my bundle references in its manifest: >>> Import-Package: >>> javax.xml.transform,javax.xml.transform.stream,org.xml.sax,javax.xml.parsers,javax.xml.validation >>> >>> There are no entries under Bundle-Classpath >>> >>> Lastly, here is the java code that performs the xml parsing: >>> >>> DocumentBuilderFactory factory = >>> DocumentBuilderFactory.newInstance(); >>> SchemaFactory sf = >>> SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); >>> Schema schema = sf.newSchema(new StreamSource(new >>> FileInputStream("<LOCATION-OF-THE-SCHEMA-FILE>"))); >>> factory.setNamespaceAware(true); >>> factory.setSchema(schema); >>> factory.setExpandEntityReferences(false); >>> factory.setXIncludeAware(false); >>> >>> factory.setFeature("http://xml.org/sax/features/external-parameter-entities >>> <http://xml.org/sax/features/external-parameter-entities>",false); >>> >>> factory.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd >>> <http://apache.org/xml/features/nonvalidating/load-external-dtd>",false); >>> >>> factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl >>> <http://apache.org/xml/features/disallow-doctype-decl>", true); >>> >>> factory.setFeature("http://xml.org/sax/features/external-general-entities >>> <http://xml.org/sax/features/external-general-entities>",false); >>> >>> DocumentBuilder builder = factory.newDocumentBuilder(); >>> builder.setErrorHandler(null); >>> byte[] fileContent = >>> Files.readAllBytes(Paths.get("<LOCATION-OF-THE-XML-FILE-TO-BE-PARSED>")); >>> InputStream inStream = new ByteArrayInputStream(fileContent); >>> Document doc = builder.parse(inStream); >>> >>> Please advise me as to what I am doing wrong, as well as a possible >>> solution. Thank you for your time! >>> >>> Sincerely, >>> >>> Brock Samson