Project

Profile

Help

Bug #5398

open

Saxon 10.x: injects empty namespaces

Added by M. Hilpert 2 months ago. Updated about 2 months ago.

Status:
In Progress
Priority:
High
Assignee:
-
Category:
-
Sprint/Milestone:
-
Start date:
2022-03-16
Due date:
% Done:

0%

Estimated time:
Legacy ID:
Applies to branch:
10, 11, trunk
Fix Committed on Branch:
11, trunk
Fixed in Maintenance Release:
Platforms:
Java

Description

After upgrading from 9.6... to 10.7, our SOAP messages don't work anymore. The parses injects empty namespaces that cause the error. Exmaple:

Before / working:

<PutUserLogon xmlns="http://schemas.tstsrv.de/asfXml/asf/PutUserLogon/">
	<asfUserLogon>
		<Password  asf:NoLog="true">[blanked]</Password>
	</asfUserLogon>
</PutUserLogon>

after installing V 10.7:

<PutUserLogon xmlns="http://schemas.tstsrv.de/asfXml/asf/PutUserLogon/">
    <asfUserLogon xmlns="" >
	<Password  asf:NoLog="true">[blanked]</Password>
    </asfUserLogon>
</PutUserLogon>

Usually, the namespace should be internally used from the parent.

Actions #1

Updated by Michael Kay 2 months ago

There are a number of things that could cause this: for example issues #5059 and #5254 both report a similar effect occurring which was found to be caused by using a non-namespace-aware DOM as input, which isn't supported.

We would need to see exactly what you are doing to establish the cause.

Actions #2

Updated by M. Hilpert 2 months ago

I was able to "resolve" this by adding the same namespace to all subsequent elements.

But there are lots of other XSL-FO errors that occured. We have to go back to Saxon 9.x und need much more time to evaluate all those bugs that occured after switchung to V 10 ....

Actions #3

Updated by Michael Kay 2 months ago

If adding a redundant namespace declaration makes a difference, that does sound very much as if you are hitting the same problem of using a non-namespace-aware DOM.

Unfortunately the DOM API provides no way for Saxon to ask whether it is namespace-aware or not, so it's hard for us to handle the situation. It's a shame that so many people are still using DOM after all these years.

Actions #4

Updated by M. Hilpert 2 months ago

Well, I guess no boss wants to pay to change a working / running system to replace DOM ... and it's a lot of risk involved changing such "legacy" code. And DOM is not 'per se' bad, it has its advantages.

I just wonder why this worked flawlessy up to Saxon 9.x and became a problem with Saxon 10.x ?

Actions #5

Updated by Michael Kay 2 months ago

I just wonder why this worked flawlessy up to Saxon 9.x and became a problem with Saxon 10.x ?

Hard to know. I don't think it did work flawlessly, I think you simply didn't find the bugs. We've never supported non-namespace-aware DOM input, therefore we've never routinely tested it, and I think on the rare occasions when I've looked at whether it was something we could support, we found there were so many problems that it wasn't worth attempting.

One of the issues is simply that although you can set the DOM factory to be namespace-aware (or not), there's no way Saxon can ask whether the DOM is namespace aware, and trying to write code that handles both possibilities makes it very inefficient.

Actions #6

Updated by Michael Kay about 2 months ago

As a first step, I have added logic to DomObjectModel.sendDOMSource() that detects two common cases (where top is the document element):

(a) top.getNamespaceURI() == null && top.getNodeName().contains(":")

(b) top.getNamespaceURI() == null && top.hasAttribute("xmlns")

Both these conditions indicate that the user has supplied a non-namespace-aware DOM, and this will now be detected and treated as an error rather than resulting in bad output.

This doesn't detect all cases of non-namespace-aware DOMs (e.g. if the top-level element contains no namespace declarations, but lower-level elements do), but it's a quick check that will detect the majority of cases.

Actions #7

Updated by Michael Kay about 2 months ago

  • Status changed from New to In Progress

Following review of test failures, I decided to change the patch so when it detects a non-namespace-aware DOM, it now reports a warning rather than an error. (This patch will be in the 11.3 maintenance release even though the bug is not closed.)

Actions #8

Updated by Michael Kay about 2 months ago

  • Applies to branch 11, trunk added
  • Fix Committed on Branch 11, trunk added

Please register to edit this issue

Also available in: Atom PDF