Details

    • Type: New Feature
    • Status: Closed
    • Priority: Minor
    • Resolution: Fixed
    • Affects Version/s: None
    • Fix Version/s: None
    • Component/s: XML
    • Labels:
      None

      Description

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

      I will paraphrase in case the forums ever get changed again

      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...

        Issue Links

          Activity

          Hide
          raykrueger Ray Krueger added a comment -

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

          Show
          raykrueger Ray Krueger added a comment - I've attached xml-tiger-2007-11-20.zip as the latest, and possibly final, fileset for xml-tiger.
          Hide
          raykrueger Ray Krueger added a comment -

          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.

          Show
          raykrueger Ray Krueger added a comment - 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.
          Hide
          arjen.poutsma Arjen Poutsma added a comment -

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

          Show
          arjen.poutsma Arjen Poutsma added a comment - Sorry, but I have no time to put this in 1.5 M2. Hopefully, I will have time for 1.5 RC.
          Hide
          arjen.poutsma Arjen Poutsma added a comment -

          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.

          Show
          arjen.poutsma Arjen Poutsma added a comment - 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.
          Hide
          raykrueger Ray Krueger added a comment -

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

          Thanks!

          Show
          raykrueger Ray Krueger added a comment - I'm retracting this again heh I'm hoping to take this in a different direction that won't involve WS usage. Thanks!

            People

            • Assignee:
              arjen.poutsma Arjen Poutsma
              Reporter:
              raykrueger Ray Krueger
            • Votes:
              1 Vote for this issue
              Watchers:
              2 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: