Skip to content

XMLSyntaxParser: tolerate a UTF-8 BOM at the start of XML documents - #9540

Open
NicolaIsotta wants to merge 1 commit into
apache:masterfrom
NicolaIsotta:xml-bom
Open

XMLSyntaxParser: tolerate a UTF-8 BOM at the start of XML documents#9540
NicolaIsotta wants to merge 1 commit into
apache:masterfrom
NicolaIsotta:xml-bom

Conversation

@NicolaIsotta

Copy link
Copy Markdown
Contributor

XMLSyntaxParser rejected any leading text before the document element with "Invalid token ... found in document", so a BOM character (U+FEFF) caused every BOM-prefixed XML file to fail parsing. Treat a trimmed BOM the same as blank/whitespace when validating text under the Document node.

This also adds a test with a BOM xml file and removes some dead code (tokenSequence.token() is always null before the first moveNext())


^Add meaningful description above

Click to collapse/expand PR instructions

By opening a pull request you confirm that, unless explicitly stated otherwise, the changes -

  • are all your own work, and you have the right to contribute them.
  • are contributed solely under the terms and conditions of the Apache License 2.0 (see section 5 of the license for more information).

LLMs, Commit messages and PR description:

  • Please make sure (eg. git log) that all commits have a valid name and email address for you in the Author field.
  • LLM assisted commits should be attributed with an Assisted-by: MODEL_NAME MODEL_VERSION line appended to the commit message.
    • Please mention coding assistance in the PR description too (eg. by adding the same Assisted-by line from above)
    • Please describe the changes in your own words - we'd like to know you understand the changes being made!

If you're a first time contributor, see the Contributing guidelines for more information.

If you're a committer, please label the PR before pressing "Create pull request" so that the right test jobs can run.

PR approval and merge checklist:

  1. Was this PR correctly labeled, did the right tests run? When did they run?
  2. Is this PR squashed?
  3. Are author name / email address correct? Are co-authors correctly listed? Do the commit messages need updates?
  4. Does the PR title and description still fit after the Nth iteration? Is the description sufficient to appear in the release notes?

If this PR targets the delivery branch: don't merge. (full wiki article)

XMLSyntaxParser rejected any leading text before the document
element with "Invalid token ... found in document", so a BOM
character (U+FEFF) caused every BOM-prefixed XML file to fail
parsing. Treat a trimmed BOM the same as blank/whitespace when
validating text under the Document node.

This also adds a test with a BOM xml file and removes some dead code
(tokenSequence.token() is always null before the first moveNext())
@NicolaIsotta

NicolaIsotta commented Aug 4, 2026

Copy link
Copy Markdown
Contributor Author

NB: I discovered this bug while working on a JSF project whose faces-config.xml had the BOM.
Got an exception and autocomplete on the facelets stopped working.
Here's the stack trace:

java.lang.NullPointerException: Cannot invoke "org.w3c.dom.Document.getDocumentElement()" because the return value of "org.netbeans.modules.web.jsf.api.facesmodel.JSFConfigModel.getDocument()" is null
	at org.netbeans.modules.web.jsf.impl.metamodel.JsfModelImpl.createModel(JsfModelImpl.java:303)
	at org.netbeans.modules.web.jsf.impl.metamodel.JsfModelImpl.initModels(JsfModelImpl.java:333)
	at org.netbeans.modules.web.jsf.impl.metamodel.JsfModelImpl.<init>(JsfModelImpl.java:94)
	at org.netbeans.modules.web.jsf.impl.metamodel.JsfModelImplementation.<init>(JsfModelImplementation.java:44)
	at org.netbeans.modules.web.jsf.impl.metamodel.JsfModelImplementation.create(JsfModelImplementation.java:50)
	at org.netbeans.modules.web.jsf.impl.metamodel.JsfModelProviderImpl.createMetaModel(JsfModelProviderImpl.java:76)
	at org.netbeans.modules.web.jsf.impl.metamodel.JsfModelProviderImpl.getModel(JsfModelProviderImpl.java:69)
	at org.netbeans.modules.web.jsf.JSFUtils.getModel(JSFUtils.java:425)
	at org.netbeans.modules.web.jsf.api.editor.JsfFacesComponentsProvider.getLibraries(JsfFacesComponentsProvider.java:74)
	at org.netbeans.modules.web.jsf.editor.facelets.FaceletsLibrarySupport$RefreshFacesComponentsTask.run(FaceletsLibrarySupport.java:451)
	at org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:1370)
	at org.netbeans.modules.openide.util.GlobalLookup.execute(GlobalLookup.java:45)
	at org.openide.util.lookup.Lookups.executeWith(Lookups.java:287)
[catch] at org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:1981)

@mbien mbien added Editor XML ci:dev-build [ci] produce a dev-build zip artifact (7 days expiration, see link on workflow summary page) labels Aug 5, 2026
@mbien mbien added this to the NB32 milestone Aug 5, 2026
@apache apache locked and limited conversation to collaborators Aug 5, 2026
@apache apache unlocked this conversation Aug 5, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ci:dev-build [ci] produce a dev-build zip artifact (7 days expiration, see link on workflow summary page) Editor XML

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants