argument type mismatch when using fn:replace

2010-08-04 Thread Christopher Schultz
-BEGIN PGP SIGNED MESSAGE-
Hash: SHA1

All,

I've been using Cocoon 2.1.11 successfully for quite some time, and I'm
trying to add new capabilities to our product. I'm tripping-up when
trying to use fn:replace with a regular expression.

I'm on Debian Lenny with Debian's package-managed version of Sun JRE
1.6.0_20. I'm pretty sure I haven't messed with any of the libraries
that ship with Cocoon (such as Xalan, etc.), so it should be a pretty
stock install. I've packaged my own webapp rather than using the one
that Cocoon can build for you. I can give details of that process if
necessary.

I tried to use xsl:analyze-string which gave me a cannot use
xsl:analyze-string here error, so I tried changing my xsl:stylesheet
version=1.0 to xsl:stylesheet version=2.0 which fixed that error,
but didn't give me any output.

At any rate, my current stylesheet header looks like this (with
product-specific xmlns declarations removed for brevity:

?xml version=1.0 ?

xsl:stylesheet version=2.0
xmlns:xsl=http://www.w3.org/1999/XSL/Transform;
xmlns:fn=http://www.w3.org/2005/xpath-functions;

Specifically, my original function call attempt is this (trying to
remove a query parameter form a query string):

xsl:variable name=fixed-base-url
  xsl:value-of select=$base-url /
  xsl:text?/xsl:text
  xsl:value-of select=fn:replace($query-string,
'(amp;)?list_start=[0-9]+', '') /
/xsl:variable

Executing this results in the following error:

java.lang.IllegalArgumentException: argument type mismatch
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at
org.apache.xalan.extensions.ExtensionHandlerJavaPackage.callFunction(ExtensionHandlerJavaPackage.java:404)
at
org.apache.xalan.extensions.ExtensionHandlerJavaPackage.callFunction(ExtensionHandlerJavaPackage.java:440)
at
org.apache.xalan.extensions.ExtensionsTable.extFunction(ExtensionsTable.java:222)
at
org.apache.xalan.transformer.TransformerImpl.extFunction(TransformerImpl.java:473)
at
org.apache.xpath.functions.FuncExtFunction.execute(FuncExtFunction.java:208)
at
org.apache.xpath.Expression.executeCharsToContentHandler(Expression.java:313)
at org.apache.xalan.templates.ElemValueOf.execute(ElemValueOf.java:274)
at
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2400)
at
org.apache.xalan.transformer.TransformerImpl.transformToRTF(TransformerImpl.java:1988)
...
(let me know if more of the stack trace would be helpful)

I thought I might have some weird kind of data, so I tried something
simpler, just to be sure:

xsl:value-of select=fn:replace('abcabc', 'a', 'b') /

The above gives me the same error. Either commenting-out the entire
xsl:value-of element or changing the select to select='' removes the
error.

As for xsl:analyze-string, the following test resulted in no output:

xsl:analyze-string select='abcabc' regex=a
xsl:matching-substring
A
/xsl:matching-substring
xsl:non-matching-substring
xsl:value-of select=. /
/xsl:non-matching-substring
/xsl:analyze-string

... while I would have expected AbcAbc to be emitted. Perhaps I am
misusing the xsl:analyze-string element.

Can anyone offer any suggestions?

Thanks,
- -chris
-BEGIN PGP SIGNATURE-
Version: GnuPG v1.4.10 (MingW32)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iEYEARECAAYFAkxZnmEACgkQ9CaO5/Lv0PCGcQCdGI9nhuNAXvbvtAB7ehA7KEiL
YAcAnA2af9MV5hobIKGf21d8dzBGRxw1
=wxjf
-END PGP SIGNATURE-

-
To unsubscribe, e-mail: users-unsubscr...@cocoon.apache.org
For additional commands, e-mail: users-h...@cocoon.apache.org



Re: argument type mismatch when using fn:replace

2010-08-04 Thread Thomas Ernest
 Hi Chris,

I remember having this problem, when I used the same version of Cocoon
one year ago.
I'm not 100% sure, but I mean fn:replace is a function belonging to
XPath 2.0 [1] and Cocoon 2.1.11 integrates a Xalan implementing XPath
1.0 only.
You should check which version of Xalan do you use and be sure this
version implements XPath 1.0 only.

I guess there are some ways to use a more up-to-date Xalan (implementing
XPath 2.0), but if I well remember I used another workaround. I'm no
more sure which one, but I guess you should find enough interesting
transformers [2].
It is not the best way, but it is possible to have a heavy two-passes
mechanism. At first xslt transformer adding JX instructions (like 'if
test' or 'set var' and variable instantiations) in the right places and
then a JX transformer evaluating JX instructions (like removing 'if
test' with a false condition or removing/evaluating 'set var' in order
to instance these variables in another places).

I hope it will help. Good luck.
Please give us your feedback about these ideas.

Thomas.

[1] http://www.w3.org/TR/xpath-functions/#func-replace
[2] http://cocoon.apache.org/2.1/userdocs/transformers.html

Le 04/08/2010 19:07, Christopher Schultz a écrit :
 All,

 I've been using Cocoon 2.1.11 successfully for quite some time, and I'm
 trying to add new capabilities to our product. I'm tripping-up when
 trying to use fn:replace with a regular expression.

 I'm on Debian Lenny with Debian's package-managed version of Sun JRE
 1.6.0_20. I'm pretty sure I haven't messed with any of the libraries
 that ship with Cocoon (such as Xalan, etc.), so it should be a pretty
 stock install. I've packaged my own webapp rather than using the one
 that Cocoon can build for you. I can give details of that process if
 necessary.

 I tried to use xsl:analyze-string which gave me a cannot use
 xsl:analyze-string here error, so I tried changing my xsl:stylesheet
 version=1.0 to xsl:stylesheet version=2.0 which fixed that error,
 but didn't give me any output.

 At any rate, my current stylesheet header looks like this (with
 product-specific xmlns declarations removed for brevity:

 ?xml version=1.0 ?

 xsl:stylesheet version=2.0
 xmlns:xsl=http://www.w3.org/1999/XSL/Transform;
 xmlns:fn=http://www.w3.org/2005/xpath-functions;

 Specifically, my original function call attempt is this (trying to
 remove a query parameter form a query string):

 xsl:variable name=fixed-base-url
   xsl:value-of select=$base-url /
   xsl:text?/xsl:text
   xsl:value-of select=fn:replace($query-string,
 '(amp;)?list_start=[0-9]+', '') /
 /xsl:variable

 Executing this results in the following error:

 java.lang.IllegalArgumentException: argument type mismatch
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at
 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
 at
 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
 at java.lang.reflect.Method.invoke(Method.java:597)
 at
 org.apache.xalan.extensions.ExtensionHandlerJavaPackage.callFunction(ExtensionHandlerJavaPackage.java:404)
 at
 org.apache.xalan.extensions.ExtensionHandlerJavaPackage.callFunction(ExtensionHandlerJavaPackage.java:440)
 at
 org.apache.xalan.extensions.ExtensionsTable.extFunction(ExtensionsTable.java:222)
 at
 org.apache.xalan.transformer.TransformerImpl.extFunction(TransformerImpl.java:473)
 at
 org.apache.xpath.functions.FuncExtFunction.execute(FuncExtFunction.java:208)
 at
 org.apache.xpath.Expression.executeCharsToContentHandler(Expression.java:313)
 at
 org.apache.xalan.templates.ElemValueOf.execute(ElemValueOf.java:274)
 at
 org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2400)
 at
 org.apache.xalan.transformer.TransformerImpl.transformToRTF(TransformerImpl.java:1988)
 ...
 (let me know if more of the stack trace would be helpful)

 I thought I might have some weird kind of data, so I tried something
 simpler, just to be sure:

 xsl:value-of select=fn:replace('abcabc', 'a', 'b') /

 The above gives me the same error. Either commenting-out the entire
 xsl:value-of element or changing the select to select='' removes the
 error.

 As for xsl:analyze-string, the following test resulted in no output:

 xsl:analyze-string select='abcabc' regex=a
 xsl:matching-substring
 A
 /xsl:matching-substring
 xsl:non-matching-substring
 xsl:value-of select=. /
 /xsl:non-matching-substring
 /xsl:analyze-string

 ... while I would have expected AbcAbc to be emitted. Perhaps I am
 misusing the xsl:analyze-string element.

 Can anyone offer any suggestions?

 Thanks,
 -chris

-
To unsubscribe, e-mail: users-unsubscr...@cocoon.apache.org
For additional commands, e-mail: users-h...@cocoon.apache.org