|
Project Information
|
XPathProxy is a means of generating proxy instances in java of annotated interfaces to access Dom Elements via XPath. It allows you to access XML like this... <?xml version="1.0" encoding="UTF-8"?> <s:Test xmlns:s="http://www.example.com/xml"> <s:someString>Hello</s:someString> <s:anotherString sneaky='boo'>World</s:anotherString> <s:booleanExists/> <s:booleanTrue>true</s:booleanTrue> <s:booleanFalse>false</s:booleanFalse> <s:someDouble>123.456</s:someDouble> <s:yes>YES</s:yes> </s:Test> With an interface like this... (note that the YesNo below is a java5 Enum type) @NamespaceMapping(prefix = "s", uri = "http://www.example.com/xml")
public interface Sample {
@XPathMethod("/s:Test/s:someString")
String getHello();
@XPathMethod("/s:Test/s:anotherString[@sneaky=$0]")
String getWorld(String sneaky);
@XPathMethod("/s:Test/s:booleanExists")
Boolean booleanExists();
@XPathMethod("/s:Test/s:doesNotExist")
Boolean booleanDoesNotExist();
@XPathMethod("/s:Test/s:booleanTrue")
Boolean booleanTrueValue();
@XPathMethod("/s:Test/s:booleanFalse")
Boolean booleanFalseValue();
@XPathMethod("/s:Test/s:yes")
YesNo yesNo();
@XPathMethod("/s:Test/s:someDouble")
Double doubleValue();
}Instantiate the proxy with code like this... XPathProxyFactory<Sample> factory = new XPathProxyFactory<Sample>(Sample.class); factory.registerConverter(new EnumConverter(YesNo.class)); Sample proxy = factory.createProxy(requestElement); System.out.println(proxy.getHello()); The above would print "Hello" as that is the result of the xpath query annotated on that method. What XPathProxy does is essentially wrap a given DOM Node with an annotated interface for easy access. |