You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xalan.apache.org by mu...@apache.org on 2025/07/25 11:38:08 UTC
(xalan-java) branch xalan-j_xslt3.0_mvn updated: committing implementation improvements for xpath 3.1 sequence type expressions
This is an automated email from the ASF dual-hosted git repository.
mukulg pushed a commit to branch xalan-j_xslt3.0_mvn
in repository https://gitbox.apache.org/repos/asf/xalan-java.git
The following commit(s) were added to refs/heads/xalan-j_xslt3.0_mvn by this push:
new 24da96ae2 committing implementation improvements for xpath 3.1 sequence type expressions
24da96ae2 is described below
commit 24da96ae2bacb13152011185651aba193214da17
Author: Mukul Gandhi <ga...@gmail.com>
AuthorDate: Fri Jul 25 17:07:44 2025 +0530
committing implementation improvements for xpath 3.1 sequence type expressions
---
README | 8 +--
.../apache/xalan/templates/ElemApplyTemplates.java | 2 +-
.../org/apache/xalan/templates/ElemFunction.java | 53 +++++++++++---
.../org/apache/xalan/templates/ElemSequence.java | 28 ++++++--
.../org/apache/xalan/templates/ElemVariable.java | 60 ++++++++--------
.../xslt/util/XslTransformSharedDatastore.java | 9 ++-
.../org/apache/xpath/compiler/XPathParser.java | 44 ++++++++----
.../xpath/composite/SequenceTypeSupport.java | 10 ++-
.../xpath/functions/XSL3FunctionService.java | 25 ++++---
.../java/org/apache/xpath/operations/Variable.java | 2 +-
.../w3c/xslt3/result/attr/_as-test-set_result.xml | 2 +-
.../w3c/xslt3/result/attr/_avt-test-set_result.xml | 2 +-
.../xslt3/result/attr/_match-test-set_result.xml | 2 +-
.../xslt3/result/attr/_select-test-set_result.xml | 2 +-
.../_xpath-default-namespace-test-set_result.xml | 2 +-
.../result/decl/_attribute-set-test-set_result.xml | 2 +-
.../result/decl/_character-map-test-set_result.xml | 2 +-
.../result/decl/_function-test-set_result.xml | 20 ++----
.../result/decl/_variable-test-set_result.xml | 2 +-
.../xslt3/result/expr/_axes-test-set_result.xml | 2 +-
.../result/expr/_castable-test-set_result.xml | 2 +-
.../result/expr/_expression-test-set_result.xml | 2 +-
.../w3c/xslt3/result/expr/_for-test-set_result.xml | 2 +-
.../_higher-order-functions-test-set_result.xml | 2 +-
.../xslt3/result/expr/_math-test-set_result.xml | 2 +-
.../result/expr/_nodetest-test-set_result.xml | 2 +-
.../xslt3/result/expr/_path-test-set_result.xml | 2 +-
.../result/expr/_predicate-test-set_result.xml | 2 +-
.../result/fn/_deep-equal-test-set_result.xml | 2 +-
.../result/fn/_format-number-test-set_result.xml | 2 +-
.../w3c/xslt3/result/fn/_key-test-set_result.xml | 2 +-
.../xslt3/result/fn/_position-test-set_result.xml | 2 +-
.../w3c/xslt3/result/fn/_root-test-set_result.xml | 2 +-
.../insn/_analyze-string-test-set_result.xml | 2 +-
.../insn/_apply-templates-test-set_result.xml | 2 +-
.../result/insn/_attribute-test-set_result.xml | 2 +-
.../result/insn/_call-template-test-set_result.xml | 2 +-
.../xslt3/result/insn/_choose-test-set_result.xml | 2 +-
.../xslt3/result/insn/_copy-test-set_result.xml | 2 +-
.../xslt3/result/insn/_element-test-set_result.xml | 2 +-
.../insn/_for-each-group-test-set_result.xml | 2 +-
.../xslt3/result/insn/_iterate-test-set_result.xml | 2 +-
.../result/insn/_sequence-test-set_result.xml | 2 +-
.../xslt3/result/insn/_sort-test-set_result.xml | 2 +-
.../w3c/xslt3/result/insn/_try-test-set_result.xml | 6 +-
.../result/insn/_xsl-document-test-set_result.xml | 4 +-
.../xslt3/result/misc/_regex-test-set_result.xml | 2 +-
.../xslt3/result/type/_boolean-test-set_result.xml | 2 +-
.../xslt3/result/type/_date-test-set_result.xml | 2 +-
.../xslt3/result/type/_node-test-set_result.xml | 2 +-
.../xslt3/result/type/_string-test-set_result.xml | 2 +-
.../result/w3c_xslt3_testsuite_xalan-j_result.xml | 4 +-
.../xalan/tests/xpath3/FnParseJsonTests.java | 40 +++++++++++
.../apache/xalan/tests/xpath3/XPathArrayTests.java | 20 ++++++
src/test/resources/fn_parse_json/gold/test4.out | 1 +
src/test/resources/fn_parse_json/gold/test5.out | 1 +
src/test/resources/fn_parse_json/gold/test6.out | 1 +
src/test/resources/fn_parse_json/gold/test7.out | 1 +
src/test/resources/fn_parse_json/test2.json | 5 ++
src/test/resources/fn_parse_json/test3.json | 17 +++++
src/test/resources/fn_parse_json/test4.json | 19 +++++
src/test/resources/fn_parse_json/test4.xsl | 42 +++++++++++
src/test/resources/fn_parse_json/test5.xsl | 42 +++++++++++
src/test/resources/fn_parse_json/test6.xsl | 42 +++++++++++
src/test/resources/fn_parse_json/test7.xsl | 42 +++++++++++
src/test/resources/xpath_array/gold/test29.out | 5 ++
src/test/resources/xpath_array/gold/test30.out | 10 +++
src/test/resources/xpath_array/test2.json | 5 ++
src/test/resources/xpath_array/test29.xsl | 60 ++++++++++++++++
src/test/resources/xpath_array/test30.xsl | 81 ++++++++++++++++++++++
70 files changed, 632 insertions(+), 153 deletions(-)
diff --git a/README b/README
index e2ee933ba..3394807ca 100644
--- a/README
+++ b/README
@@ -17,7 +17,7 @@
Copyright 1999-2025 The Apache Software Foundation
-Document last modified : 2025-07-24
+Document last modified : 2025-07-25
Authors:
Gary Gregory <gg...@apache.org>
@@ -59,16 +59,16 @@ The Maven build results like following shall be produced:
[INFO] T E S T S
[INFO] -------------------------------------------------------
[INFO] Running org.apache.xalan.tests.main.AllXalanXSLT3Tests
-[INFO] Tests run: 1175, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 17.134 s - in org.apache.xalan.tests.main.AllXalanXSLT3Tests
+[INFO] Tests run: 1181, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 42.059 s - in org.apache.xalan.tests.main.AllXalanXSLT3Tests
[INFO]
[INFO] Results:
[INFO]
-[INFO] Tests run: 1175, Failures: 0, Errors: 0, Skipped: 0
+[INFO] Tests run: 1181, Failures: 0, Errors: 0, Skipped: 0
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
-[INFO] Total time: 01:54 min
+[INFO] Total time: 01:35 min
If the user needs to run Xalan-J's XSLT 3.0 implementation via Java code, the value of JVM's system property
diff --git a/src/main/java/org/apache/xalan/templates/ElemApplyTemplates.java b/src/main/java/org/apache/xalan/templates/ElemApplyTemplates.java
index e94179c8e..376966bfa 100644
--- a/src/main/java/org/apache/xalan/templates/ElemApplyTemplates.java
+++ b/src/main/java/org/apache/xalan/templates/ElemApplyTemplates.java
@@ -770,7 +770,7 @@ public class ElemApplyTemplates extends ElemCallTemplate
}
if (argConvertedVal == null) {
- argConvertedVal = SequenceTypeSupport.castXDMValueToAnotherType(srcValue, paramAsAttrStrVal, null, xctxt, prefixTable);
+ argConvertedVal = SequenceTypeSupport.castXdmValueToAnotherType(srcValue, paramAsAttrStrVal, null, xctxt, prefixTable);
}
if (argConvertedVal == null) {
diff --git a/src/main/java/org/apache/xalan/templates/ElemFunction.java b/src/main/java/org/apache/xalan/templates/ElemFunction.java
index 64fcc7d64..b058d1351 100644
--- a/src/main/java/org/apache/xalan/templates/ElemFunction.java
+++ b/src/main/java/org/apache/xalan/templates/ElemFunction.java
@@ -41,6 +41,7 @@ import org.apache.xpath.XPath;
import org.apache.xpath.XPathContext;
import org.apache.xpath.compiler.FunctionTable;
import org.apache.xpath.compiler.Keywords;
+import org.apache.xpath.composite.SequenceTypeArrayTest;
import org.apache.xpath.composite.SequenceTypeData;
import org.apache.xpath.composite.SequenceTypeFunctionTest;
import org.apache.xpath.composite.SequenceTypeKindTest;
@@ -431,9 +432,11 @@ public class ElemFunction extends ElemTemplate
if (funcAsAttrStrVal != null) {
// Process xsl:function's evaluation result with "as" attribute
- try {
+
+ try {
+ SequenceTypeData seqExpectedTypeData = getSequenceTypeDataFromSeqTypeStr(funcAsAttrStrVal, xctxt, srcLocator);
+
if (funcResultConvertedVal instanceof XPathInlineFunction) {
- SequenceTypeData seqExpectedTypeData = getSequenceTypeDataFromSeqTypeStr(funcAsAttrStrVal, xctxt, srcLocator);
if (seqExpectedTypeData.getSequenceTypeFunctionTest() != null) {
return funcResultConvertedVal;
}
@@ -444,7 +447,6 @@ public class ElemFunction extends ElemTemplate
}
}
else if (funcResultConvertedVal instanceof XPathMap) {
- SequenceTypeData seqExpectedTypeData = getSequenceTypeDataFromSeqTypeStr(funcAsAttrStrVal, xctxt, srcLocator);
if (seqExpectedTypeData.getSequenceTypeMapTest() != null) {
return funcResultConvertedVal;
}
@@ -454,10 +456,40 @@ public class ElemFunction extends ElemTemplate
funcAsAttrStrVal + ".", srcLocator);
}
}
- else if (funcResultConvertedVal instanceof XPathArray) {
- SequenceTypeData seqExpectedTypeData = getSequenceTypeDataFromSeqTypeStr(funcAsAttrStrVal, xctxt, srcLocator);
- if (seqExpectedTypeData.getSequenceTypeArrayTest() != null) {
- return funcResultConvertedVal;
+ else if (funcResultConvertedVal instanceof XPathArray) {
+ SequenceTypeArrayTest seqTypeArrayTest = seqExpectedTypeData.getSequenceTypeArrayTest();
+ if (seqTypeArrayTest != null) {
+ if (seqTypeArrayTest.isAnyArrayTest()) {
+ // XPath sequence type is array(*), that matches any xdm array
+ return funcResultConvertedVal;
+ }
+ else {
+ /**
+ * Verify that, all the xdm array items match array test's item type.
+ * For e.g, for XPath sequence type array(xs:integer), all xdm array
+ * items should conform to schema type xs:integer.
+ */
+ SequenceTypeData arrItemType = seqTypeArrayTest.getArrayItemTypeInfo();
+ XPathArray xpathArr = (XPathArray)funcResultConvertedVal;
+ for (int i = 0; i < xpathArr.size(); i++) {
+ XObject xObj = xpathArr.get(i);
+ try {
+ XObject xObjResult = SequenceTypeSupport.castXdmValueToAnotherType(xObj, null, arrItemType, xctxt);
+ if (xObjResult == null) {
+ throw new TransformerException("XPTY0004 : An xsl:function call result for function {" + funcNameSpaceUri + "}" + funcLocalName +
+ ", doesn't match the declared function result type " +
+ funcAsAttrStrVal + ".", srcLocator);
+ }
+ }
+ catch (TransformerException ex) {
+ throw new TransformerException("XPTY0004 : An xsl:function call result for function {" + funcNameSpaceUri + "}" + funcLocalName +
+ ", doesn't match the declared function result type " +
+ funcAsAttrStrVal + ".", srcLocator);
+ }
+ }
+
+ return funcResultConvertedVal;
+ }
}
else {
throw new TransformerException("XPTY0004 : An xsl:function call result for function {" + funcNameSpaceUri + "}" + funcLocalName +
@@ -465,9 +497,8 @@ public class ElemFunction extends ElemTemplate
funcAsAttrStrVal + ".", srcLocator);
}
}
- else if (((XslTransformSharedDatastore.m_xpathNamedFunctionRefSequence).size() > 0) && !ElemVariable.m_isXPathNamedFunctionRefSequenceVar) {
- SequenceTypeData seqExpectedTypeData = getSequenceTypeDataFromSeqTypeStr(funcAsAttrStrVal, xctxt, srcLocator);
-
+ else if (((XslTransformSharedDatastore.m_xpathNamedFunctionRefSequence).size() > 0) &&
+ !ElemVariable.m_isXPathNamedFunctionRefSequenceVar) {
int funcItemSeqSize = (XslTransformSharedDatastore.m_xpathNamedFunctionRefSequence).size();
SequenceTypeFunctionTest sequenceTypeFunctionTest = seqExpectedTypeData.getSequenceTypeFunctionTest();
@@ -1095,7 +1126,7 @@ public class ElemFunction extends ElemTemplate
}
if (argConvertedVal == null) {
- argConvertedVal = SequenceTypeSupport.castXDMValueToAnotherType(srcValue, paramAsAttrStrVal, null, xctxt, prefixTable);
+ argConvertedVal = SequenceTypeSupport.castXdmValueToAnotherType(srcValue, paramAsAttrStrVal, null, xctxt, prefixTable);
}
if (argConvertedVal == null) {
diff --git a/src/main/java/org/apache/xalan/templates/ElemSequence.java b/src/main/java/org/apache/xalan/templates/ElemSequence.java
index a6a97bd41..d6996144c 100644
--- a/src/main/java/org/apache/xalan/templates/ElemSequence.java
+++ b/src/main/java/org/apache/xalan/templates/ElemSequence.java
@@ -38,9 +38,11 @@ import org.apache.xpath.axes.LocPathIterator;
import org.apache.xpath.axes.SelfIteratorNoPredicate;
import org.apache.xpath.compiler.XPathParser;
import org.apache.xpath.composite.SequenceTypeData;
+import org.apache.xpath.composite.XPathArrayConstructor;
import org.apache.xpath.composite.XPathNamedFunctionReference;
import org.apache.xpath.composite.XPathSequenceConstructor;
import org.apache.xpath.functions.Function;
+import org.apache.xpath.functions.XPathDynamicFunctionCall;
import org.apache.xpath.functions.XSL3ConstructorOrExtensionFunction;
import org.apache.xpath.functions.XSL3FunctionService;
import org.apache.xpath.objects.ResultSequence;
@@ -49,6 +51,7 @@ import org.apache.xpath.objects.XMLNodeCursorImpl;
import org.apache.xpath.objects.XNodeSetForDOM;
import org.apache.xpath.objects.XNumber;
import org.apache.xpath.objects.XObject;
+import org.apache.xpath.objects.XPathArray;
import org.apache.xpath.objects.XPathInlineFunction;
import org.apache.xpath.objects.XPathMap;
import org.apache.xpath.objects.XRTreeFrag;
@@ -290,7 +293,7 @@ public class ElemSequence extends ElemTemplateElement
Expression xpathExpr = xpathObj.getExpression();
if (xpathExpr instanceof NodeTest) {
ElemFunction elemFunction = XslTransformEvaluationHelper.getElemFunctionFromNodeTestExpression(
- (NodeTest)xpathExpr, transformer, srcLocator);
+ (NodeTest)xpathExpr, transformer, srcLocator);
if (elemFunction != null) {
XPathNamedFunctionReference xpathNamedFunctionReference = new XPathNamedFunctionReference();
xpathNamedFunctionReference.setXslStylesheetFunction(elemFunction, getStylesheetRoot());
@@ -309,6 +312,12 @@ public class ElemSequence extends ElemTemplateElement
}
}
}
+ else if (selectExpression instanceof XPathArrayConstructor) {
+ XPathArrayConstructor xpathArrayCons = (XPathArrayConstructor)selectExpression;
+ XslTransformSharedDatastore.m_xpathArray = (XPathArray)(xpathArrayCons.execute(xctxt));
+
+ return;
+ }
if (selectExpression instanceof XSL3ConstructorOrExtensionFunction) {
XSL3ConstructorOrExtensionFunction xpathFunc = (XSL3ConstructorOrExtensionFunction)selectExpression;
@@ -322,9 +331,15 @@ public class ElemSequence extends ElemTemplateElement
}
}
else if ((selectExpression instanceof Function) || (selectExpression instanceof SimpleMapOperator) ||
- (selectExpression instanceof Range)) {
- xslSequenceVal = selectExpression.execute(xctxt);
- }
+ (selectExpression instanceof Range) ||
+ (selectExpression instanceof XPathDynamicFunctionCall)) {
+ xslSequenceVal = m_selectPattern.execute(xctxt, sourceNode, this);
+ if (xslSequenceVal instanceof XPathArray) {
+ XslTransformSharedDatastore.m_xpathArray = (XPathArray)xslSequenceVal;
+
+ return;
+ }
+ }
else if (selectExpression instanceof Operation) {
Operation xpathOperation = (Operation)selectExpression;
XObject leftOperand = (xpathOperation.getLeftOperand()).execute(xctxt);
@@ -383,8 +398,7 @@ public class ElemSequence extends ElemTemplateElement
xpathIndexExprStr = XslTransformEvaluationHelper.replaceNsUrisWithPrefixesOnXPathStr(xpathIndexExprStr, prefixTable);
}
- XPath xpathIndexObj = new XPath(xpathIndexExprStr, srcLocator, xctxt.getNamespaceContext(),
- XPath.SELECT, null);
+ XPath xpathIndexObj = new XPath(xpathIndexExprStr, srcLocator, xctxt.getNamespaceContext(), XPath.SELECT, null);
if (m_vars != null) {
xpathIndexObj.fixupVariables(m_vars, m_globals_size);
@@ -545,7 +559,7 @@ public class ElemSequence extends ElemTemplateElement
* values that may be based on some other property that
* depends on recomposition.
*/
- public void compose(StylesheetRoot sroot) throws TransformerException {
+ public void compose(StylesheetRoot sroot) throws TransformerException {
StylesheetRoot.ComposeState cstate = sroot.getComposeState();
java.util.Vector vnames = cstate.getVariableNames();
diff --git a/src/main/java/org/apache/xalan/templates/ElemVariable.java b/src/main/java/org/apache/xalan/templates/ElemVariable.java
index 3b9670107..0024dab4b 100644
--- a/src/main/java/org/apache/xalan/templates/ElemVariable.java
+++ b/src/main/java/org/apache/xalan/templates/ElemVariable.java
@@ -429,7 +429,7 @@ public class ElemVariable extends ElemTemplateElement
if (evalResult == null) {
String xpathPatternStr = m_selectPattern.getPatternString();
throw new TransformerException("XTTE0570 : The supplied value " + xpathPatternStr + ", doesn't "
- + "match the expected sequence type " + m_asAttr + ".", srcLocator);
+ + "match an expected XPath sequence type " + m_asAttr + ".", srcLocator);
}
}
else if (m_asAttr != null && (XSL3FunctionService.XS_VALID_TRUE).equals(evalResultStrValue)) {
@@ -442,7 +442,7 @@ public class ElemVariable extends ElemTemplateElement
else {
String xpathPatternStr = m_selectPattern.getPatternString();
throw new TransformerException("XTTE0570 : The supplied value " + xpathPatternStr + ", doesn't "
- + "match the expected sequence type " + m_asAttr + ".", srcLocator);
+ + "match an expected XPath sequence type " + m_asAttr + ".", srcLocator);
}
}
else if (m_asAttr == null && (XSL3FunctionService.XS_VALID_TRUE).equals(evalResultStrValue)) {
@@ -463,11 +463,11 @@ public class ElemVariable extends ElemTemplateElement
(evalResult instanceof XSAnyType) ||
(evalResult instanceof XMLNodeCursorImpl)) {
if (m_asAttr != null) {
- evalResult = SequenceTypeSupport.castXdmValueToAnotherType(evalResult, m_asAttr, null, xctxt);
- if (evalResult == null) {
- throw new javax.xml.transform.TransformerException("XTTE0570 : variable's computed value is not of "
- + "an expected type " + m_asAttr +".", srcLocator);
- }
+ evalResult = SequenceTypeSupport.castXdmValueToAnotherType(evalResult, m_asAttr, null, xctxt);
+ if (evalResult == null) {
+ throw new javax.xml.transform.TransformerException("XTTE0570 : An xsl:variable's value is not of an expected "
+ + "XPath sequence type " + m_asAttr +".", srcLocator);
+ }
}
return evalResult;
@@ -479,8 +479,8 @@ public class ElemVariable extends ElemTemplateElement
if (m_asAttr != null) {
evalResult = SequenceTypeSupport.castXdmValueToAnotherType(evalResult, m_asAttr, null, xctxt);
if (evalResult == null) {
- throw new javax.xml.transform.TransformerException("XTTE0570 : variable's computed value is not of "
- + "an expected type " + m_asAttr +".", srcLocator);
+ throw new javax.xml.transform.TransformerException("XTTE0570 : An xsl:variable's value is not of an expected "
+ + "XPath sequence type " + m_asAttr +".", srcLocator);
}
}
@@ -492,8 +492,8 @@ public class ElemVariable extends ElemTemplateElement
if (m_asAttr != null) {
evalResult = SequenceTypeSupport.castXdmValueToAnotherType(evalResult, m_asAttr, null, xctxt);
if (evalResult == null) {
- throw new javax.xml.transform.TransformerException("XTTE0570 : variable's computed value is not of "
- + "an expected type " + m_asAttr +".", srcLocator);
+ throw new javax.xml.transform.TransformerException("XTTE0570 : An xsl:variable's value is not of an expected "
+ + "XPath sequence type " + m_asAttr +".", srcLocator);
}
}
@@ -515,8 +515,7 @@ public class ElemVariable extends ElemTemplateElement
if (m_asAttr != null) {
evalResult = SequenceTypeSupport.castXdmValueToAnotherType(evalResult, m_asAttr, null, xctxt);
if (evalResult == null) {
- throw new javax.xml.transform.TransformerException("XTTE0570 : variable's computed value is not of "
- + "an expected type " + m_asAttr +".", srcLocator);
+ throw new javax.xml.transform.TransformerException("XTTE0570 : An xsl:variable's value is not of an expected XPath sequence type " + m_asAttr +".", srcLocator);
}
}
@@ -648,9 +647,8 @@ public class ElemVariable extends ElemTemplateElement
resultSeq.add(evalResult);
}
else {
- throw new javax.xml.transform.TransformerException("XPTY0004 : an index value used with an xdm "
- + "sequence reference, is not an integer.",
- srcLocator);
+ throw new javax.xml.transform.TransformerException("XPTY0004 : An index value used with an xdm "
+ + "sequence reference, is not an integer.", srcLocator);
}
}
else if (seqIndexEvalResult instanceof XSNumericType) {
@@ -661,15 +659,13 @@ public class ElemVariable extends ElemTemplateElement
resultSeq.add(evalResult);
}
else {
- throw new javax.xml.transform.TransformerException("XPTY0004 : an index value used with an xdm "
- + "sequence reference, is not an integer.",
- srcLocator);
+ throw new javax.xml.transform.TransformerException("XPTY0004 : An index value used with an xdm "
+ + "sequence reference, is not an integer.", srcLocator);
}
}
else {
- throw new javax.xml.transform.TransformerException("XPTY0004 : an index value used with an xdm sequence "
- + "reference, is not numeric.",
- srcLocator);
+ throw new javax.xml.transform.TransformerException("XPTY0004 : An index value used with an xdm "
+ + "sequence reference, is not numeric.", srcLocator);
}
}
}
@@ -852,7 +848,7 @@ public class ElemVariable extends ElemTemplateElement
XslTransformSharedDatastore.m_xpathInlineFunction = null;
}
else {
- throw new TransformerException("XTTE0570 : The supplied XDM item doesn't match an XPath sequence type " + m_asAttr + ".", srcLocator);
+ throw new TransformerException("XTTE0570 : The supplied xdm item doesn't match an XPath sequence type " + m_asAttr + ".", srcLocator);
}
}
else if (XslTransformSharedDatastore.m_xpathArray != null) {
@@ -861,7 +857,7 @@ public class ElemVariable extends ElemTemplateElement
XslTransformSharedDatastore.m_xpathArray = null;
}
else {
- throw new TransformerException("XTTE0570 : The supplied XDM item doesn't match an XPath sequence type " + m_asAttr + ".", srcLocator);
+ throw new TransformerException("XTTE0570 : The supplied xdm item doesn't match an XPath sequence type " + m_asAttr + ".", srcLocator);
}
}
else if (XslTransformSharedDatastore.m_xpathMap != null) {
@@ -870,7 +866,7 @@ public class ElemVariable extends ElemTemplateElement
XslTransformSharedDatastore.m_xpathMap = null;
}
else {
- throw new TransformerException("XTTE0570 : The supplied XDM item doesn't match an XPath sequence type " + m_asAttr + ".", srcLocator);
+ throw new TransformerException("XTTE0570 : The supplied xdm item doesn't match an XPath sequence type " + m_asAttr + ".", srcLocator);
}
}
else if (XslTransformSharedDatastore.m_xslDocumentEvaluationResult != null) {
@@ -879,7 +875,7 @@ public class ElemVariable extends ElemTemplateElement
XslTransformSharedDatastore.m_xslDocumentEvaluationResult = null;
}
else {
- throw new TransformerException("XTTE0570 : The supplied XDM item doesn't match an XPath sequence type " + m_asAttr + ".", srcLocator);
+ throw new TransformerException("XTTE0570 : The supplied xdm item doesn't match an XPath sequence type " + m_asAttr + ".", srcLocator);
}
}
else if ((XslTransformSharedDatastore.m_xpathNamedFunctionRefSequence).size() > 0) {
@@ -924,7 +920,7 @@ public class ElemVariable extends ElemTemplateElement
m_isXPathNamedFunctionRefSequenceVar = true;
}
else {
- throw new TransformerException("XTTE0570 : The supplied XDM item doesn't match an XPath sequence type " + m_asAttr + ".", srcLocator);
+ throw new TransformerException("XTTE0570 : The supplied xdm item doesn't match an XPath sequence type " + m_asAttr + ".", srcLocator);
}
}
else if (var instanceof XNodeSetForDOM) {
@@ -972,7 +968,7 @@ public class ElemVariable extends ElemTemplateElement
boolean bool1 = errMesg.contains("value");
boolean bool2 = errMesg.contains("cannot be cast to a type");
if (bool1 && bool2) {
- errMesg = errMesg + " An error occured, while evaluating an XDM map's key or value. The corresponding "
+ errMesg = errMesg + " An error occured, while evaluating an xdm map's key or value. The corresponding "
+ "XPath sequence type is specified as " + m_asAttr + ".";
throw new TransformerException(errMesg, srcLocator);
}
@@ -990,7 +986,7 @@ public class ElemVariable extends ElemTemplateElement
boolean bool1 = errMesg.contains("value");
boolean bool2 = errMesg.contains("cannot be cast to a type");
if (bool1 && bool2) {
- errMesg = errMesg + " An error occured, while evaluating an XDM array item. The corresponding "
+ errMesg = errMesg + " An error occured, while evaluating an xdm array item. The corresponding "
+ "XPath sequence type is specified as " + m_asAttr + ".";
throw new TransformerException(errMesg, srcLocator);
}
@@ -1006,7 +1002,7 @@ public class ElemVariable extends ElemTemplateElement
else {
var = SequenceTypeSupport.castXdmValueToAnotherType(var, m_asAttr, null, xctxt);
if (var == null) {
- throw new TransformerException("XTTE0570 : The supplied XDM item doesn't match an XPath sequence type " + m_asAttr + ".", srcLocator);
+ throw new TransformerException("XTTE0570 : The supplied xdm item doesn't match an XPath sequence type " + m_asAttr + ".", srcLocator);
}
}
}
@@ -1021,14 +1017,14 @@ public class ElemVariable extends ElemTemplateElement
}
}
else {
- throw new TransformerException("XTTE0570 : The supplied XDM item doesn't match an XPath sequence type " + m_asAttr + ".", srcLocator);
+ throw new TransformerException("XTTE0570 : The supplied xdm item doesn't match an XPath sequence type " + m_asAttr + ".", srcLocator);
}
}
else {
try {
var = SequenceTypeSupport.castXdmValueToAnotherType(var, m_asAttr, null, xctxt);
if (var == null) {
- throw new TransformerException("XTTE0570 : The supplied XDM item doesn't match an XPath sequence type " + m_asAttr + ".", srcLocator);
+ throw new TransformerException("XTTE0570 : The supplied xdm item doesn't match an XPath sequence type " + m_asAttr + ".", srcLocator);
}
}
catch (TransformerException ex) {
diff --git a/src/main/java/org/apache/xalan/xslt/util/XslTransformSharedDatastore.java b/src/main/java/org/apache/xalan/xslt/util/XslTransformSharedDatastore.java
index 660e23af6..8333ff9a3 100644
--- a/src/main/java/org/apache/xalan/xslt/util/XslTransformSharedDatastore.java
+++ b/src/main/java/org/apache/xalan/xslt/util/XslTransformSharedDatastore.java
@@ -41,20 +41,19 @@ public class XslTransformSharedDatastore {
public static String m_xslSystemId;
/**
- * This class field represents, XDM function items that
+ * This class field represents, xdm function items that
* are returned from XSL stylesheet xsl:function calls.
*/
public static XPathInlineFunction m_xpathInlineFunction;
/**
- * This class field represents, XDM array values
- * returned from evaluation of xsl:evaluate
- * instruction.
+ * This class field represents, xdm array values returned from
+ * evaluation of xsl:sequence & xsl:evaluate instruction.
*/
public static XPathArray m_xpathArray;
/**
- * This class field represents, XDM map values
+ * This class field represents, xdm map values
* returned from evaluation of xsl:evaluate
* instruction.
*/
diff --git a/src/main/java/org/apache/xpath/compiler/XPathParser.java b/src/main/java/org/apache/xpath/compiler/XPathParser.java
index a5ffb078f..4be126c7d 100644
--- a/src/main/java/org/apache/xpath/compiler/XPathParser.java
+++ b/src/main/java/org/apache/xpath/compiler/XPathParser.java
@@ -6238,8 +6238,9 @@ public class XPathParser
* XPath parse of sequence type expressions.
*/
private XPathSequenceTypeExpr SequenceTypeExpr(boolean isXPathInlineFunctionParse)
- throws javax.xml.transform.TransformerException {
- int opPos = 0;
+ throws javax.xml.transform.TransformerException {
+
+ int opPos = 0;
if (!isXPathInlineFunctionParse) {
opPos = m_ops.getOp(OpMap.MAPINDEX_LENGTH);
@@ -6317,10 +6318,10 @@ public class XPathParser
}
}
else if (tokenIs("map")) {
- parseXdmMapSequenceType(xpathSequenceTypeExpr);
+ parseXdmMapSequenceType(xpathSequenceTypeExpr, false);
}
else if (tokenIs("array")) {
- parseXdmArraySequenceType(xpathSequenceTypeExpr);
+ parseXdmArraySequenceType(xpathSequenceTypeExpr, false);
}
else if (tokenIs(XMLConstants.W3C_XML_SCHEMA_NS_URI)) {
parseXdmBuiltInXmlSchemaSequenceType(xpathSequenceTypeExpr, isXPathInlineFunctionParse);
@@ -6830,7 +6831,7 @@ public class XPathParser
/**
* XPath parse of map sequence type expressions.
*/
- private void parseXdmMapSequenceType(XPathSequenceTypeExpr xpathSequenceTypeExpr) throws TransformerException {
+ private void parseXdmMapSequenceType(XPathSequenceTypeExpr xpathSequenceTypeExpr, boolean isNested) throws TransformerException {
SequenceTypeMapTest sequenceTypeMapTest = null;
@@ -6856,10 +6857,8 @@ public class XPathParser
while ((m_token != null) && !tokenIs(',')) {
if (tokenIs(XMLConstants.W3C_XML_SCHEMA_NS_URI)) {
consumeExpected(XMLConstants.W3C_XML_SCHEMA_NS_URI);
- consumeExpected(':');
-
- populateSequenceTypeData(keySequenceTypeData);
-
+ consumeExpected(':');
+ populateSequenceTypeData(keySequenceTypeData);
nextToken();
}
}
@@ -6870,13 +6869,27 @@ public class XPathParser
if (tokenIs(XMLConstants.W3C_XML_SCHEMA_NS_URI)) {
consumeExpected(XMLConstants.W3C_XML_SCHEMA_NS_URI);
consumeExpected(':');
-
populateSequenceTypeData(valueSequenceTypeData);
-
nextToken();
consumeExpected(')');
- }
+ }
+ else if (tokenIs("map")) {
+ XPathSequenceTypeExpr xpathSequenceTypeExpr2 = new XPathSequenceTypeExpr();
+ parseXdmMapSequenceType(xpathSequenceTypeExpr2, true);
+ SequenceTypeMapTest seqTypeMapTest2 = xpathSequenceTypeExpr2.getSequenceTypeMapTest();
+ valueSequenceTypeData.setSequenceTypeMapTest(seqTypeMapTest2);
+ }
+ else if (tokenIs("array")) {
+ XPathSequenceTypeExpr xpathSequenceTypeExpr2 = new XPathSequenceTypeExpr();
+ parseXdmArraySequenceType(xpathSequenceTypeExpr2, true);
+ SequenceTypeArrayTest seqTypeArrayTest2 = xpathSequenceTypeExpr2.getSequenceTypeArrayTest();
+ valueSequenceTypeData.setSequenceTypeArrayTest(seqTypeArrayTest2);
+ }
}
+
+ if (isNested) {
+ consumeExpected(')');
+ }
sequenceTypeMapTest.setKeySequenceTypeData(keySequenceTypeData);
sequenceTypeMapTest.setValueSequenceTypeData(valueSequenceTypeData);
@@ -6888,7 +6901,7 @@ public class XPathParser
/**
* XPath parse of array sequence type expressions.
*/
- private void parseXdmArraySequenceType(XPathSequenceTypeExpr xpathSequenceTypeExpr) throws TransformerException {
+ private void parseXdmArraySequenceType(XPathSequenceTypeExpr xpathSequenceTypeExpr, boolean isNested) throws TransformerException {
SequenceTypeArrayTest sequenceTypeArrayTest = null;
@@ -6920,7 +6933,10 @@ public class XPathParser
}
}
- consumeExpected(')');
+ consumeExpected(')');
+ if (isNested) {
+ consumeExpected(')');
+ }
sequenceTypeArrayTest.setArrayItemTypeInfo(arrayItemSequenceType);
xpathSequenceTypeExpr.setSequenceTypeArrayTest(sequenceTypeArrayTest);
diff --git a/src/main/java/org/apache/xpath/composite/SequenceTypeSupport.java b/src/main/java/org/apache/xpath/composite/SequenceTypeSupport.java
index c3f945fae..cba6735e1 100644
--- a/src/main/java/org/apache/xpath/composite/SequenceTypeSupport.java
+++ b/src/main/java/org/apache/xpath/composite/SequenceTypeSupport.java
@@ -369,7 +369,7 @@ public class SequenceTypeSupport {
*
* @throws TransformerException
*/
- public static XObject castXDMValueToAnotherType(XObject srcValue, String sequenceTypeXPathExprStr,
+ public static XObject castXdmValueToAnotherType(XObject srcValue, String sequenceTypeXPathExprStr,
SequenceTypeData seqExpectedTypeDataInp,
XPathContext xctxt, List prefixTable) throws TransformerException {
XObject result = null;
@@ -1240,13 +1240,11 @@ public class SequenceTypeSupport {
XObject mapKeyValTypeCheckResult = SequenceTypeSupport.castXdmValueToAnotherType(mapKey, null, keySeqTypeData, xctxt);
String mapSequenceTypeStr = (sequenceTypeXPathExprStr != null) ? sequenceTypeXPathExprStr : "";
if (mapKeyValTypeCheckResult == null) {
- throw new TransformerException("XPTY0004 : XPath map entry key's [entry's key name: '" + keyStrVal + "'] value doesn't conform to the key's expected "
- + "type [map's sequenceType is '" + mapSequenceTypeStr + "'].");
+ throw new TransformerException("XPTY0004 : An XPath map entry with key '" + keyStrVal + "', doesn't have a value of specified XPath sequence type.");
}
XObject mapEntryValTypeCheckResult = SequenceTypeSupport.castXdmValueToAnotherType(mapEntry, null, valueSeqTypeData, xctxt);
if (mapEntryValTypeCheckResult == null) {
- throw new TransformerException("XPTY0004 : XPath map entry's [entry's key name: '" + keyStrVal + "'] value doesn't conform to the map entry value's expected "
- + "type [map's sequenceType is '" + mapSequenceTypeStr + "'].");
+ throw new TransformerException("XPTY0004 : An XPath map entry with key '" + keyStrVal + "', doesn't have a value of specified XPath sequence type.");
}
}
@@ -1275,7 +1273,7 @@ public class SequenceTypeSupport {
String arrayItemSequenceTypeStr = (sequenceTypeXPathExprStr != null) ? sequenceTypeXPathExprStr : "";
if (arrayItemTypeCheckResult == null) {
throw new TransformerException("XPTY0004 : One or more, of XPath array's item doesn't conform to array item's expected "
- + "type '" + arrayItemSequenceTypeStr + "'.");
+ + "type '" + arrayItemSequenceTypeStr + "'.");
}
}
diff --git a/src/main/java/org/apache/xpath/functions/XSL3FunctionService.java b/src/main/java/org/apache/xpath/functions/XSL3FunctionService.java
index dda2f25a9..1182181d8 100644
--- a/src/main/java/org/apache/xpath/functions/XSL3FunctionService.java
+++ b/src/main/java/org/apache/xpath/functions/XSL3FunctionService.java
@@ -214,20 +214,23 @@ public class XSL3FunctionService {
List<String> funcExtArgStrList = null;
for (int idx = 0; idx < argVector.size(); idx++) {
Expression argExpr = (Expression)(argVector.elementAt(idx));
- if (!(argExpr instanceof XPathExprFuncCallExtendedArg)) {
+ if (argExpr instanceof XPathExprFuncCallExtendedArg) {
+ XPathExprFuncCallExtendedArg xpathExprFuncCallExtendedArg = (XPathExprFuncCallExtendedArg)argExpr;
+ funcExtArgStrList = xpathExprFuncCallExtendedArg.getFunctionArgXPathExprStrList();
+ }
+ else {
XObject xslFuncArgVal = null;
- if (!(argExpr instanceof XPathNamedFunctionReference)) {
- xslFuncArgVal = argExpr.execute(xctxt);
+ if (argExpr instanceof XPathNamedFunctionReference) {
+ xslFuncArgVal = (XPathNamedFunctionReference)argExpr;
+ }
+ else if ((argExpr instanceof SelfIteratorNoPredicate) && (xctxt.getXPath3ContextItem() != null)) {
+ xslFuncArgVal = xctxt.getXPath3ContextItem();
}
else {
- xslFuncArgVal = (XPathNamedFunctionReference)argExpr;
+ xslFuncArgVal = argExpr.execute(xctxt);
}
xslFuncArgSequence.add(xslFuncArgVal);
- xslFuncArgCount++;
- }
- else {
- XPathExprFuncCallExtendedArg xpathExprFuncCallExtendedArg = (XPathExprFuncCallExtendedArg)argExpr;
- funcExtArgStrList = xpathExprFuncCallExtendedArg.getFunctionArgXPathExprStrList();
+ xslFuncArgCount++;
}
}
@@ -318,8 +321,8 @@ public class XSL3FunctionService {
}
evalResult = evaluateXPathInlineFunction(xpathInlineFunction, xpathInlineFuncArgList,
- xctxt, prefixTable, null, 0,
- ((Expression)xpathExpr).getXPathVarList(), null);
+ xctxt, prefixTable, null, 0,
+ ((Expression)xpathExpr).getXPathVarList(), null);
}
return evalResult;
diff --git a/src/main/java/org/apache/xpath/operations/Variable.java b/src/main/java/org/apache/xpath/operations/Variable.java
index 8450c0cec..00a02b4e3 100644
--- a/src/main/java/org/apache/xpath/operations/Variable.java
+++ b/src/main/java/org/apache/xpath/operations/Variable.java
@@ -271,7 +271,7 @@ public class Variable extends Expression implements PathComponent
}
catch (javax.xml.transform.TransformerException ex) {
java.lang.String exceptionMesg = ex.getMessage();
- if ((m_qname == null) || ((exceptionMesg != null) && exceptionMesg.startsWith("XTDE0050 : No value supplied"))) {
+ if ((m_qname == null) || ((exceptionMesg != null) && (exceptionMesg.startsWith("XTDE0050") || exceptionMesg.startsWith("XPTY")))) {
throw ex;
}
else if (XslTransformSharedDatastore.m_xpathNodeCombiningExprRhsStrBuff != null) {
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_as-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_as-test-set_result.xml
index 47ae99ccd..bf2524355 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_as-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_as-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-24T11:40:48Z" fail="53" name="as" pass="51" skipped="4" statusUnknown="1" totalRun="105">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-25T11:31:33Z" fail="53" name="as" pass="51" skipped="4" statusUnknown="1" totalRun="105">
<testResult status="pass" testName="as-0101"/>
<testResult status="pass" testName="as-0102"/>
<testResult status="pass" testName="as-0103"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_avt-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_avt-test-set_result.xml
index 14a9688d9..a8c9c0431 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_avt-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_avt-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-24T11:40:52Z" fail="14" name="avt" pass="21" skipped="0" statusUnknown="0" totalRun="35">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-25T11:31:34Z" fail="14" name="avt" pass="21" skipped="0" statusUnknown="0" totalRun="35">
<testResult status="pass" testName="avt-0101"/>
<testResult status="fail" testName="avt-0201"/>
<testResult status="pass" testName="avt-0202"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_match-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_match-test-set_result.xml
index 03ddfc719..26e9b7c06 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_match-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_match-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-24T11:40:53Z" fail="61" name="match" pass="67" skipped="8" statusUnknown="1" totalRun="129">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-25T11:31:34Z" fail="61" name="match" pass="67" skipped="8" statusUnknown="1" totalRun="129">
<testResult status="pass" testName="match-001"/>
<testResult status="pass" testName="match-002"/>
<testResult status="pass" testName="match-003"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_select-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_select-test-set_result.xml
index 641470437..6114b8ee3 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_select-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_select-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-24T11:40:56Z" fail="5" name="select" pass="19" skipped="0" statusUnknown="1" totalRun="25">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-25T11:31:34Z" fail="5" name="select" pass="19" skipped="0" statusUnknown="1" totalRun="25">
<testResult status="pass" testName="select-0101"/>
<testResult status="pass" testName="select-0102"/>
<testResult status="pass" testName="select-0201"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_xpath-default-namespace-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_xpath-default-namespace-test-set_result.xml
index c527386de..49eba1ca2 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_xpath-default-namespace-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_xpath-default-namespace-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-24T11:43:13Z" fail="17" name="xpath-default-namespace" pass="9" skipped="0" statusUnknown="0" totalRun="26">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-25T11:33:25Z" fail="17" name="xpath-default-namespace" pass="9" skipped="0" statusUnknown="0" totalRun="26">
<testResult status="pass" testName="xpath-default-namespace-0101"/>
<testResult status="fail" testName="xpath-default-namespace-0102"/>
<testResult status="pass" testName="xpath-default-namespace-0103"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/decl/_attribute-set-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/decl/_attribute-set-test-set_result.xml
index 4dc455274..398852375 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/decl/_attribute-set-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/decl/_attribute-set-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-24T11:41:15Z" fail="8" name="attribute-set" pass="41" skipped="1" statusUnknown="0" totalRun="49">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-25T11:31:41Z" fail="8" name="attribute-set" pass="41" skipped="1" statusUnknown="0" totalRun="49">
<testResult status="pass" testName="attribute-set-0101"/>
<testResult status="fail" testName="attribute-set-0102">
<outResult/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/decl/_character-map-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/decl/_character-map-test-set_result.xml
index 54259f2f3..223f5b6fe 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/decl/_character-map-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/decl/_character-map-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-24T11:41:15Z" fail="12" name="character-map" pass="15" skipped="1" statusUnknown="1" totalRun="28">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-25T11:31:41Z" fail="12" name="character-map" pass="15" skipped="1" statusUnknown="1" totalRun="28">
<testResult status="pass" testName="character-map-001"/>
<testResult status="pass" testName="character-map-002"/>
<testResult status="pass" testName="character-map-003"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/decl/_function-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/decl/_function-test-set_result.xml
index 4fb8682be..236fef776 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/decl/_function-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/decl/_function-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-24T11:41:13Z" fail="27" name="function" pass="38" skipped="4" statusUnknown="1" totalRun="66">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-25T11:31:41Z" fail="25" name="function" pass="40" skipped="4" statusUnknown="1" totalRun="66">
<testResult status="fail" testName="function-0001">
<outResult/>
</testResult>
@@ -105,26 +105,14 @@
<testResult status="fail" testName="function-1025">
<outResult/>
</testResult>
- <testResult status="fail" testName="function-1026">
- <outResult>
- <errTrace>XPTY0004 : An xsl:function call argument at position 1 for function {http://xxx.com/}test, doesn't match the declared parameter type xs:integer.</errTrace>
- </outResult>
- </testResult>
+ <testResult status="fail" testName="function-1026"/>
<testResult status="fail" testName="function-1027">
<outResult/>
</testResult>
- <testResult status="fail" testName="function-1028">
- <outResult>
- <errTrace>XPTY0004 : An xsl:function call argument at position 1 for function {http://xxx.com/}test, doesn't match the declared parameter type xs:integer.</errTrace>
- </outResult>
- </testResult>
+ <testResult status="pass" testName="function-1028"/>
<testResult status="fail" testName="function-1029">
<outResult/>
</testResult>
- <testResult status="fail" testName="function-1030">
- <outResult>
- <errTrace>XPTY0004 : An xsl:function call argument at position 1 for function {http://xxx.com/}test, doesn't match the declared parameter type xs:integer.</errTrace>
- </outResult>
- </testResult>
+ <testResult status="pass" testName="function-1030"/>
<testResult testName="function-1031"/>
</testrun>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/decl/_variable-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/decl/_variable-test-set_result.xml
index fac0f8427..8b688aa4b 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/decl/_variable-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/decl/_variable-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-24T11:40:47Z" fail="3" name="variable" pass="16" skipped="0" statusUnknown="1" totalRun="20">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-25T11:31:32Z" fail="3" name="variable" pass="16" skipped="0" statusUnknown="1" totalRun="20">
<testResult status="pass" testName="variable-0101"/>
<testResult status="pass" testName="variable-0102"/>
<testResult status="pass" testName="variable-0103"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_axes-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_axes-test-set_result.xml
index b79972132..d487c0ec6 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_axes-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_axes-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-24T11:41:17Z" fail="20" name="axes" pass="181" skipped="0" statusUnknown="0" totalRun="201">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-25T11:31:42Z" fail="20" name="axes" pass="181" skipped="0" statusUnknown="0" totalRun="201">
<testResult status="pass" testName="axes-001"/>
<testResult status="pass" testName="axes-002"/>
<testResult status="pass" testName="axes-003"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_castable-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_castable-test-set_result.xml
index dbe817d38..08e48bb08 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_castable-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_castable-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-24T11:41:22Z" fail="5" name="castable" pass="4" skipped="0" statusUnknown="0" totalRun="9">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-25T11:31:42Z" fail="5" name="castable" pass="4" skipped="0" statusUnknown="0" totalRun="9">
<testResult status="pass" testName="castable-001"/>
<testResult status="pass" testName="castable-002"/>
<testResult status="pass" testName="castable-003"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_expression-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_expression-test-set_result.xml
index 9ffe76776..3e4714f36 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_expression-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_expression-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-24T11:41:22Z" fail="0" name="expression" pass="9" skipped="0" statusUnknown="1" totalRun="10">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-25T11:31:42Z" fail="0" name="expression" pass="9" skipped="0" statusUnknown="1" totalRun="10">
<testResult status="pass" testName="expression-0101"/>
<testResult status="pass" testName="expression-0301"/>
<testResult status="pass" testName="expression-0302"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_for-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_for-test-set_result.xml
index 4ff809019..faf907f72 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_for-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_for-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-24T11:41:23Z" fail="2" name="for" pass="1" skipped="0" statusUnknown="1" totalRun="4">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-25T11:31:42Z" fail="2" name="for" pass="1" skipped="0" statusUnknown="1" totalRun="4">
<testResult status="fail" testName="for-001"/>
<testResult status="fail" testName="for-002"/>
<testResult status="pass" testName="for-003"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_higher-order-functions-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_higher-order-functions-test-set_result.xml
index 13cb3de06..6138130d5 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_higher-order-functions-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_higher-order-functions-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-24T11:41:29Z" fail="6" name="higher-order-functions" pass="18" skipped="0" statusUnknown="1" totalRun="25">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-25T11:31:45Z" fail="6" name="higher-order-functions" pass="18" skipped="0" statusUnknown="1" totalRun="25">
<testResult status="pass" testName="higher-order-functions-001"/>
<testResult status="pass" testName="higher-order-functions-002"/>
<testResult status="pass" testName="higher-order-functions-003"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_math-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_math-test-set_result.xml
index 21351f1ab..e64361aac 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_math-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_math-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-24T11:41:24Z" fail="39" name="math" pass="108" skipped="0" statusUnknown="1" totalRun="148">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-25T11:31:44Z" fail="39" name="math" pass="108" skipped="0" statusUnknown="1" totalRun="148">
<testResult status="pass" testName="math-0101"/>
<testResult status="fail" testName="math-0102">
<outResult/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_nodetest-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_nodetest-test-set_result.xml
index cee7f3190..2078af1fd 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_nodetest-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_nodetest-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-24T11:41:28Z" fail="36" name="nodetest" pass="2" skipped="0" statusUnknown="0" totalRun="38">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-25T11:31:45Z" fail="36" name="nodetest" pass="2" skipped="0" statusUnknown="0" totalRun="38">
<testResult status="pass" testName="nodetest-001"/>
<testResult status="pass" testName="nodetest-002"/>
<testResult status="fail" testName="nodetest-003">
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_path-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_path-test-set_result.xml
index cc738deb7..42253057e 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_path-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_path-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-24T11:41:29Z" fail="3" name="path" pass="7" skipped="0" statusUnknown="0" totalRun="10">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-25T11:31:45Z" fail="3" name="path" pass="7" skipped="0" statusUnknown="0" totalRun="10">
<testResult status="pass" testName="path-001"/>
<testResult status="pass" testName="path-002"/>
<testResult status="pass" testName="path-003"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_predicate-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_predicate-test-set_result.xml
index 2f24bd403..a4ffbfbe4 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_predicate-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_predicate-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-24T11:41:30Z" fail="7" name="predicate" pass="50" skipped="0" statusUnknown="0" totalRun="57">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-25T11:31:46Z" fail="7" name="predicate" pass="50" skipped="0" statusUnknown="0" totalRun="57">
<testResult status="fail" testName="predicate-001"/>
<testResult status="fail" testName="predicate-002"/>
<testResult status="fail" testName="predicate-003"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_deep-equal-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_deep-equal-test-set_result.xml
index 5a813a224..5c75c8187 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_deep-equal-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_deep-equal-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-24T11:43:04Z" fail="0" name="deep-equal" pass="2" skipped="0" statusUnknown="0" totalRun="2">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-25T11:33:24Z" fail="0" name="deep-equal" pass="2" skipped="0" statusUnknown="0" totalRun="2">
<testResult status="pass" testName="deep-equal-001"/>
<testResult status="pass" testName="deep-equal-002"/>
</testrun>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_format-number-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_format-number-test-set_result.xml
index 780631343..144220b5f 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_format-number-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_format-number-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-24T11:43:10Z" fail="32" name="format-number" pass="38" skipped="4" statusUnknown="0" totalRun="70">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-25T11:33:25Z" fail="32" name="format-number" pass="38" skipped="4" statusUnknown="0" totalRun="70">
<testResult status="fail" testName="format-number-001"/>
<testResult status="fail" testName="format-number-002"/>
<testResult status="fail" testName="format-number-003"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_key-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_key-test-set_result.xml
index 2e63e8227..52f777f8c 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_key-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_key-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-24T11:43:09Z" fail="3" name="key" pass="21" skipped="0" statusUnknown="1" totalRun="25">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-25T11:33:24Z" fail="3" name="key" pass="21" skipped="0" statusUnknown="1" totalRun="25">
<testResult status="pass" testName="key-001"/>
<testResult status="fail" testName="key-002"/>
<testResult status="pass" testName="key-003"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_position-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_position-test-set_result.xml
index dba946fa1..2fe07331a 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_position-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_position-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-24T11:43:04Z" fail="11" name="position" pass="126" skipped="0" statusUnknown="1" totalRun="138">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-25T11:33:24Z" fail="11" name="position" pass="126" skipped="0" statusUnknown="1" totalRun="138">
<testResult status="pass" testName="position-0101"/>
<testResult status="fail" testName="position-0102"/>
<testResult status="fail" testName="position-0103">
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_root-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_root-test-set_result.xml
index a4054277f..9f33c4be1 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_root-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_root-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-24T11:43:09Z" fail="3" name="root" pass="7" skipped="0" statusUnknown="0" totalRun="10">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-25T11:33:24Z" fail="3" name="root" pass="7" skipped="0" statusUnknown="0" totalRun="10">
<testResult status="pass" testName="root-0101"/>
<testResult status="fail" testName="root-0102"/>
<testResult status="pass" testName="root-0103"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_analyze-string-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_analyze-string-test-set_result.xml
index 107e4b04d..914bc92cd 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_analyze-string-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_analyze-string-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-24T11:43:07Z" fail="17" name="analyze-string" pass="36" skipped="5" statusUnknown="0" totalRun="53">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-25T11:33:24Z" fail="17" name="analyze-string" pass="36" skipped="5" statusUnknown="0" totalRun="53">
<testResult status="pass" testName="analyze-string-001"/>
<testResult status="pass" testName="analyze-string-002"/>
<testResult status="pass" testName="analyze-string-003"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_apply-templates-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_apply-templates-test-set_result.xml
index 3d6d663df..60e249047 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_apply-templates-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_apply-templates-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-24T11:40:57Z" fail="25" name="apply-templates" pass="21" skipped="2" statusUnknown="0" totalRun="46">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-25T11:31:35Z" fail="25" name="apply-templates" pass="21" skipped="2" statusUnknown="0" totalRun="46">
<testResult status="fail" testName="apply-templates-001">
<outResult><?xml version="1.0" encoding="UTF-8"?>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_attribute-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_attribute-test-set_result.xml
index 3fe2d1bb4..a7661003e 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_attribute-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_attribute-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-24T11:41:01Z" fail="21" name="attribute" pass="8" skipped="0" statusUnknown="1" totalRun="30">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-25T11:31:36Z" fail="21" name="attribute" pass="8" skipped="0" statusUnknown="1" totalRun="30">
<testResult status="fail" testName="attribute-0001"/>
<testResult status="fail" testName="attribute-0002">
<outResult/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_call-template-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_call-template-test-set_result.xml
index 3d5da25e8..2e7b61499 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_call-template-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_call-template-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-24T11:41:02Z" fail="14" name="call-template" pass="27" skipped="1" statusUnknown="0" totalRun="41">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-25T11:31:36Z" fail="14" name="call-template" pass="27" skipped="1" statusUnknown="0" totalRun="41">
<testResult status="fail" testName="call-template-0001">
<outResult><?xml version="1.0" encoding="UTF-8"?><out/></outResult>
</testResult>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_choose-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_choose-test-set_result.xml
index 7adbd1fff..388691134 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_choose-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_choose-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-24T11:41:03Z" fail="6" name="choose" pass="17" skipped="0" statusUnknown="1" totalRun="24">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-25T11:31:36Z" fail="6" name="choose" pass="17" skipped="0" statusUnknown="1" totalRun="24">
<testResult status="pass" testName="choose-0101"/>
<testResult status="pass" testName="choose-0102"/>
<testResult status="fail" testName="choose-0103"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_copy-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_copy-test-set_result.xml
index 7c72cfc98..ea98adfc3 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_copy-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_copy-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-24T11:41:05Z" fail="43" name="copy" pass="16" skipped="0" statusUnknown="1" totalRun="60">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-25T11:31:37Z" fail="43" name="copy" pass="16" skipped="0" statusUnknown="1" totalRun="60">
<testResult status="fail" testName="copy-0101"/>
<testResult status="pass" testName="copy-0102"/>
<testResult status="fail" testName="copy-0103"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_element-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_element-test-set_result.xml
index 1b7183d49..110ef4a40 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_element-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_element-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-24T11:41:10Z" fail="18" name="element" pass="11" skipped="0" statusUnknown="0" totalRun="29">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-25T11:31:41Z" fail="18" name="element" pass="11" skipped="0" statusUnknown="0" totalRun="29">
<testResult status="fail" testName="element-0001">
<outResult/>
</testResult>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_for-each-group-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_for-each-group-test-set_result.xml
index f1413f43e..2c1a802d5 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_for-each-group-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_for-each-group-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-24T11:40:58Z" fail="26" name="for-each-group" pass="47" skipped="4" statusUnknown="1" totalRun="74">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-25T11:31:35Z" fail="26" name="for-each-group" pass="47" skipped="4" statusUnknown="1" totalRun="74">
<testResult status="pass" testName="for-each-group-001"/>
<testResult status="skipped" testName="for-each-group-002a" xsltVersion="xslt 2.0 only"/>
<testResult status="pass" testName="for-each-group-002"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_iterate-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_iterate-test-set_result.xml
index a4c7079b2..2e8089124 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_iterate-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_iterate-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-24T11:41:07Z" fail="29" name="iterate" pass="15" skipped="0" statusUnknown="0" totalRun="44">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-25T11:31:39Z" fail="29" name="iterate" pass="15" skipped="0" statusUnknown="0" totalRun="44">
<testResult status="pass" testName="iterate-001"/>
<testResult status="pass" testName="iterate-002"/>
<testResult status="pass" testName="iterate-003"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_sequence-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_sequence-test-set_result.xml
index 7bbb5c657..3fdad2674 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_sequence-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_sequence-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-24T11:41:08Z" fail="18" name="sequence" pass="8" skipped="0" statusUnknown="1" totalRun="27">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-25T11:31:39Z" fail="18" name="sequence" pass="8" skipped="0" statusUnknown="1" totalRun="27">
<testResult status="fail" testName="sequence-0101"/>
<testResult status="fail" testName="sequence-0102"/>
<testResult status="pass" testName="sequence-0103"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_sort-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_sort-test-set_result.xml
index d4334b116..babc92982 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_sort-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_sort-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-24T11:41:11Z" fail="44" name="sort" pass="36" skipped="0" statusUnknown="0" totalRun="80">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-25T11:31:41Z" fail="44" name="sort" pass="36" skipped="0" statusUnknown="0" totalRun="80">
<testResult status="pass" testName="sort-001"/>
<testResult status="pass" testName="sort-002"/>
<testResult status="fail" testName="sort-003"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_try-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_try-test-set_result.xml
index 8e540c947..ad58ee1c1 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_try-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_try-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-24T11:41:01Z" fail="26" name="try" pass="11" skipped="5" statusUnknown="0" totalRun="37">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-25T11:31:35Z" fail="26" name="try" pass="11" skipped="5" statusUnknown="0" totalRun="37">
<testResult status="pass" testName="try-001"/>
<testResult status="fail" testName="try-002">
<outResult/>
@@ -39,8 +39,8 @@
</testResult>
<testResult status="fail" testName="try-019">
<outResult>
- <errTrace>XPST0008 : Could not find variable with the name of {http://www.w3.org/2005/xqt-errors}value</errTrace>
- <errTrace>java.lang.NullPointerException</errTrace>
+ <errTrace>FODC0002 : The data from uri 'rubbish.xml' cannot be retrieved.</errTrace>
+ <errTrace>FODC0002 : The data from uri 'rubbish.xml' cannot be retrieved.</errTrace>
</outResult>
</testResult>
<testResult status="pass" testName="try-020"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_xsl-document-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_xsl-document-test-set_result.xml
index f71b72fa8..13f89adc6 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_xsl-document-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_xsl-document-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-24T11:43:13Z" fail="13" name="xsl-document" pass="12" skipped="0" statusUnknown="0" totalRun="25">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-25T11:33:25Z" fail="13" name="xsl-document" pass="12" skipped="0" statusUnknown="0" totalRun="25">
<testResult status="pass" testName="xsl-document-0101"/>
<testResult status="fail" testName="xsl-document-0102">
<outResult>
@@ -26,7 +26,7 @@
<testResult status="pass" testName="xsl-document-0403"/>
<testResult status="fail" testName="xsl-document-0404">
<outResult>
- <errTrace>XTTE0570 : The supplied XDM item doesn't match an XPath sequence type node().</errTrace>
+ <errTrace>XTTE0570 : The supplied xdm item doesn't match an XPath sequence type node().</errTrace>
</outResult>
</testResult>
<testResult status="fail" testName="xsl-document-0501">
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/misc/_regex-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/misc/_regex-test-set_result.xml
index 8c22c7ed1..f69995e8f 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/misc/_regex-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/misc/_regex-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-24T11:43:12Z" fail="12" name="regex" pass="33" skipped="0" statusUnknown="0" totalRun="45">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-25T11:33:25Z" fail="12" name="regex" pass="33" skipped="0" statusUnknown="0" totalRun="45">
<testResult status="pass" testName="regex-001"/>
<testResult status="fail" testName="regex-002"/>
<testResult status="pass" testName="regex-003"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/type/_boolean-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/type/_boolean-test-set_result.xml
index 1d20f4bf7..f2171b089 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/type/_boolean-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/type/_boolean-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-24T11:41:31Z" fail="24" name="boolean" pass="88" skipped="0" statusUnknown="0" totalRun="112">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-25T11:31:46Z" fail="24" name="boolean" pass="88" skipped="0" statusUnknown="0" totalRun="112">
<testResult status="pass" testName="boolean-001"/>
<testResult status="pass" testName="boolean-002"/>
<testResult status="pass" testName="boolean-003"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/type/_date-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/type/_date-test-set_result.xml
index a0e2f63d6..4b92d3613 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/type/_date-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/type/_date-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-24T11:41:37Z" fail="47" name="date" pass="37" skipped="0" statusUnknown="1" totalRun="85">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-25T11:31:46Z" fail="47" name="date" pass="37" skipped="0" statusUnknown="1" totalRun="85">
<testResult status="pass" testName="date-001"/>
<testResult status="pass" testName="date-002"/>
<testResult status="pass" testName="date-003"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/type/_node-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/type/_node-test-set_result.xml
index ef71f6d03..d1debc736 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/type/_node-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/type/_node-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-24T11:41:33Z" fail="17" name="node" pass="15" skipped="0" statusUnknown="0" totalRun="32">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-25T11:31:46Z" fail="17" name="node" pass="15" skipped="0" statusUnknown="0" totalRun="32">
<testResult status="pass" testName="node-0101"/>
<testResult status="pass" testName="node-0201"/>
<testResult status="fail" testName="node-0301">
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/type/_string-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/type/_string-test-set_result.xml
index bfe6265c8..0a33a56b0 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/type/_string-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/type/_string-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-24T11:41:34Z" fail="8" name="string" pass="128" skipped="0" statusUnknown="0" totalRun="136">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-07-25T11:31:46Z" fail="8" name="string" pass="128" skipped="0" statusUnknown="0" totalRun="136">
<testResult status="pass" testName="string-001"/>
<testResult status="pass" testName="string-002"/>
<testResult status="pass" testName="string-003"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/w3c_xslt3_testsuite_xalan-j_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/w3c_xslt3_testsuite_xalan-j_result.xml
index fdbccd9a2..97f9b3796 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/w3c_xslt3_testsuite_xalan-j_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/w3c_xslt3_testsuite_xalan-j_result.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<testResult dateTime="2025-07-24T11:43:28Z" desc="W3C XSLT 3.0 test suite results" fail="775" pass="1417" skipped="39" success="64.12%" totalRun="2210" xslt_processor="Xalan-J XSLT 3.0 development code">
+<testResult dateTime="2025-07-25T11:34:10Z" desc="W3C XSLT 3.0 test suite results" fail="773" pass="1419" skipped="39" success="64.21%" totalRun="2210" xslt_processor="Xalan-J XSLT 3.0 development code">
<attr>
<as fail="53" pass="51" skipped="4" success="48.57%" totalRun="105"/>
<avt fail="14" pass="21" skipped="0" success="60.0%" totalRun="35"/>
@@ -10,7 +10,7 @@
<decl>
<attribute-set fail="8" pass="41" skipped="1" success="83.67%" totalRun="49"/>
<character-map fail="12" pass="15" skipped="1" success="53.57%" totalRun="28"/>
- <function fail="27" pass="38" skipped="4" success="57.58%" totalRun="66"/>
+ <function fail="25" pass="40" skipped="4" success="60.61%" totalRun="66"/>
<variable fail="3" pass="16" skipped="0" success="80.0%" totalRun="20"/>
</decl>
<expr>
diff --git a/src/test/java/org/apache/xalan/tests/xpath3/FnParseJsonTests.java b/src/test/java/org/apache/xalan/tests/xpath3/FnParseJsonTests.java
index 1aaeaf45f..d0c0b9d52 100644
--- a/src/test/java/org/apache/xalan/tests/xpath3/FnParseJsonTests.java
+++ b/src/test/java/org/apache/xalan/tests/xpath3/FnParseJsonTests.java
@@ -96,5 +96,45 @@ public class FnParseJsonTests extends XslTransformTestsUtil {
runXslTransformAndAssertOutput(xmlFilePath, xslFilePath, goldFilePath, null);
}
+
+ @Test
+ public void xslFnParseJsonTest6() {
+ String xmlFilePath = XSL_TRANSFORM_INPUT_DIRPATH + "test4.xsl";
+ String xslFilePath = XSL_TRANSFORM_INPUT_DIRPATH + "test4.xsl";
+
+ String goldFilePath = XSL_TRANSFORM_GOLD_DIRPATH + "test4.out";
+
+ runXslTransformAndAssertOutput(xmlFilePath, xslFilePath, goldFilePath, null);
+ }
+
+ @Test
+ public void xslFnParseJsonTest7() {
+ String xmlFilePath = XSL_TRANSFORM_INPUT_DIRPATH + "test5.xsl";
+ String xslFilePath = XSL_TRANSFORM_INPUT_DIRPATH + "test5.xsl";
+
+ String goldFilePath = XSL_TRANSFORM_GOLD_DIRPATH + "test5.out";
+
+ runXslTransformAndAssertOutput(xmlFilePath, xslFilePath, goldFilePath, null);
+ }
+
+ @Test
+ public void xslFnParseJsonTest8() {
+ String xmlFilePath = XSL_TRANSFORM_INPUT_DIRPATH + "test6.xsl";
+ String xslFilePath = XSL_TRANSFORM_INPUT_DIRPATH + "test6.xsl";
+
+ String goldFilePath = XSL_TRANSFORM_GOLD_DIRPATH + "test6.out";
+
+ runXslTransformAndAssertOutput(xmlFilePath, xslFilePath, goldFilePath, null);
+ }
+
+ @Test
+ public void xslFnParseJsonTest9() {
+ String xmlFilePath = XSL_TRANSFORM_INPUT_DIRPATH + "test7.xsl";
+ String xslFilePath = XSL_TRANSFORM_INPUT_DIRPATH + "test7.xsl";
+
+ String goldFilePath = XSL_TRANSFORM_GOLD_DIRPATH + "test7.out";
+
+ runXslTransformAndAssertOutput(xmlFilePath, xslFilePath, goldFilePath, null);
+ }
}
diff --git a/src/test/java/org/apache/xalan/tests/xpath3/XPathArrayTests.java b/src/test/java/org/apache/xalan/tests/xpath3/XPathArrayTests.java
index fd6422674..7ec42087c 100644
--- a/src/test/java/org/apache/xalan/tests/xpath3/XPathArrayTests.java
+++ b/src/test/java/org/apache/xalan/tests/xpath3/XPathArrayTests.java
@@ -327,5 +327,25 @@ public class XPathArrayTests extends XslTransformTestsUtil {
runXslTransformAndAssertOutput(xmlFilePath, xslFilePath, goldFilePath, null);
}
+
+ @Test
+ public void xslArrayTest29() {
+ String xmlFilePath = XSL_TRANSFORM_INPUT_DIRPATH + "test29.xsl";
+ String xslFilePath = XSL_TRANSFORM_INPUT_DIRPATH + "test29.xsl";
+
+ String goldFilePath = XSL_TRANSFORM_GOLD_DIRPATH + "test29.out";
+
+ runXslTransformAndAssertOutput(xmlFilePath, xslFilePath, goldFilePath, null);
+ }
+
+ @Test
+ public void xslArrayTest30() {
+ String xmlFilePath = XSL_TRANSFORM_INPUT_DIRPATH + "test30.xsl";
+ String xslFilePath = XSL_TRANSFORM_INPUT_DIRPATH + "test30.xsl";
+
+ String goldFilePath = XSL_TRANSFORM_GOLD_DIRPATH + "test30.out";
+
+ runXslTransformAndAssertOutput(xmlFilePath, xslFilePath, goldFilePath, null);
+ }
}
diff --git a/src/test/resources/fn_parse_json/gold/test4.out b/src/test/resources/fn_parse_json/gold/test4.out
new file mode 100644
index 000000000..8dea126cc
--- /dev/null
+++ b/src/test/resources/fn_parse_json/gold/test4.out
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><result>a1 a2 a3</result>
diff --git a/src/test/resources/fn_parse_json/gold/test5.out b/src/test/resources/fn_parse_json/gold/test5.out
new file mode 100644
index 000000000..8dea126cc
--- /dev/null
+++ b/src/test/resources/fn_parse_json/gold/test5.out
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><result>a1 a2 a3</result>
diff --git a/src/test/resources/fn_parse_json/gold/test6.out b/src/test/resources/fn_parse_json/gold/test6.out
new file mode 100644
index 000000000..8dea126cc
--- /dev/null
+++ b/src/test/resources/fn_parse_json/gold/test6.out
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><result>a1 a2 a3</result>
diff --git a/src/test/resources/fn_parse_json/gold/test7.out b/src/test/resources/fn_parse_json/gold/test7.out
new file mode 100644
index 000000000..8dea126cc
--- /dev/null
+++ b/src/test/resources/fn_parse_json/gold/test7.out
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><result>a1 a2 a3</result>
diff --git a/src/test/resources/fn_parse_json/test2.json b/src/test/resources/fn_parse_json/test2.json
new file mode 100644
index 000000000..9a747c750
--- /dev/null
+++ b/src/test/resources/fn_parse_json/test2.json
@@ -0,0 +1,5 @@
+{
+ "a1" : [1, 2, 3],
+ "a2" : [4, 5, 6],
+ "a3" : [7, 8, 9]
+}
diff --git a/src/test/resources/fn_parse_json/test3.json b/src/test/resources/fn_parse_json/test3.json
new file mode 100644
index 000000000..34b7fa60c
--- /dev/null
+++ b/src/test/resources/fn_parse_json/test3.json
@@ -0,0 +1,17 @@
+{
+ "a1" : {
+ "p" : 1,
+ "q" : 2,
+ "r" : 3
+ },
+ "a2" : {
+ "p" : 4,
+ "q" : 5,
+ "r" : 6
+ },
+ "a3" : {
+ "p" : 7,
+ "q" : 8,
+ "r" : 9
+ }
+}
diff --git a/src/test/resources/fn_parse_json/test4.json b/src/test/resources/fn_parse_json/test4.json
new file mode 100644
index 000000000..70ca09768
--- /dev/null
+++ b/src/test/resources/fn_parse_json/test4.json
@@ -0,0 +1,19 @@
+{
+ "a1" : {
+ "p" : 1,
+ "q" : 2,
+ "r" : 3
+ },
+ "a2" : {
+ "p" : [1,2,3],
+ "q" : 5,
+ "r" : 6
+ },
+ "a3" : {
+ "p" : 7,
+ "q" : {
+ "a" : "hello"
+ },
+ "r" : 9
+ }
+}
diff --git a/src/test/resources/fn_parse_json/test4.xsl b/src/test/resources/fn_parse_json/test4.xsl
new file mode 100644
index 000000000..0f1f33556
--- /dev/null
+++ b/src/test/resources/fn_parse_json/test4.xsl
@@ -0,0 +1,42 @@
+<?xml version="1.0"?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema"
+ xmlns:map="http://www.w3.org/2005/xpath-functions/map"
+ exclude-result-prefixes="#all"
+ version="3.0">
+
+ <!-- Author: mukulg@apache.org -->
+
+ <!-- An XSL stylesheet test case, to test XPath 3.1 fn:parse-json
+ function call. Also testing a relatively complex XPath sequence
+ type expression used as value of xsl:variable's "as" attribute. -->
+
+ <xsl:output method="xml" indent="yes"/>
+
+ <xsl:variable name="m1" select="parse-json(unparsed-text('test2.json'))" as="map(xs:string, array(*))"/>
+
+ <xsl:template match="/">
+ <result>
+ <xsl:value-of select="map:keys($m1)"/>
+ </result>
+ </xsl:template>
+
+ <!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ -->
+
+</xsl:stylesheet>
diff --git a/src/test/resources/fn_parse_json/test5.xsl b/src/test/resources/fn_parse_json/test5.xsl
new file mode 100644
index 000000000..61198d190
--- /dev/null
+++ b/src/test/resources/fn_parse_json/test5.xsl
@@ -0,0 +1,42 @@
+<?xml version="1.0"?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema"
+ xmlns:map="http://www.w3.org/2005/xpath-functions/map"
+ exclude-result-prefixes="#all"
+ version="3.0">
+
+ <!-- Author: mukulg@apache.org -->
+
+ <!-- An XSL stylesheet test case, to test XPath 3.1 fn:parse-json
+ function call. Also testing a relatively complex XPath sequence
+ type expression used as value of xsl:variable's "as" attribute. -->
+
+ <xsl:output method="xml" indent="yes"/>
+
+ <xsl:variable name="m1" select="parse-json(unparsed-text('test2.json'))" as="map(xs:string, array(xs:double))"/>
+
+ <xsl:template match="/">
+ <result>
+ <xsl:value-of select="map:keys($m1)"/>
+ </result>
+ </xsl:template>
+
+ <!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ -->
+
+</xsl:stylesheet>
diff --git a/src/test/resources/fn_parse_json/test6.xsl b/src/test/resources/fn_parse_json/test6.xsl
new file mode 100644
index 000000000..41bfee682
--- /dev/null
+++ b/src/test/resources/fn_parse_json/test6.xsl
@@ -0,0 +1,42 @@
+<?xml version="1.0"?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema"
+ xmlns:map="http://www.w3.org/2005/xpath-functions/map"
+ exclude-result-prefixes="#all"
+ version="3.0">
+
+ <!-- Author: mukulg@apache.org -->
+
+ <!-- An XSL stylesheet test case, to test XPath 3.1 fn:parse-json
+ function call. Also testing a relatively complex XPath sequence
+ type expression used as value of xsl:variable's "as" attribute. -->
+
+ <xsl:output method="xml" indent="yes"/>
+
+ <xsl:variable name="m1" select="parse-json(unparsed-text('test3.json'))" as="map(xs:string, map(xs:string, xs:double))"/>
+
+ <xsl:template match="/">
+ <result>
+ <xsl:value-of select="map:keys($m1)"/>
+ </result>
+ </xsl:template>
+
+ <!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ -->
+
+</xsl:stylesheet>
diff --git a/src/test/resources/fn_parse_json/test7.xsl b/src/test/resources/fn_parse_json/test7.xsl
new file mode 100644
index 000000000..43dd21377
--- /dev/null
+++ b/src/test/resources/fn_parse_json/test7.xsl
@@ -0,0 +1,42 @@
+<?xml version="1.0"?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema"
+ xmlns:map="http://www.w3.org/2005/xpath-functions/map"
+ exclude-result-prefixes="#all"
+ version="3.0">
+
+ <!-- Author: mukulg@apache.org -->
+
+ <!-- An XSL stylesheet test case, to test XPath 3.1 fn:parse-json
+ function call. Also testing a relatively complex XPath sequence
+ type expression used as value of xsl:variable's "as" attribute. -->
+
+ <xsl:output method="xml" indent="yes"/>
+
+ <xsl:variable name="m1" select="parse-json(unparsed-text('test4.json'))" as="map(xs:string, map(*))"/>
+
+ <xsl:template match="/">
+ <result>
+ <xsl:value-of select="map:keys($m1)"/>
+ </result>
+ </xsl:template>
+
+ <!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ -->
+
+</xsl:stylesheet>
diff --git a/src/test/resources/xpath_array/gold/test29.out b/src/test/resources/xpath_array/gold/test29.out
new file mode 100644
index 000000000..60f234274
--- /dev/null
+++ b/src/test/resources/xpath_array/gold/test29.out
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?><result>
+ <one>a b c</one>
+ <two>1 2 3</two>
+ <three>a 1 1.5</three>
+</result>
diff --git a/src/test/resources/xpath_array/gold/test30.out b/src/test/resources/xpath_array/gold/test30.out
new file mode 100644
index 000000000..b46f262ec
--- /dev/null
+++ b/src/test/resources/xpath_array/gold/test30.out
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?><result>
+ <one>a b c</one>
+ <two>1 2 3</two>
+ <three>a 1 1.5</three>
+ <four>
+ <array>a b c</array>
+ <array>1 2 3</array>
+ <array>a 1 1.5</array>
+ </four>
+</result>
diff --git a/src/test/resources/xpath_array/test2.json b/src/test/resources/xpath_array/test2.json
new file mode 100644
index 000000000..2292c2119
--- /dev/null
+++ b/src/test/resources/xpath_array/test2.json
@@ -0,0 +1,5 @@
+{
+ "a1" : ["a", "b", "c"],
+ "a2" : [1, 2, 3],
+ "a3" : ["a", 1, 1.5]
+}
diff --git a/src/test/resources/xpath_array/test29.xsl b/src/test/resources/xpath_array/test29.xsl
new file mode 100644
index 000000000..55d744b70
--- /dev/null
+++ b/src/test/resources/xpath_array/test29.xsl
@@ -0,0 +1,60 @@
+<?xml version="1.0"?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema"
+ xmlns:fn0="http://fn0"
+ exclude-result-prefixes="#all"
+ version="3.0">
+
+ <!-- Author: mukulg@apache.org -->
+
+ <!-- An XSL 3 stylesheet test case, to test XSL function
+ returning xdm arrays and verifying function's return
+ value with xsl:function's 'as' attribute. -->
+
+ <xsl:output method="xml" indent="yes"/>
+
+ <xsl:template match="/">
+ <result>
+ <one>
+ <xsl:value-of select="fn0:func1()"/>
+ </one>
+ <two>
+ <xsl:value-of select="fn0:func2()"/>
+ </two>
+ <three>
+ <xsl:value-of select="fn0:func3()"/>
+ </three>
+ </result>
+ </xsl:template>
+
+ <xsl:function name="fn0:func1" as="array(xs:string)">
+ <xsl:sequence select="['a','b','c']"/>
+ </xsl:function>
+
+ <xsl:function name="fn0:func2" as="array(xs:integer)">
+ <xsl:sequence select="[1,2,3]"/>
+ </xsl:function>
+
+ <xsl:function name="fn0:func3" as="array(*)">
+ <xsl:sequence select="['a',1,1.5]"/>
+ </xsl:function>
+
+ <!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ -->
+
+</xsl:stylesheet>
diff --git a/src/test/resources/xpath_array/test30.xsl b/src/test/resources/xpath_array/test30.xsl
new file mode 100644
index 000000000..c79d8a2b3
--- /dev/null
+++ b/src/test/resources/xpath_array/test30.xsl
@@ -0,0 +1,81 @@
+<?xml version="1.0"?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema"
+ xmlns:map="http://www.w3.org/2005/xpath-functions/map"
+ xmlns:fn0="http://fn0"
+ exclude-result-prefixes="#all"
+ version="3.0">
+
+ <!-- Author: mukulg@apache.org -->
+
+ <!-- An XSL 3 stylesheet test case, to test XSL function
+ returning xdm arrays and verifying function's return
+ value with xsl:function's 'as' attribute.
+
+ This XSL stylesheet also reads information, from an
+ external JSON document using fn:unparsed-text and
+ fn:parse-json functions.
+ -->
+
+ <xsl:output method="xml" indent="yes"/>
+
+ <xsl:variable name="m1" select="parse-json(unparsed-text('test2.json'))" as="map(*)"/>
+
+ <xsl:template match="/">
+ <result>
+ <one>
+ <xsl:value-of select="fn0:func1($m1,'a1')"/>
+ </one>
+ <two>
+ <xsl:value-of select="fn0:func2($m1,'a2')"/>
+ </two>
+ <three>
+ <xsl:value-of select="fn0:func3($m1,'a3')"/>
+ </three>
+ <four>
+ <xsl:for-each select="map:keys($m1)">
+ <array>
+ <xsl:value-of select="fn0:func3($m1,.)"/>
+ </array>
+ </xsl:for-each>
+ </four>
+ </result>
+ </xsl:template>
+
+ <xsl:function name="fn0:func1" as="array(xs:string)">
+ <xsl:param name="m1" as="map(*)"/>
+ <xsl:param name="k1" as="xs:string"/>
+ <xsl:sequence select="map:get($m1,$k1)"/>
+ </xsl:function>
+
+ <xsl:function name="fn0:func2" as="array(xs:double)">
+ <xsl:param name="m1" as="map(*)"/>
+ <xsl:param name="k1" as="xs:string"/>
+ <xsl:sequence select="map:get($m1,$k1)"/>
+ </xsl:function>
+
+ <xsl:function name="fn0:func3" as="array(*)">
+ <xsl:param name="m1" as="map(*)"/>
+ <xsl:param name="k1" as="xs:string"/>
+ <xsl:sequence select="map:get($m1,$k1)"/>
+ </xsl:function>
+
+ <!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ -->
+
+</xsl:stylesheet>
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@xalan.apache.org
For additional commands, e-mail: commits-help@xalan.apache.org