-
Notifications
You must be signed in to change notification settings - Fork 92
Call reset on reusable SAXParser instance
#742
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
Conversation
dubinsky
left a comment
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 ;)
| }) | ||
| 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. |
|
@dubinsky where do we stand here, any idea? |
As mentioned in #742 (comment) and #742 (comment), I do not see this change as a move in the right direction (see #765 for context). According to #742 (comment), suspicion that this change fixes a problem has been falsified, and the only motivation for merging it is that it "feels right". Well, it does not feel right to me, since it leads to surprising (to me ;)) changes in behavior, e.g. non-persistence of the settings on |
|
thanks. I'll presumptively close — @lrytz can reopen if he likes |
Maybe not falsified, I could not come up with a reproducer.
Right, the PR breaks the usage pattern of Though thinking about it, this global customization did not work before #176, and it would not work if we reverted it? |
Discussion: #176 (comment)