commons-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Andrew Hughes <ahhug...@gmail.com>
Subject Re: [JXPath] Custom Functions & the Current Pointer
Date Wed, 22 Apr 2009 01:08:16 GMT
Hi Matt,
WooHoo, I got it working :) Kudos for JXPath :D (Again)....

Constructive suggestion: the JXPath doco talks a lot about the use of
functions within predicates, and the programmatic use or $variables within
custom functions. I was unable to find an example where a function used an
expression->pointer->value as a parameter. This would be the most likely use
JXPath functions in my opinion....

Example (for anyone who's reading this in some future context):


The expression, '/World/Country/Australia'   returns an value/instance of
"Australia.java". If you would like to get the current exchange rate for
"Australia" then you would most likely want do this with the following xpath
expression:

mynamespace:MyFunctions.getExchangeRate(/World/Country/Australia)


A corresponding Java function is implemented to provide such
function(ality):

package com.blah.whatever.project;
public class MyFunctions {
    public static double getExchangeRate(Australia australia) {
        //pojo code goes in here...
    }
}


And to complete this, the Java function needs to be set in the
JXPathContext... (don't forget the package string terminating "."):

JXPathContext.setFunctions(new
PackageFunctions("com.blah.whatever.project.", "mynamespace"));


That's it.







On Tue, Apr 21, 2009 at 11:39 PM, Matt Benson <gudnabrsam@yahoo.com> wrote:

>
> Hi, Andrew.  Your example looks pretty good... what happens exactly when
> you try it?
>
> -Matt
>
> --- On Mon, 4/20/09, Andrew Hughes <ahhughes@gmail.com> wrote:
>
> > From: Andrew Hughes <ahhughes@gmail.com>
> > Subject: [JXPath] Custom Functions & the Current Pointer
> > To: "Commons Users List" <user@commons.apache.org>
> > Date: Monday, April 20, 2009, 11:31 PM
> > Hi there, I think this is a really
> > easy question... sorry for this...
> > I have created my own function as below....
> >
> > package com.blah.function;
> >
> > public class Calculate {
> >     public static Calculation
> > doCalculation(ExpressionContext context, int
> > x) {
> >         //stuff goes in here...
> >     }
> >
> > }
> >
> >
> > I've  also registered it with the JXPathContext as
> > below...
> >
> > jxPathContext.setFunctions(new
> > PackageFunctions("com.blah.function.",
> > "jxpath"));
> >
> >
> > I see how this works programatically, but not in an
> > expression. For example,
> > if I want to find a node and then use that node in
> > doCalculation... how?
> >
> > '/Something/I/CanFind' then I want to run
> > 'doCalculation(6)' on the result
> > of the previous query's result.
> >
> >
> > I would have thought this would be something like the
> > following but I am
> > obviously wrong...
> >
> > jxpath:Calculate.doCalculation(/Something/I/CanFind,6);
> >
> > /Something/I/CanFind[jxpath:Calculate.doCalculation(6)];
> >
> >
> > Once an "ExpressionContext" is involved it no longer
> > works.
> >
> >
> > Any help would be much appreciated :)
> >
>
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
> For additional commands, e-mail: user-help@commons.apache.org
>
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message