You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@servicemix.apache.org by "Ramon Buckland (JIRA)" <ji...@apache.org> on 2006/07/19 06:49:23 UTC

[jira] Created: (SM-489) XalanComponent (XSLT Transform Component)

XalanComponent (XSLT Transform Component)
-----------------------------------------

                 Key: SM-489
                 URL: https://issues.apache.org/activemq/browse/SM-489
             Project: ServiceMix
          Issue Type: Improvement
          Components: servicemix-components
    Affects Versions: 3.0
            Reporter: Ramon Buckland
            Priority: Minor
             Fix For: 3.0-M3


In the XalanComponent.setOutProperty (in xsl <jbi:setOutProperty />)

the Object that is set on the JBI as a property is always a String,



    ref:

/servicemix-components/src/main/java/org/apache/servicemix/components/xslt/XalanExtension.java:181



however from XSLT (xpath expressions) we can have a

    number()  (which is a double)

    boolean()  (T / F)

    string()   (ye olde string)



To have a number (Object java.lang.Number) in the JBI property is handy when we want to

"integrate" with, for eg: the SplitAggregator

which needs the "count" property but String's don't cut it there 
as it does a direct "assumed" cast from message.getPropery(name) to Integer

    org.apache.servicemix.eip.splitter.count

as an Integer

    ref

/servicemix-eip/src/main/java/org/apache/servicemix/eip/patterns/SplitAggregator.java:194



The patch proposes to allow a number to go in if the "xstl" make it a number.

One way this could now be achieved with this patch is via direct casting using the
xpath function number()
<jbi:setOutProperty 
   name="org.apache.servicemix.eip.splitter.count"
   select="number(123)"/>

-- Proposed Patch--



Index: XalanExtension.java

===================================================================

--- XalanExtension.java    (revision 421260)

+++ XalanExtension.java    (working copy)

@@ -15,6 +15,7 @@

  */

package org.apache.servicemix.components.xslt;



+import org.apache.commons.lang.math.NumberUtils;

import org.apache.servicemix.components.util.ComponentSupport;

import org.apache.servicemix.components.util.CopyTransformer;

import org.apache.servicemix.components.util.MarshalerSupport;

@@ -179,7 +180,21 @@

             throw new IllegalArgumentException("Must specify a 'select'

attribute to set a property on the output message");

         }

         XObject answer =

ExsltDynamic.evaluate(context.getTransformer().getXPathContext().getExpressionContext(), 



xpath);

-        String value = answer.str();

+        Object value;

+        try {

+            if (answer.getType() == XObject.CLASS_NUMBER) {

+                value = NumberUtils.createNumber(answer.str());

+            } else if (answer.getType() == XObject.CLASS_BOOLEAN) {

+                value = new Boolean(answer.bool());

+            } else {

+                // XObject guarantees we are never null.

+                value = answer.str();

+            }

+        } catch (TransformerException e) {

+            value = answer.str();

+        } catch (NumberFormatException e) {

+            value = answer.str();

+        }

         out.setProperty(name, value);

     }

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: https://issues.apache.org/activemq/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

[jira] Resolved: (SM-489) XalanComponent (XSLT Transform Component)

Posted by "Guillaume Nodet (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/activemq/browse/SM-489?page=all ]

Guillaume Nodet resolved SM-489.
--------------------------------

    Resolution: Fixed
      Assignee: Guillaume Nodet

Author: gnodet
Date: Mon Jul 24 01:15:23 2006
New Revision: 424958

URL: http://svn.apache.org/viewvc?rev=424958&view=rev
Log:
SM-489: XalanComponent.setOutProperty (in xsl <jbi:setOutProperty />) is always a string
Patch provided by Ramon Buckland

Modified:
    incubator/servicemix/trunk/servicemix-components/src/main/java/org/apache/servicemix/components/xslt/XalanExtension.java
    incubator/servicemix/trunk/servicemix-components/src/test/java/org/apache/servicemix/components/xslt/OptionalAxisQueriesTest.java



> XalanComponent (XSLT Transform Component)
> -----------------------------------------
>
>                 Key: SM-489
>                 URL: https://issues.apache.org/activemq/browse/SM-489
>             Project: ServiceMix
>          Issue Type: Improvement
>          Components: servicemix-components
>    Affects Versions: 3.0
>            Reporter: Ramon Buckland
>         Assigned To: Guillaume Nodet
>            Priority: Minor
>             Fix For: 3.0-M3
>
>         Attachments: XalanComponent.patch
>
>
> In the XalanComponent.setOutProperty (in xsl <jbi:setOutProperty />)
> the Object that is set on the JBI as a property is always a String,
>     ref:
> /servicemix-components/src/main/java/org/apache/servicemix/components/xslt/XalanExtension.java:181
> however from XSLT (xpath expressions) we can have a
>     number()  (which is a double)
>     boolean()  (T / F)
>     string()   (ye olde string)
> To have a number (Object java.lang.Number) in the JBI property is handy when we want to
> "integrate" with, for eg: the SplitAggregator
> which needs the "count" property but String's don't cut it there 
> as it does a direct "assumed" cast from message.getPropery(name) to Integer
>     org.apache.servicemix.eip.splitter.count
> as an Integer
>     ref
> /servicemix-eip/src/main/java/org/apache/servicemix/eip/patterns/SplitAggregator.java:194
> The patch proposes to allow a number to go in if the "xstl" make it a number.
> One way this could now be achieved with this patch is via direct casting using the
> xpath function number()
> <jbi:setOutProperty 
>    name="org.apache.servicemix.eip.splitter.count"
>    select="number(123)"/>
> -- Proposed Patch--
> Index: XalanExtension.java
> ===================================================================
> --- XalanExtension.java    (revision 421260)
> +++ XalanExtension.java    (working copy)
> @@ -15,6 +15,7 @@
>   */
> package org.apache.servicemix.components.xslt;
> +import org.apache.commons.lang.math.NumberUtils;
> import org.apache.servicemix.components.util.ComponentSupport;
> import org.apache.servicemix.components.util.CopyTransformer;
> import org.apache.servicemix.components.util.MarshalerSupport;
> @@ -179,7 +180,21 @@
>              throw new IllegalArgumentException("Must specify a 'select'
> attribute to set a property on the output message");
>          }
>          XObject answer =
> ExsltDynamic.evaluate(context.getTransformer().getXPathContext().getExpressionContext(), 
> xpath);
> -        String value = answer.str();
> +        Object value;
> +        try {
> +            if (answer.getType() == XObject.CLASS_NUMBER) {
> +                value = NumberUtils.createNumber(answer.str());
> +            } else if (answer.getType() == XObject.CLASS_BOOLEAN) {
> +                value = new Boolean(answer.bool());
> +            } else {
> +                // XObject guarantees we are never null.
> +                value = answer.str();
> +            }
> +        } catch (TransformerException e) {
> +            value = answer.str();
> +        } catch (NumberFormatException e) {
> +            value = answer.str();
> +        }
>          out.setProperty(name, value);
>      }

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: https://issues.apache.org/activemq/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

[jira] Updated: (SM-489) XalanComponent (XSLT Transform Component)

Posted by "Ramon Buckland (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/activemq/browse/SM-489?page=all ]

Ramon Buckland updated SM-489:
------------------------------

    Attachment: XalanComponent.patch

> XalanComponent (XSLT Transform Component)
> -----------------------------------------
>
>                 Key: SM-489
>                 URL: https://issues.apache.org/activemq/browse/SM-489
>             Project: ServiceMix
>          Issue Type: Improvement
>          Components: servicemix-components
>    Affects Versions: 3.0
>            Reporter: Ramon Buckland
>            Priority: Minor
>             Fix For: 3.0-M3
>
>         Attachments: XalanComponent.patch
>
>
> In the XalanComponent.setOutProperty (in xsl <jbi:setOutProperty />)
> the Object that is set on the JBI as a property is always a String,
>     ref:
> /servicemix-components/src/main/java/org/apache/servicemix/components/xslt/XalanExtension.java:181
> however from XSLT (xpath expressions) we can have a
>     number()  (which is a double)
>     boolean()  (T / F)
>     string()   (ye olde string)
> To have a number (Object java.lang.Number) in the JBI property is handy when we want to
> "integrate" with, for eg: the SplitAggregator
> which needs the "count" property but String's don't cut it there 
> as it does a direct "assumed" cast from message.getPropery(name) to Integer
>     org.apache.servicemix.eip.splitter.count
> as an Integer
>     ref
> /servicemix-eip/src/main/java/org/apache/servicemix/eip/patterns/SplitAggregator.java:194
> The patch proposes to allow a number to go in if the "xstl" make it a number.
> One way this could now be achieved with this patch is via direct casting using the
> xpath function number()
> <jbi:setOutProperty 
>    name="org.apache.servicemix.eip.splitter.count"
>    select="number(123)"/>
> -- Proposed Patch--
> Index: XalanExtension.java
> ===================================================================
> --- XalanExtension.java    (revision 421260)
> +++ XalanExtension.java    (working copy)
> @@ -15,6 +15,7 @@
>   */
> package org.apache.servicemix.components.xslt;
> +import org.apache.commons.lang.math.NumberUtils;
> import org.apache.servicemix.components.util.ComponentSupport;
> import org.apache.servicemix.components.util.CopyTransformer;
> import org.apache.servicemix.components.util.MarshalerSupport;
> @@ -179,7 +180,21 @@
>              throw new IllegalArgumentException("Must specify a 'select'
> attribute to set a property on the output message");
>          }
>          XObject answer =
> ExsltDynamic.evaluate(context.getTransformer().getXPathContext().getExpressionContext(), 
> xpath);
> -        String value = answer.str();
> +        Object value;
> +        try {
> +            if (answer.getType() == XObject.CLASS_NUMBER) {
> +                value = NumberUtils.createNumber(answer.str());
> +            } else if (answer.getType() == XObject.CLASS_BOOLEAN) {
> +                value = new Boolean(answer.bool());
> +            } else {
> +                // XObject guarantees we are never null.
> +                value = answer.str();
> +            }
> +        } catch (TransformerException e) {
> +            value = answer.str();
> +        } catch (NumberFormatException e) {
> +            value = answer.str();
> +        }
>          out.setProperty(name, value);
>      }

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: https://issues.apache.org/activemq/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira