IBM webMethods Hybrid Integration

IBM webMethods Hybrid Integration

Join this online group to communicate across IBM product users and experts by sharing advice and best practices with peers and staying up to date regarding product enhancements.


#TechXchangePresenter
 View Only
  • 1.  Using WmPublic functions inside xslt stylesheet

    Posted Wed July 21, 2010 04:44 PM

    Hi,

    I’m pretty new at this so…

    However, I searched the forums for “xslt” and didn’t find anything specific as to what I’m looking for.

    Let’s say I wanted to call the addInts service from the WmPublic package from my xslt stylesheet, how would I go about it? I know there’s other ways to make simple additions, but bear with me for the sake of knowing how to do it.

    I tried the example from page 29 of the XSLTServiceDevGuide, using this namespace:

    [FONT=Courier][SIZE=1]xmlns:IntDate=“java://com.wm.pkg.xslt.samples.date.IntDate”

    It worked. Great. After finding where math.class was in the WmPublic package, I used this namespace:

    xmlns:addInts=“java://pub.math”

    and this snippet:

    <xsl:value-of select=“math:addInts(‘5’, ‘5’)”

    This didn’t work. I got the “JAXP: Error instantiating transformer” message.

    First obvious question: Is it possible to do what I want to do? On Developper 6.5 by the way.

    Any tips appreciated. Here’s the test xslt stylesheet I’m using:

    [/SIZE][/FONT]

     
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="[URL]http://www.w3.org/1999/XSL/Transform[/URL]"
    xmlns:IntDate="java://com.wm.pkg.xslt.samples.date.IntDate"
    xmlns:addInts="java://pub.math">
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
    <xsl:param name="MyParam1"></xsl:param> 
    <xsl:template match="/">
    <xsl:element name="EDITRANSACTIONSET">
    <xsl:element name="EDIDOCUMENTTYPE"><xsl:value-of select="//EDIDOCUMENTTYPE"/></xsl:element>
    <xsl:element name="EDIDOCUMENTNUMBER"><xsl:value-of select="//EDIDOCUMENTNUMBER"/></xsl:element>
    <xsl:element name="NOCOMMANDE"><xsl:value-of select="//NOCOMMANDE"/></xsl:element>
    <xsl:element name="DATECOMMANDE"><xsl:value-of select="math:addInts('5', '5')"/></xsl:element>
    <xsl:element name="DATELIVRAISON"><xsl:value-of select="IntDate:getDate('2010','07','20','12','12','12')"/></xsl:element>
    <xsl:element name="MESSAGE"><xsl:value-of select="$MyParam1"/></xsl:element>
    <xsl:element name="ADDRESSNUMBERSHIPTO"><xsl:value-of select="//ADDRESSNUMBERSHIPTO"/></xsl:element>
    <xsl:element name="LISTECOMMANDESDA">
    <xsl:for-each select="//COMMANDESDA">
    <xsl:sort select="QTECOMMANDE"/>
    <xsl:element name="COMMANDESDA">
    <xsl:element name="QTECOMMMANDE"><xsl:value-of select="QTECOMMANDE"/></xsl:element>
    <xsl:choose>
    <xsl:when test="UNITE = 'BT' ">
    <xsl:element name="UNITE"><xsl:text>BOUTEILLE</xsl:text></xsl:element>
    </xsl:when>
    <xsl:otherwise>
    <xsl:element name="UNITE"><xsl:text>CAISSE</xsl:text></xsl:element>
    </xsl:otherwise>
    </xsl:choose>
    <xsl:element name="CODEUPC"><xsl:value-of select="CODEUPC"/></xsl:element>
    </xsl:element>
    </xsl:for-each>
    </xsl:element>
    </xsl:element>
    </xsl:template>
    </xsl:stylesheet>

    #Integration-Server-and-ESB
    #Flow-and-Java-services
    #webMethods


  • 2.  RE: Using WmPublic functions inside xslt stylesheet

    Posted Wed July 21, 2010 08:42 PM

    did you try to use:
    <xsl:value-of select=“$var1 + $var2” />
    to directly do the math?


    #webMethods
    #Integration-Server-and-ESB
    #Flow-and-Java-services


  • 3.  RE: Using WmPublic functions inside xslt stylesheet

    Posted Wed July 21, 2010 09:24 PM

    Hi,

    I know there are other ways to do the additions. I picked the addInts from WmPublic because it’s a simple example to use. I could have chosen any other service from the WmPublic package as an example. The goal on my post is really to know how I could call whatever service coming from WmPublic (or another WmXX package) from my xslt stylesheet.

    Actually, what would help tremendously is if anobody could give me a hint as to what would be the correct namespace for the math class under WmPublic. For the IntDate example I posted above, the namespace is java://com.wm.pkg.xslt.samples.date.IntDate. It happens that the IntDate.class is in the following directory in our environment:

    /opt/webMethods7/IntegrationServer/packages/WmXSLT/code/classes/com/wm/pkg/xslt/samples/date

    I tried the example from the documentation and it works. In our environment, math.class is there:

    /opt/webMethods7/IntegrationServer/packages/WmPublic/code/classes/pub

    That’s why I thought that my namespace would be “java://pub.math” but it doesn’t work, probably because it’s not the right namespace. I’ve been searching like crazy for the right namespace but I can’t find it.


    #Flow-and-Java-services
    #Integration-Server-and-ESB
    #webMethods


  • 4.  RE: Using WmPublic functions inside xslt stylesheet

    Posted Wed July 21, 2010 11:37 PM

    No you can’t, because public Built-in services uses Idata as input/output parameters for the methods, and XSLT will use The IOutputMap
    interface (com.wm.pkg.xslt.extension.IOutputMap) , and will put values as IOutputMap.put(Object name, Object value) to add name/value pairs to an output object of type IOutputMap.

    When you add in the XSLT:
    IntDate:getDate(‘2010’,‘07’,‘20’,‘12’,‘12’,‘12’)

    That will excute methods getDate passing 6 String arguments, and the method will return a Date object which will be placed in the interface IOutputMap.put(Object name, Object value)

    You can build your own Java classes, but not possible using built-in ones.


    #Flow-and-Java-services
    #webMethods
    #Integration-Server-and-ESB


  • 5.  RE: Using WmPublic functions inside xslt stylesheet

    Posted Thu July 22, 2010 02:47 AM

    Well, thanks for clearing that up. I was looking left and right like crazy in trying to make this work. I believe the built-in services like what you can find in the WmPublic are written in Java (which I’m not that familiar with, Java that is) and I figured it could be done. Damn… would have been nice.


    #webMethods
    #Integration-Server-and-ESB
    #Flow-and-Java-services