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

            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: