Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Contribution: XPathProxy [SWS-157] #311

Closed
gregturn opened this issue Jul 11, 2007 · 12 comments
Closed

Contribution: XPathProxy [SWS-157] #311

gregturn opened this issue Jul 11, 2007 · 12 comments
Assignees

Comments

@gregturn
Copy link
Member

@gregturn gregturn commented Jul 11, 2007

Ray Krueger opened SWS-157 and commented

Previously mentioned here:
http://forum.springframework.org/showthread.php?t=41191

I will paraphrase in case the forums ever get changed again :P

I've built something here that might be a nice addition to an xml-tiger package.

Basically, it allows me to access xml like this (from my unit test):

<?xml version="1.0" encoding="UTF-8"?>
<s:Test xmlns:s="http://www.springframework.org/ws">
  <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 a proxy generated for an interface that looks like this (again from the unit test):

@NamespaceMapping(prefix = "s", uri = "http://www.springframework.org/ws")
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();
}

Quick notes...
The "getWorld" method uses an XPathVariableResolver to map the method arguments to xpath variables.

Like the XPathParam stuff in spring-ws, it supports the standard XPath types (String, Boolean, Double, Node, NodeList...). as well as using special Converters.

YesNo in the example above is an enum, a converter is registered with the XPathProxyFactory that allows the conversion of a string to some object.

XPath Booleans are touchy, they are based on existence, not content. This is the default behavior for the XPath proxy as well. Registering a Converter for Booleans though allows s:booleanFalse element above to evaluate to 'false'.

I figured that a spring-xml-tiger package would be a good home for it as it is all JAXP and Annotations. If not, maybe I'll toss it up to sourceforge or googlecode.

I'll attach a zip containing the code. Mind you it's totally "first-draft" quality; the package is "raykrueger.xpathproxy" and has almost no javadoc yet...


Attachments:

Issue Links:

  • #313 XPath support needs Function and Variable resolvers...
    ("depends on")
  • #448 Annotation-based version of XPathPayloadEndpointMapping

1 votes, 2 watchers

@gregturn
Copy link
Member Author

@gregturn gregturn commented Jul 18, 2007

Ray Krueger commented

xml-tiger is the new upload.

The package has been changed to org.springframework.xml.xpath.proxy

I cannot cut the XPath stuff over to the Spring XPathExpression abstractions completely until #313 is complete.

The XPathProxy stuff relies on XPathVariableResolvers, and that abstraction doesn't exist yet.

@gregturn
Copy link
Member Author

@gregturn gregturn commented Aug 16, 2007

Ray Krueger commented

I have opened a project for this at google code.
http://xpathproxy.googlecode.com/

I decided to do this as the current model doesn't rely on Spring at all an can be used in any java5 application. I was forcing Spring into it rather needlessly.

I have created a module of the project with spring-ws support for a AbstractXPathProxyPayloadEndpoint.
http://xpathproxy.googlecode.com/svn/trunk/spring-ws/src/main/java/com/googlecode/xpathproxy/spring/ws/endpoint/AbstractXPathProxyPayloadEndpoint.java
It extends the AbstractDomPayloadEndpoint so that it can wrap the request elment with the xpath proxy.

This allows for endpoints to be written that look like...

    public class XPathTargetEndpoint extends AbstractXPathProxyPayloadEndpoint<XPathTarget> {

        public XPathTargetEndpoint() {
            super(XPathTarget.class);
        }

        protected Element invokeWithProxy(XPathTarget proxy, Document responseDocument) throws Exception {
                ................
        }
    }
@gregturn
Copy link
Member Author

@gregturn gregturn commented Aug 16, 2007

Ray Krueger commented

No real reason to submit this to Spring now, so I'll close this.

@gregturn
Copy link
Member Author

@gregturn gregturn commented Aug 16, 2007

Ray Krueger commented

Sorry, this should be closed as "Won't Fix"

@gregturn
Copy link
Member Author

@gregturn gregturn commented Aug 16, 2007

Arjen Poutsma commented

Ok, I still think it's a great idea, and I can totally see why you don't want a Spring dependency. Good luck!

@gregturn
Copy link
Member Author

@gregturn gregturn commented Sep 30, 2007

Ray Krueger commented

I am going to re-open this.

Throwing it up on Google code was done just so I could start using it immediately. Really, having it out there permanently doesn't make since give that the project is like one class :)

I'll repackage it and upload it soon. Again, as a submission to a new spring-xml-tiger module.

@gregturn
Copy link
Member Author

@gregturn gregturn commented Nov 6, 2007

Ray Krueger commented

I'm gonna get this ported over for 1.1, I swear it.

@gregturn
Copy link
Member Author

@gregturn gregturn commented Nov 19, 2007

Ray Krueger commented

I've attached xml-tiger-2007-11-20.zip as the latest, and possibly final, fileset for xml-tiger.

@gregturn
Copy link
Member Author

@gregturn gregturn commented Nov 19, 2007

Ray Krueger commented

Arjen, would you mind reviewing xml-tiger-2007-11-20.zip?
Let me know if there are any code changes to be made. None of the files have headers, and probably aren't formatted to the project style.

I have not included the AbstractXPathProxyPayloadEndpoint in this initial set as it was part of a different module in the original project. I'll work on including that and support for an EndpointAdapter as well.

@gregturn
Copy link
Member Author

@gregturn gregturn commented Feb 7, 2008

Arjen Poutsma commented

Sorry, but I have no time to put this in 1.5 M2. Hopefully, I will have time for 1.5 RC.

@gregturn
Copy link
Member Author

@gregturn gregturn commented May 5, 2008

Arjen Poutsma commented

Since this feature requires a new module (xml-tiger), I simply cannot introduce this in 1.5.x, as much as I'd like to. Postponing to 1.6.

@gregturn
Copy link
Member Author

@gregturn gregturn commented Oct 26, 2008

Ray Krueger commented

I'm retracting this again :P heh
I'm hoping to take this in a different direction that won't involve WS usage.

Thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Linked pull requests

Successfully merging a pull request may close this issue.

None yet
2 participants
You can’t perform that action at this time.