-
Notifications
You must be signed in to change notification settings - Fork 92
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Call reset
on reusable SAXParser
instance
#742
base: main
Are you sure you want to change the base?
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It is not clear to me what is gained by this change...
def parser: SAXParser = parserInstance.get | ||
def parser: SAXParser = { | ||
val p = parserInstance.get | ||
p.reset() |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Auto-reset on get leads to surprising changes in behavior, e.g. non-persistence of the settings on XMLLoader.reader
, as witnessed by the changes to the test above.
Better place for auto-reset seems to be FactoryAdapter.loadDocument()
, but it will then apply to all readers, not just the default one...
Better still would be - in my opinion - not to reuse parsers, readers and factory adapters and not to use thread-locals.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
So revert #176?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I am not going to campaign for reverting it, but I am not a fan ;)
override def warning(e: SAXParseException): Unit = gotAnError = true | ||
override def error(e: SAXParseException): Unit = gotAnError = true | ||
override def fatalError(e: SAXParseException): Unit = gotAnError = true | ||
}) | ||
try { | ||
XML.loadString("<a>") | ||
XML.adapter.loadDocument(Source.fromString("<a>"), reader) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'd love to make XMLLoader.adapter
, NoBindingFactoryAdapter
and FactoryAdapter
private at some point (and remove some of them altogether), and add XMLLoader.loadDocument(inputSource: InputSource, reader: XMLReader)
...
It's really more of a guess... In a non-public codebase we have an Thanks for taking a look. |
Didn't manage to reproduce the failure we saw and suspect would be fixed by this PR. So that leaves as justification that "it seems right" to call reset, according to the Javadocs. |
Discussion: #176 (comment)