Bug #2836
closed
No transmission filter available for xsl:copy-of
Applies to branch:
9.7, trunk
Fix Committed on Branch:
9.7, trunk
Fixed in Maintenance Release:
This seems similar to problems we've seen before. The apply-templates select expression is a FilterExpression, and the streaming adjunct for a FilterExpression is an instance of TransmissionAdjunct. The ApplyTemplatesAdjunct therefore expects the ItemFeed for the expression to be a TransmissionFlow, but this is not the case here because the selected nodes have been grounded by calling copy-of.
In the case of a LetExpression we solved this by having two different Adjunct classes depending on whether the nodes were grounded or not. But I've always felt that was a rather ad-hoc solution and the problem was more general.
In the case of ForEachAdjunct, IterateAdjunct, and ForEachGroupAdjunct, the getWatchMaker() method does this:
// If the select expression is grounded (but consuming), return null; so we end up with a Feed rather than a Watch.
if (select.getPosture() == Posture.GROUNDED) {
return null;
}
but this is missing from ApplyTemplatesAdjunct. I'll give it a try.
The above change turned out to be necessary but not sufficient.
The code for handling apply-templates with a grounded (but consuming) selection isn't currently handling xsl:with-param, so this needed to be fixed as well.
- Status changed from New to Resolved
- Applies to branch 9.7, 9.8 added
- Fix Committed on Branch 9.7, 9.8 added
Patch committed on the 9.7 and 9.8 branches.
- % Done changed from 0 to 100
- Fixed in Maintenance Release 9.7.0.7 added
Bug fix applied in the Saxon 9.7.0.7 maintenance release.
- Status changed from Resolved to Closed
- Applies to branch trunk added
- Applies to branch deleted (
9.8)
- Fix Committed on Branch trunk added
- Fix Committed on Branch deleted (
9.8)
Please register to edit this issue
Also available in: Atom
PDF