Hi Sohanai,

[+ Asanthi]

We are using Saxon: HE (Home Edition) for XAPTH 2 functions. AFAIK, we
don't select functionality to support so anything supported by library
should already be there, which means it's likely HE edition does not
contain function you're looking for. Please have a look at [1].

[1] http://www.saxonica.com/html/documentation9.4/about/

On Thu, Aug 4, 2016 at 6:57 PM, Sohani Weerasinghe <soh...@wso2.com> wrote:

> Hi ESB Team,
>
> Please find the summary of issues encountered while testing the XPath 2.0
> functions at [1] ( referred [2] & [3] for syntax) and really appreciate
> your input on this
>
>
> *1. "Invalid XPath Syntax" occurs when saving the synapse configuration in
> management console*
>
> This error occurs for below functions:
>
>    - avg- fn:avg((1,2,3,4,5))
>    - codepoints-to-string - fn:codepoints-to-string((97, 32, 98, 32, 99)))
>    - distinct-values - fn:distinct-values( ('a', 'b', 'a') ) -This is
>    supported when passing the value as an xml payload
>    - id - //book/section/secRef/fn:id(@refs)
>    - idref - //book/idref('language')/string(.)
>    - index-of - fn:index-of( (4, 5, 6, 4), 4)
>    - max- fn:max((2,3,5))
>    - min - fn:min((2,3,5))
>    - remove - fn:remove( ('a', 'b', 'c'), 2)
>    - reverse - fn:reverse((1, 2, 3, 4, 5))  -This is supported when
>    passing the value as an xml payload
>    - string-join - string-join( ('a', 'b', 'c'), '')
>    - subsequence - fn:subsequence(('a', 'b', 'c', 'd', 'e'), 3)
>
>
> *2. Issues in using error() function*
>
> According to https://www.w3.org/TR/xpath-functions-30/#ERRFOER0000 ,
> calling the function with empty parameters should give an unidentified
> error. But when invoking the service it gives below exception
>
> Is this accepted?
>
> ERROR - SynapseXPath Evaluation of the XPath expression fn:error()
> resulted in an error
> ; Line#: 1; Column#: -1
> net.sf.saxon.trans.XPathException: Error signalled by application call on
> error()
> at net.sf.saxon.functions.Error.error(Error.java:98)
> at net.sf.saxon.functions.Error.evaluateItem(Error.java:55)
> at net.sf.saxon.expr.Expression.iterate(Expression.java:429)
> at net.sf.saxon.xpath.XPathExpressionImpl.evaluate(
> XPathExpressionImpl.java:326)
> at net.sf.saxon.xpath.XPathExpressionImpl.evaluate(
> XPathExpressionImpl.java:389)
> at org.apache.synapse.util.xpath.SynapseXPath.evaluateDOMXPath(
> SynapseXPath.java:533)
> at org.apache.synapse.util.xpath.SynapseXPath.stringValueOf(
> SynapseXPath.java:367)
> at org.apache.synapse.mediators.MediatorProperty.getEvaluatedExpression(
> MediatorProperty.java:138)
> at org.apache.synapse.mediators.builtin.LogMediator.setCustomProperties(
> LogMediator.java:223)
> at org.apache.synapse.mediators.builtin.LogMediator.getCustomLogMessage(
> LogMediator.java:146)
> at org.apache.synapse.mediators.builtin.LogMediator.
> getLogMessage(LogMediator.java:132)
> at org.apache.synapse.mediators.builtin.LogMediator.mediate(
> LogMediator.java:101)
> at org.apache.synapse.mediators.AbstractListMediator.mediate(
> AbstractListMediator.java:97)
> at org.apache.synapse.mediators.AbstractListMediator.mediate(
> AbstractListMediator.java:54)
> at org.apache.synapse.mediators.base.SequenceMediator.mediate(
> SequenceMediator.java:158)
> at org.apache.synapse.core.axis2.ProxyServiceMessageReceiver.receive(
> ProxyServiceMessageReceiver.java:210)
> at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180)
> at org.apache.synapse.transport.passthru.ServerWorker.
> processEntityEnclosingRequest(ServerWorker.java:398)
> at org.apache.synapse.transport.passthru.ServerWorker.run(
> ServerWorker.java:145)
> at org.apache.axis2.transport.base.threads.NativeWorkerPool$
> 1.run(NativeWorkerPool.java:172)
> at java.util.concurrent.ThreadPoolExecutor.runWorker(
> ThreadPoolExecutor.java:1145)
> at java.util.concurrent.ThreadPoolExecutor$Worker.run(
> ThreadPoolExecutor.java:615)
> at java.lang.Thread.run(Thread.java:745)
>
>
> *3. "System function is not available with this host language/version"
> occurs when invoking the service*
>
> According to <https://mail.google.com/mail/u/0/goog_627243550>
> https://sourceforge.net/p/saxon/mailman/saxon-help/
> thread/50f7f8b9.4090...@falutin.net/, it seems this is an XSLT function, is
> that the reason for getting the below error?  but at [1] this function is
> declared as an XPath function
>
>
> [2016-08-02 12:47:27,875] ERROR - SynapseXPath Evaluation of the XPath
> expression fn:format-date(fn:current-date(), '[Y01]/[M01]/[D01]')
> resulted in an error
> net.sf.saxon.trans.XPathException: System function format-date#2 is not
> available with this host language/version
> at net.sf.saxon.expr.parser.ExpressionParser.grumble(
> ExpressionParser.java:263)
> at net.sf.saxon.expr.parser.ExpressionParser.parseFunctionCall(
> ExpressionParser.java:2375)
> at net.sf.saxon.expr.parser.ExpressionParser.parseBasicStep(
> ExpressionParser.java:1731)
> at net.sf.saxon.expr.parser.ExpressionParser.parseStepExpression(
> ExpressionParser.java:1654)
> at net.sf.saxon.expr.parser.ExpressionParser.parseRelativePath(
> ExpressionParser.java:1573)
> at net.sf.saxon.expr.parser.ExpressionParser.parsePathExpression(
> ExpressionParser.java:1557)
> at net.sf.saxon.expr.parser.ExpressionParser.parseUnaryExpression(
> ExpressionParser.java:1447)
> at net.sf.saxon.expr.parser.ExpressionParser.parseExprSingle(
> ExpressionParser.java:517)
> at net.sf.saxon.expr.parser.ExpressionParser.parseExpression(
> ExpressionParser.java:455)
> at net.sf.saxon.expr.parser.ExpressionParser.parse(
> ExpressionParser.java:391)
> at net.sf.saxon.expr.parser.ExpressionTool.make(ExpressionTool.java:94)
> at net.sf.saxon.xpath.XPathEvaluator.createExpressionInternal(
> XPathEvaluator.java:235)
> at net.sf.saxon.xpath.XPathEvaluator.compile(XPathEvaluator.java:376)
> at org.apache.synapse.util.xpath.SynapseXPath.evaluateDOMXPath(
> SynapseXPath.java:532)
> at org.apache.synapse.util.xpath.SynapseXPath.stringValueOf(
> SynapseXPath.java:367)
> at org.apache.synapse.mediators.MediatorProperty.getEvaluatedExpression(
> MediatorProperty.java:138)
> at org.apache.synapse.mediators.builtin.LogMediator.setCustomProperties(
> LogMediator.java:223)
> at org.apache.synapse.mediators.builtin.LogMediator.getCustomLogMessage(
> LogMediator.java:146)
> at org.apache.synapse.mediators.builtin.LogMediator.
> getLogMessage(LogMediator.java:132)
> at org.apache.synapse.mediators.builtin.LogMediator.mediate(
> LogMediator.java:101)
> at org.apache.synapse.mediators.AbstractListMediator.mediate(
> AbstractListMediator.java:97)
> at org.apache.synapse.mediators.AbstractListMediator.mediate(
> AbstractListMediator.java:54)
> at org.apache.synapse.mediators.base.SequenceMediator.mediate(
> SequenceMediator.java:158)
> at org.apache.synapse.core.axis2.ProxyServiceMessageReceiver.receive(
> ProxyServiceMessageReceiver.java:210)
> at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180)
> at org.apache.synapse.transport.passthru.ServerWorker.
> processEntityEnclosingRequest(ServerWorker.java:398)
> at org.apache.synapse.transport.passthru.ServerWorker.run(
> ServerWorker.java:145)
> at org.apache.axis2.transport.base.threads.NativeWorkerPool$
> 1.run(NativeWorkerPool.java:172)
> at java.util.concurrent.ThreadPoolExecutor.runWorker(
> ThreadPoolExecutor.java:1145)
> at java.util.concurrent.ThreadPoolExecutor$Worker.run(
> ThreadPoolExecutor.java:615)
> at java.lang.Thread.run(Thread.java:745)
>
> *4. Error in using insert-before() function*
>
>
> According to https://docs.marklogic.com/fn:insert-before if the function
> written as
> fn:insert-before('a', 0, 'x'), then it gives the below error when invoking
> the service
>
> If the position casts to xs:integer as fn:insert-before('a',
> xs:integer(0), 'x') and invoke the service then the result only has 'x' but
> the expected result should be 'x,a'
>
>
> [2016-08-02 14:39:23,625] ERROR - SynapseXPath Evaluation of the XPath
> expression fn:insert-before('a', 1, 'x') resulted in an error
> ; Line#: 1; Column#: -1
> net.sf.saxon.trans.XPathException: Required item type of second argument
> of fn:insert-before() is xs:integer; supplied value has item type xs:decimal
>         at net.sf.saxon.expr.parser.TypeChecker.staticTypeCheck(
> TypeChecker.java:404)
>         at net.sf.saxon.functions.SystemFunction.checkArgument(
> SystemFunction.java:117)
>         at net.sf.saxon.functions.SystemFunction.checkArguments(
> SystemFunction.java:100)
>         at net.sf.saxon.expr.FunctionCall.typeCheck(FunctionCall.java:134)
>         at net.sf.saxon.expr.parser.ExpressionVisitor.typeCheck(
> ExpressionVisitor.java:206)
>         at net.sf.saxon.xpath.XPathEvaluator.createExpressionInternal(
> XPathEvaluator.java:239)
>         at net.sf.saxon.xpath.XPathEvaluator.compile(
> XPathEvaluator.java:376)
>         at org.apache.synapse.util.xpath.SynapseXPath.evaluateDOMXPath(
> SynapseXPath.java:532)
>         at org.apache.synapse.util.xpath.SynapseXPath.stringValueOf(
> SynapseXPath.java:367)
>         at org.apache.synapse.mediators.MediatorProperty.
> getEvaluatedExpression(MediatorProperty.java:138)
>         at org.apache.synapse.mediators.builtin.LogMediator.
> setCustomProperties(LogMediator.java:223)
>         at org.apache.synapse.mediators.builtin.LogMediator.
> getCustomLogMessage(LogMediator.java:146)
>         at org.apache.synapse.mediators.builtin.LogMediator.
> getLogMessage(LogMediator.java:132)
>         at org.apache.synapse.mediators.builtin.LogMediator.mediate(
> LogMediator.java:101)
>         at org.apache.synapse.mediators.AbstractListMediator.mediate(
> AbstractListMediator.java:97)
>         at org.apache.synapse.mediators.AbstractListMediator.mediate(
> AbstractListMediator.java:54)
>         at org.apache.synapse.mediators.base.SequenceMediator.mediate(
> SequenceMediator.java:158)
>         at org.apache.synapse.core.axis2.ProxyServiceMessageReceiver.
> receive(ProxyServiceMessageReceiver.java:210)
>         at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180)
>         at org.apache.synapse.transport.passthru.ServerWorker.
> processEntityEnclosingRequest(ServerWorker.java:398)
>         at org.apache.synapse.transport.passthru.ServerWorker.run(
> ServerWorker.java:145)
>         at org.apache.axis2.transport.base.threads.NativeWorkerPool$
> 1.run(NativeWorkerPool.java:172)
>         at java.util.concurrent.ThreadPoolExecutor.runWorker(
> ThreadPoolExecutor.java:1145)
>         at java.util.concurrent.ThreadPoolExecutor$Worker.run(
> ThreadPoolExecutor.java:615)
>         at java.lang.Thread.run(Thread.java:745)
>
>
>
> *5. nilled() function always gives the result as false*
>
> ref: http://www.xqueryfunctions.com/xq/fn_nilled.html
>
> payload:
>
> <root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";>
> <child>12</child> <child xsi:nil="true"></child> <child></child> <child/>
> <child xsi:nil="false"></child> </root>
>
> function: fn:nilled(//child[1])
>
> For all child elements it gives false ( even for the elements which has
> xsi:nil)
>
>
> *6. root() function does not give the root element*
>
> ref:http://www.xqueryfunctions.com/xq/fn_root.html
>
> payload:
>
> <a>
>   <x>123</x>
> </a>
>
> function: fn:root(//x)
>
> result : 123
>
> expected result :
> <a>
>   <x>123</x>
> </a>
>
>
> *7. Using the function static-base-uri()*
>
> ref: http://www.xqueryfunctions.com/xq/fn_static-base-uri.html
>
> Can someone please mention how to define the function and the usage?
>
>
>
> *8. Using the function unordered()*
>
> ref: https://docs.marklogic.com/fn.unordered
>
> payload :
>
> <a>
>   <x>1</x>
>  <x>2</x>
>  <x>3</x>
> </a>
>
> function: fn:unordered(//x)
>
> result : 1
>
> Can someone please explain the usage of this function? it seems the
> expected result should be a sequence of items
>
>
>
>
> -more information on the testing results can be found at [4]
>
> -Further, when going through the functions at [1] it seems below functions
> are only supported for XSLT ( I guess we don't need to support those
> functions when considering the XPath 2.0 functions, please correct me if
> I'm wrong)
>
> ref: https://docs.marklogic.com/fn
>
> functions:
>
>    - current
>    - current-group
>    - current-grouping-key
>    - document
>    - element-available
>    - function-available
>    - generate-id(http://www.xsltfunctions.com/xsl/fn_generate-id.html)
>    - regex-group
>    - system-property
>    - type-available
>    - unparsed-entity-public-id
>    - unparsed-entity-uri
>    - unparsed-text
>    - unparsed-text-available
>
>
> - XPath 3.0 functions listed at [1]
>
> acos ,analyze-string,asin,atan,ata2,available-environment-variables,cos,
> element-with-id,environment-variable,exp,exp10,filter,fold-left,fold-right
> ,format-integer,function-arity,function-lookup,function-name,has-children,
> head,innermost,log,log10,map,map-pairs,outermost,parse-json,parse-xml ,
> path,pi,pow,round,serialize,serialize-json,sin,sqrt,tail,tan,
> unparsed-text-lines,uri-collection
>
>
>
> [1] http://www.saxonica.com/html/documentation9.4/functions/
> [2] http://www.xqueryfunctions.com/
> [3] https://docs.marklogic.com/js/fn
> [4] https://docs.google.com/a/wso2.com/spreadsheets/d/
> 1LLVSTAGrqpouQIkt1p3dRx5_wqjuUa58QnKd7gbgQTU/edit?usp=sharing
>
> Thanks,
> Sohani
>
> Sohani Weerasinghe
> Senior Software Engineer
> WSO2, Inc: http://wso2.com
>
> Mobile  : +94 716439774
> Blog     :http://christinetechtips.blogspot.com/
> Twitter  : https://twitter.com/sohanichristine
>
> On Mon, Aug 1, 2016 at 4:28 PM, Sohani Weerasinghe <soh...@wso2.com>
> wrote:
>
>> According to [1] if I test the distinct-values function,it behaves as
>> explained below:
>>
>>
>> 1. If I use a rest mock service to get the response and then get the
>> distinct values :
>>
>> Rest mock service response:
>>
>> <catalog xml:base="http://example.org/ACC/";> <product dept="WMN"> 
>> *<number>557</number>
>> <number>44</number>*
>> *<number>44</number>* </product> </catalog>
>>
>> Rest API:
>>
>> <api xmlns="http://ws.apache.org/ns/synapse"; name="sample123"
>> context="/test123"> <resource methods="POST GET"> <inSequence> <send>
>> <endpoint> <address uri="http://localhost:8080/getResult"/> </endpoint>
>> </send> </inSequence> <outSequence> <log level="custom"> <property
>> xmlns:fn="http://www.w3.org/2005/xpath-functions"; xmlns:ns="
>> http://org.apache.synapse/xsd"; xmlns:base="http://test"; name="testValue"
>> *expression="fn:**distinct-values**(//product/*)"/*>
>> </log> </outSequence> </resource> </api>
>>
>>
>> Then expected result is : *557, 44*
>>
>> But I am getting only *557*
>>
>> Am I missing something here?
>>
>> 2. If I directly use this function as below
>>
>> <proxy xmlns="http://ws.apache.org/ns/synapse";
>>        name="testProxy"
>>        transports="http https"
>>        startOnLoad="true">
>>    <description/>
>>    <target>
>>       <inSequence>
>>          <log level="custom">
>>             <property xmlns:fn="http://www.w3.org/2005/xpath-functions";
>>                       xmlns:xs="http://www.w3.org/2001/XMLSchema";
>>                       xmlns:ns="http://org.apache.synapse/xsd";
>>                       name="testValue"
>>                       expression="*fn:**distinct-values**(('a', 'b',
>> 'a'))*"/>
>>          </log>
>>       </inSequence>
>>       <outSequence/>
>>    </target>
>> </proxy>
>>
>> Then I'm getting the exception "invalid XPapth expression" in saving the
>> proxy
>>
>> But according to [1] it seems both ways are correct
>>
>>
>> [1] http://www.xqueryfunctions.com/xq/fn_distinct-values.html
>>
>> Thanks,
>> Sohani
>>
>> Sohani Weerasinghe
>> Senior Software Engineer
>> WSO2, Inc: http://wso2.com
>>
>> Mobile  : +94 716439774
>> Blog     :http://christinetechtips.blogspot.com/
>> Twitter  : https://twitter.com/sohanichristine
>>
>> On Mon, Aug 1, 2016 at 3:54 PM, Sohani Weerasinghe <soh...@wso2.com>
>> wrote:
>>
>>>
>>>
>>>
>>> Sohani Weerasinghe
>>> Senior Software Engineer
>>> WSO2, Inc: http://wso2.com
>>>
>>> Mobile  : +94 716439774
>>> Blog     :http://christinetechtips.blogspot.com/
>>> Twitter  : https://twitter.com/sohanichristine
>>>
>>> On Mon, Aug 1, 2016 at 1:28 PM, Sohani Weerasinghe <soh...@wso2.com>
>>> wrote:
>>>
>>>> Hi All,
>>>>
>>>> It seems, the " Invalid XPapth expression" comes when we use two
>>>> brackets in the function as below
>>>>
>>>
>>>
>>> While I was testing further I found that below function works perfectly
>>> even it has two brackets, so that means the syntax of the above mentioned
>>> functions are correct.
>>>
>>> So, are these functions not supported in ESB? Appreciate your input on
>>> this
>>>
>>> fn:dateTime(xs:date('2006-08-15'), xs:time('12:30:45-05:00'))
>>>
>>>
>>>> fn:codepoints-to-string(*(*2309, 2358, 2378, 2325*)*)
>>>> fn:string-join(('a', 'c'), 'bbb')
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> Sohani Weerasinghe
>>>> Senior Software Engineer
>>>> WSO2, Inc: http://wso2.com
>>>>
>>>> Mobile  : +94 716439774
>>>> Blog     :http://christinetechtips.blogspot.com/
>>>> Twitter  : https://twitter.com/sohanichristine
>>>>
>>>> On Mon, Aug 1, 2016 at 12:06 PM, Sohani Weerasinghe <soh...@wso2.com>
>>>> wrote:
>>>>
>>>>> Hi All,
>>>>>
>>>>> I am validating the Xpath 2.0 functions support in ESB ( please refer
>>>>> [1]) and I am using below configuration in defining 'avg' function
>>>>> (Referred [2]), but it seems I am using the wrong syntax.
>>>>>
>>>>>   <property xmlns:fn="http://www.w3.org/2005/xpath-functions";
>>>>>                       xmlns:test="http://test";
>>>>>                       xmlns:ns="http://org.apache.synapse/xsd";
>>>>>                       name="testValue"
>>>>>                     *  expression="fn:avg((3,4,5))"/>*
>>>>>
>>>>> Can someone please point the correct syntax?
>>>>>
>>>>> Since avg function requires a single parameter, is there a way to
>>>>> define the integer values externally ( may be using a property mediator )
>>>>> and use it inside the function ?
>>>>>
>>>>> If this syntax is correct, is this function not supported in ESB?
>>>>>
>>>>> Really appreciate your input on this
>>>>>
>>>>> FYI: When saving the proxy, I'm getting below exception:
>>>>>
>>>>> [2016-08-01 11:41:11,718] ERROR - ProxyServiceAdmin Unable to save
>>>>> changes made for the proxy service : testProxy. Restored the existing
>>>>> proxy... :: Invalid XPapth expression : fn:avg((3,4,5))
>>>>> org.apache.synapse.SynapseException: Invalid XPapth expression :
>>>>> fn:avg((3,4,5))
>>>>> at org.apache.synapse.config.xml.MediatorPropertyFactory.
>>>>> getMediatorProperties(MediatorPropertyFactory.java:106)
>>>>> at org.apache.synapse.config.xml.LogMediatorFactory.
>>>>> createSpecificMediator(LogMediatorFactory.java:111)
>>>>> .......
>>>>>
>>>>>
>>>>>
>>>>> [1] Xpath 2.0.0 functions supported by ESB
>>>>> [2] https://www.w3.org/TR/xpath-functions/#func-avg
>>>>> Sohani Weerasinghe
>>>>> Senior Software Engineer
>>>>> WSO2, Inc: http://wso2.com
>>>>>
>>>>> Mobile  : +94 716439774
>>>>> Blog     :http://christinetechtips.blogspot.com/
>>>>> Twitter  : https://twitter.com/sohanichristine
>>>>>
>>>>
>>>>
>>>
>>
>


-- 
Regards,
*Shafreen*
Software Engineer
WSO2 Inc
Mobile : 077-556-395-1
_______________________________________________
Dev mailing list
Dev@wso2.org
http://wso2.org/cgi-bin/mailman/listinfo/dev

Reply via email to