apache / netbeans

Apache NetBeans
https://netbeans.apache.org/
Apache License 2.0
2.63k stars 841 forks source link

NPE when scanning JSF libraries in Java web project #7652

Closed vitsuchanek closed 1 month ago

vitsuchanek commented 1 month ago

Apache NetBeans version

Apache NetBeans 23 release candidate

What happened

Occurs when scanning maven based Java web project during IDE startup. We are using MyFaces + PrimeFaces JSF technology. IDE stacktrace:

java.lang.NullPointerException: Cannot invoke "org.netbeans.modules.web.jsf.editor.facelets.LibraryDescriptor.getTags()" because the return value of "org.netbeans.modules.web.jsf.editor.facelets.AbstractFaceletsLibrary.getLibraryDescriptor()" is null
    at org.netbeans.modules.web.jsf.editor.facelets.AbstractFaceletsLibrary$NamedComponent.getTag(AbstractFaceletsLibrary.java:119)
    at org.netbeans.modules.web.jsf.editor.hints.ComponentUsagesChecker$ComponentUsageVisitor.visit(ComponentUsagesChecker.java:142)
    at org.netbeans.modules.html.editor.lib.api.elements.ElementUtils.visitChildren(ElementUtils.java:443)
    at org.netbeans.modules.web.jsf.editor.hints.ComponentUsagesChecker.checkCCCalls(ComponentUsagesChecker.java:94)
    at org.netbeans.modules.web.jsf.editor.hints.ComponentUsagesChecker.compute(ComponentUsagesChecker.java:63)
    at org.netbeans.modules.web.jsf.editor.hints.HintsRegistry.gatherHints(HintsRegistry.java:56)
    at org.netbeans.modules.web.jsf.editor.JsfHtmlExtension.computeErrors(JsfHtmlExtension.java:477)
    at org.netbeans.modules.html.editor.hints.HtmlHintsProvider.computeErrors(HtmlHintsProvider.java:325)
    at org.netbeans.modules.html.editor.HtmlErrorFilter.filter(HtmlErrorFilter.java:82)
    at org.netbeans.modules.csl.core.ErrorFilterQuery.getFilteredErrors(ErrorFilterQuery.java:57)
    at org.netbeans.modules.csl.core.TLIndexerFactory$TLIndexer.index(TLIndexerFactory.java:255)
    at org.netbeans.modules.parsing.spi.indexing.Indexable$MyAccessor$3.run(Indexable.java:225)
    at org.netbeans.modules.parsing.impl.indexing.RepositoryUpdater.runIndexer(RepositoryUpdater.java:274)
    at org.netbeans.modules.parsing.spi.indexing.Indexable$MyAccessor.index(Indexable.java:223)
[catch] at org.netbeans.modules.parsing.impl.indexing.RepositoryUpdater$Work$1T.run(RepositoryUpdater.java:3229)
    at org.netbeans.modules.parsing.impl.indexing.RepositoryUpdater$Work$1T.run(RepositoryUpdater.java:3249)
    at org.netbeans.modules.parsing.impl.TaskProcessor.callUserTask(TaskProcessor.java:586)
    at org.netbeans.modules.parsing.api.ParserManager$UserTaskAction.run(ParserManager.java:197)
    at org.netbeans.modules.parsing.api.ParserManager$UserTaskAction.run(ParserManager.java:180)
    at org.netbeans.modules.parsing.impl.TaskProcessor$2.call(TaskProcessor.java:181)
    at org.netbeans.modules.parsing.impl.TaskProcessor$2.call(TaskProcessor.java:178)
    at org.netbeans.modules.masterfs.filebasedfs.utils.FileChangedManager.priorityIO(FileChangedManager.java:153)
    at org.netbeans.modules.masterfs.providers.ProvidedExtensions.priorityIO(ProvidedExtensions.java:335)
    at org.netbeans.modules.parsing.nb.DataObjectEnvFactory.runPriorityIO(DataObjectEnvFactory.java:118)
    at org.netbeans.modules.parsing.impl.Utilities.runPriorityIO(Utilities.java:67)
    at org.netbeans.modules.parsing.impl.TaskProcessor.runUserTask(TaskProcessor.java:178)
    at org.netbeans.modules.parsing.api.ParserManager.parse(ParserManager.java:83)
    at org.netbeans.modules.parsing.impl.indexing.RepositoryUpdater$Work.indexEmbedding(RepositoryUpdater.java:3268)
    at org.netbeans.modules.parsing.impl.indexing.RepositoryUpdater$Work.doIndex(RepositoryUpdater.java:2861)
    at org.netbeans.modules.parsing.impl.indexing.RepositoryUpdater$Work.lambda$index$0(RepositoryUpdater.java:2626)
    at org.netbeans.modules.parsing.impl.indexing.errors.TaskCache.refreshTransaction(TaskCache.java:540)
    at org.netbeans.modules.parsing.impl.indexing.RepositoryUpdater$Work.index(RepositoryUpdater.java:2625)
    at org.netbeans.modules.parsing.impl.indexing.RepositoryUpdater$Work.lambda$scanFiles$2(RepositoryUpdater.java:3332)
    at org.netbeans.modules.parsing.impl.indexing.RepositoryUpdater.lambda$runInContext$4(RepositoryUpdater.java:2119)
    at org.openide.util.lookup.Lookups.executeWith(Lookups.java:288)
    at org.netbeans.modules.parsing.impl.indexing.RepositoryUpdater.runInContext(RepositoryUpdater.java:2117)
    at org.netbeans.modules.parsing.impl.indexing.RepositoryUpdater.runInContext(RepositoryUpdater.java:2098)
    at org.netbeans.modules.parsing.impl.indexing.RepositoryUpdater.access$1400(RepositoryUpdater.java:135)
    at org.netbeans.modules.parsing.impl.indexing.RepositoryUpdater$Work.scanFiles(RepositoryUpdater.java:3290)
    at org.netbeans.modules.parsing.impl.indexing.RepositoryUpdater$FileListWork.getDone(RepositoryUpdater.java:3832)
    at org.netbeans.modules.parsing.impl.indexing.RepositoryUpdater$Work.doTheWork(RepositoryUpdater.java:3452)
    at org.netbeans.modules.parsing.impl.indexing.RepositoryUpdater$Task._run(RepositoryUpdater.java:6197)
    at org.netbeans.modules.parsing.impl.indexing.RepositoryUpdater$Task.access$3400(RepositoryUpdater.java:5855)
    at org.netbeans.modules.parsing.impl.indexing.RepositoryUpdater$Task$2.lambda$call$0(RepositoryUpdater.java:6116)
    at org.openide.util.lookup.Lookups.executeWith(Lookups.java:288)
    at org.netbeans.modules.parsing.impl.RunWhenScanFinishedSupport.performScan(RunWhenScanFinishedSupport.java:83)
    at org.netbeans.modules.parsing.impl.indexing.RepositoryUpdater$Task$2.call(RepositoryUpdater.java:6116)
    at org.netbeans.modules.parsing.impl.indexing.RepositoryUpdater$Task$2.call(RepositoryUpdater.java:6112)
    at org.netbeans.modules.masterfs.filebasedfs.utils.FileChangedManager.priorityIO(FileChangedManager.java:153)
    at org.netbeans.modules.masterfs.providers.ProvidedExtensions.priorityIO(ProvidedExtensions.java:335)
    at org.netbeans.modules.parsing.nb.DataObjectEnvFactory.runPriorityIO(DataObjectEnvFactory.java:118)
    at org.netbeans.modules.parsing.impl.Utilities.runPriorityIO(Utilities.java:67)
    at org.netbeans.modules.parsing.impl.indexing.RepositoryUpdater$Task.run(RepositoryUpdater.java:6112)
    at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572)
    at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
    at org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:1403)
    at org.netbeans.modules.openide.util.GlobalLookup.execute(GlobalLookup.java:45)
    at org.openide.util.lookup.Lookups.executeWith(Lookups.java:287)
    at org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:2018)

There's a preceding exception in the IDE log:

java.io.FileNotFoundException: https://jakarta.ee/dtd/facelet-taglib_1_0.dtd
    at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1994)
    at java.base/sun.net.www.protocol.http.HttpURLConnection$9.run(HttpURLConnection.java:1591)
    at java.base/sun.net.www.protocol.http.HttpURLConnection$9.run(HttpURLConnection.java:1589)
    at java.base/java.security.AccessController.doPrivileged(AccessController.java:714)
    at java.base/java.security.AccessController.doPrivilegedWithCombiner(AccessController.java:964)
    at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1588)
    at java.base/sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:223)
    at java.xml/com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(XMLEntityManager.java:678)
    at java.xml/com.sun.org.apache.xerces.internal.impl.XMLEntityManager.startEntity(XMLEntityManager.java:1398)
    at java.xml/com.sun.org.apache.xerces.internal.impl.XMLEntityManager.startDTDEntity(XMLEntityManager.java:1364)
    at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDTDScannerImpl.setInputSource(XMLDTDScannerImpl.java:257)
    at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$DTDDriver.dispatch(XMLDocumentScannerImpl.java:1152)
    at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$DTDDriver.next(XMLDocumentScannerImpl.java:1040)
    at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:943)
    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.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:542)
    at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:889)
    at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:825)
    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.DOMParser.parse(DOMParser.java:247)
    at java.xml/com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:342)
    at org.netbeans.modules.web.jsf.editor.facelets.FaceletsLibraryDescriptor.parseLibrary(FaceletsLibraryDescriptor.java:114)
Caused: org.netbeans.modules.web.jsf.editor.facelets.LibraryDescriptorException: Error parsing facelets library: 
    at org.netbeans.modules.web.jsf.editor.facelets.FaceletsLibraryDescriptor.parseLibrary(FaceletsLibraryDescriptor.java:165)
    at org.netbeans.modules.web.jsf.editor.facelets.FaceletsLibraryDescriptor.parseLibrary(FaceletsLibraryDescriptor.java:99)
    at org.netbeans.modules.web.jsf.editor.facelets.FaceletsLibraryDescriptor.<init>(FaceletsLibraryDescriptor.java:67)
    at org.netbeans.modules.web.jsf.editor.facelets.FaceletsLibraryDescriptor.create(FaceletsLibraryDescriptor.java:57)
    at org.netbeans.modules.web.jsf.editor.facelets.FaceletsLibrary.getFaceletsLibraryDescriptor(FaceletsLibrary.java:62)
[catch] at org.netbeans.modules.web.jsf.editor.facelets.FaceletsLibrary.getLibraryDescriptor(FaceletsLibrary.java:125)
    at org.netbeans.modules.web.jsf.editor.facelets.AbstractFaceletsLibrary$NamedComponent.getTag(AbstractFaceletsLibrary.java:119)
    at org.netbeans.modules.web.jsf.editor.hints.ComponentUsagesChecker$ComponentUsageVisitor.visit(ComponentUsagesChecker.java:142)
    at org.netbeans.modules.html.editor.lib.api.elements.ElementUtils.visitChildren(ElementUtils.java:443)
    at org.netbeans.modules.web.jsf.editor.hints.ComponentUsagesChecker.checkCCCalls(ComponentUsagesChecker.java:94)
    at org.netbeans.modules.web.jsf.editor.hints.ComponentUsagesChecker.compute(ComponentUsagesChecker.java:63)
    at org.netbeans.modules.web.jsf.editor.hints.HintsRegistry.gatherHints(HintsRegistry.java:56)
    at org.netbeans.modules.web.jsf.editor.JsfHtmlExtension.computeErrors(JsfHtmlExtension.java:477)
    at org.netbeans.modules.html.editor.hints.HtmlHintsProvider.computeErrors(HtmlHintsProvider.java:325)
    at org.netbeans.modules.html.editor.HtmlErrorFilter.filter(HtmlErrorFilter.java:82)
    at org.netbeans.modules.csl.core.ErrorFilterQuery.getFilteredErrors(ErrorFilterQuery.java:57)
    at org.netbeans.modules.csl.core.TLIndexerFactory$TLIndexer.index(TLIndexerFactory.java:255)
    at org.netbeans.modules.parsing.spi.indexing.Indexable$MyAccessor$3.run(Indexable.java:225)
    at org.netbeans.modules.parsing.impl.indexing.RepositoryUpdater.runIndexer(RepositoryUpdater.java:274)
    at org.netbeans.modules.parsing.spi.indexing.Indexable$MyAccessor.index(Indexable.java:223)
    at org.netbeans.modules.parsing.impl.indexing.RepositoryUpdater$Work$1T.run(RepositoryUpdater.java:3229)
    at org.netbeans.modules.parsing.impl.indexing.RepositoryUpdater$Work$1T.run(RepositoryUpdater.java:3249)
    at org.netbeans.modules.parsing.impl.TaskProcessor.callUserTask(TaskProcessor.java:586)
    at org.netbeans.modules.parsing.api.ParserManager$UserTaskAction.run(ParserManager.java:197)
    at org.netbeans.modules.parsing.api.ParserManager$UserTaskAction.run(ParserManager.java:180)
    at org.netbeans.modules.parsing.impl.TaskProcessor$2.call(TaskProcessor.java:181)
    at org.netbeans.modules.parsing.impl.TaskProcessor$2.call(TaskProcessor.java:178)
    at org.netbeans.modules.masterfs.filebasedfs.utils.FileChangedManager.priorityIO(FileChangedManager.java:153)
    at org.netbeans.modules.masterfs.providers.ProvidedExtensions.priorityIO(ProvidedExtensions.java:335)
    at org.netbeans.modules.parsing.nb.DataObjectEnvFactory.runPriorityIO(DataObjectEnvFactory.java:118)
    at org.netbeans.modules.parsing.impl.Utilities.runPriorityIO(Utilities.java:67)
    at org.netbeans.modules.parsing.impl.TaskProcessor.runUserTask(TaskProcessor.java:178)
    at org.netbeans.modules.parsing.api.ParserManager.parse(ParserManager.java:83)
    at org.netbeans.modules.parsing.impl.indexing.RepositoryUpdater$Work.indexEmbedding(RepositoryUpdater.java:3268)
    at org.netbeans.modules.parsing.impl.indexing.RepositoryUpdater$Work.doIndex(RepositoryUpdater.java:2861)
    at org.netbeans.modules.parsing.impl.indexing.RepositoryUpdater$Work.lambda$index$0(RepositoryUpdater.java:2626)
    at org.netbeans.modules.parsing.impl.indexing.errors.TaskCache.refreshTransaction(TaskCache.java:540)
    at org.netbeans.modules.parsing.impl.indexing.RepositoryUpdater$Work.index(RepositoryUpdater.java:2625)
    at org.netbeans.modules.parsing.impl.indexing.RepositoryUpdater$AbstractRootsWork.lambda$scanSource$3(RepositoryUpdater.java:5735)
    at org.netbeans.modules.parsing.impl.indexing.RepositoryUpdater.lambda$runInContext$4(RepositoryUpdater.java:2119)
    at org.openide.util.lookup.Lookups.executeWith(Lookups.java:288)
    at org.netbeans.modules.parsing.impl.indexing.RepositoryUpdater.runInContext(RepositoryUpdater.java:2117)
    at org.netbeans.modules.parsing.impl.indexing.RepositoryUpdater.runInContext(RepositoryUpdater.java:2098)
    at org.netbeans.modules.parsing.impl.indexing.RepositoryUpdater.access$1400(RepositoryUpdater.java:135)
    at org.netbeans.modules.parsing.impl.indexing.RepositoryUpdater$AbstractRootsWork.scanSource(RepositoryUpdater.java:5770)
    at org.netbeans.modules.parsing.impl.indexing.RepositoryUpdater$AbstractRootsWork.scanSources(RepositoryUpdater.java:5443)
    at org.netbeans.modules.parsing.impl.indexing.RepositoryUpdater$RootsWork.getDone(RepositoryUpdater.java:5075)
    at org.netbeans.modules.parsing.impl.indexing.RepositoryUpdater$InitialRootsWork.getDone(RepositoryUpdater.java:5842)
    at org.netbeans.modules.parsing.impl.indexing.RepositoryUpdater$Work.doTheWork(RepositoryUpdater.java:3452)
    at org.netbeans.modules.parsing.impl.indexing.RepositoryUpdater$Task._run(RepositoryUpdater.java:6197)
    at org.netbeans.modules.parsing.impl.indexing.RepositoryUpdater$Task.access$3400(RepositoryUpdater.java:5855)
    at org.netbeans.modules.parsing.impl.indexing.RepositoryUpdater$Task$2.lambda$call$0(RepositoryUpdater.java:6116)
    at org.openide.util.lookup.Lookups.executeWith(Lookups.java:288)
    at org.netbeans.modules.parsing.impl.RunWhenScanFinishedSupport.performScan(RunWhenScanFinishedSupport.java:83)
    at org.netbeans.modules.parsing.impl.indexing.RepositoryUpdater$Task$2.call(RepositoryUpdater.java:6116)
    at org.netbeans.modules.parsing.impl.indexing.RepositoryUpdater$Task$2.call(RepositoryUpdater.java:6112)
    at org.netbeans.modules.masterfs.filebasedfs.utils.FileChangedManager.priorityIO(FileChangedManager.java:153)
    at org.netbeans.modules.masterfs.providers.ProvidedExtensions.priorityIO(ProvidedExtensions.java:335)
    at org.netbeans.modules.parsing.nb.DataObjectEnvFactory.runPriorityIO(DataObjectEnvFactory.java:118)
    at org.netbeans.modules.parsing.impl.Utilities.runPriorityIO(Utilities.java:67)
    at org.netbeans.modules.parsing.impl.indexing.RepositoryUpdater$Task.run(RepositoryUpdater.java:6112)
    at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572)
    at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
    at org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:1403)
    at org.netbeans.modules.openide.util.GlobalLookup.execute(GlobalLookup.java:45)
    at org.openide.util.lookup.Lookups.executeWith(Lookups.java:287)
    at org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:2018)

Language / Project Type / NetBeans Component

No response

How to reproduce

Occurs each IDE startup. I'm now testing NB 23 RC2.

Did this work correctly in an earlier version?

Apache NetBeans 22

Operating System

Windows 10 version 10.0 running on amd64; UTF-8; cs_CZ (nb)

JDK

21.0.3; Java HotSpot(TM) 64-Bit Server VM 21.0.3+7-LTS-152

Apache NetBeans packaging

Apache NetBeans binary zip

Anything else

It seems that it is possible to normally work in NetBeans IDE even after that NPE.

Are you willing to submit a pull request?

No

matthiasblaesing commented 1 month ago

@vitsuchanek it would really be helpful if you could provide a reproducer.

matthiasblaesing commented 1 month ago

This: https://jakarta.ee/dtd/facelet-taglib_1_0.dtd makes no sense. All occurrences in NetBeans use the correct form http://java.sun.com/dtd/facelet-taglib_1_0.dtd and I did not find a location where the string is concatenated.

My take: someone got the message that JavaEE became JakartaEE and changed the namespace. Just that is not correct, as the namespace change is only relevant for DTDs or XSDs released after the transition.

To diagnose this needs a sample.

vitsuchanek commented 1 month ago

Hi @matthiasblaesing, thanks for your answer. You're right, there was a mistake in XML doctype used in xhtml in our project. I'm sorry for wasting your time. You can close this issue, thanks. Regards Vít

matthiasblaesing commented 1 month ago

@vitsuchanek thanks for double checking. Closing this then.