on 04-05-2016 2:11 PM
Dear Scn Guys,
I have requirement to add data to below in the Soap header part using a XSLT file.
Can somebody help me with the requirement.
<SOAP-ENV:Header xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsa="http://www.w3.org/2005/08/addressing" xmlns:#### ="http://www.####.ca/fw/serviceHeaders">
<wsa:To/>
<wsa:From>
<wsa:Address/>
</wsa:From>
<wsa:ReplyTo>
<wsa:Address/>
</wsa:ReplyTo>
<wsa:FaultTo>
<wsa:Address/>
</wsa:FaultTo>
<wsa:Action/>
<wsa:MessageID/>
<wsse:Security xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsu:Timestamp>
<wsu:Created>2016-3-4T11:49:7</wsu:Created>
<wsu:Expires/>
</wsu:Timestamp>
<wsse:UsernameToken>
<wsse:Username/>
<wsse:Password/>
<wsse:Nonce/>
</wsse:UsernameToken>
</wsse:Security>
<nbfgh:serviceContext>
<clientCode/>
<partnerCode/>
<userProfile/>
<locale/>
<prevMsgId/>
</nbfgh:serviceContext>
<nbfgh:executionMode>
<mockWhere/>
<mockType/>
</nbfgh:executionMode>
</SOAP-ENV:Header>
Regards
S Tomar
This looks like a ws security soap header.
This can be natively inserted using the soap adapter. No need to write a xslt mapping for the same.
Security Settings for the Receiver SOAP Adapter - Integration Directory - SAP Library
Regards
Bhavesh
Message was edited by: Bhavesh Kantilal- typo error fixed
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hi SCN Guys,
still not abe to resolve the problem as getting mapping error in XSLT Transformation when i had added below code for header part to my existing XSL.
Note : This is an receiver JMS adapter and header values are dynamically fetched at runtime for which I need a piece of XSL code( Header part only) rest my code is giving the expected outputs.
Code used in mapping to fetch values at runtime (PFB snap shot) so i need to call somehow this function library output in XSL code.
Could some please help....!! 😞 to resolve my query
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<xsl:template match="/*[local-name()='Envelope']/*[local-name()='Header']">
<SOAP-ENV:Header>
<xsl:call-template name="ESBHeader"></xsl:call-template>
<xsl:call-template name="ContextHeader"></xsl:call-template>
</SOAP-ENV:Header>
</xsl:template>
<xsl:template name="ESBHeader">
<xsl:variable name="Headeradfad">
<head:ESBHeader >
<head:ESBProps>
<head:Property>
<head:name/>
<head:value/>
</head:Property>
</head:ESBProps>
</head:ESBHeader>
</xsl:variable>
<xsl:copy-of select="$Headeradfad"></xsl:copy-of>
</xsl:template>
<xsl:template name="ContextHeader">
<con:Context >
<con:CtxProps>
<con:Property>
<con:name/>
<con:value/>
</con:Property>
</con:CtxProps>
</con:Context>
</xsl:template>
</xsl:stylesheet>
<SOAP-ENV:Body>
<xsl:copy-of select="." />
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
</xsl:template>
</xsl:stylesheet>
Hey Ragu,
Scenario is WS(Sender) Channel ----> JMS (Receiver) [Create Soap Envelope Functionality in ESR ]
we are introducing XSL code just after message mapping to Create Soap envelope structure, wherein to get below output for header tag we need to call the User-defined function somehow of Message Mapping to access header information for Receiver JMS adapter which is accessible through the Global Container object (Already it was previously coded in existing message mapping)
<SOAP-ENV:Header xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsa="http://www.w3.org/2005/08/addressing" xmlns:#### ="http://www.####.ca/fw/serviceHeaders">
<wsa:To/>
<wsa:From>
<wsa:Address/>
</wsa:From>
<wsa:ReplyTo>
<wsa:Address/>
</wsa:ReplyTo>
<wsa:FaultTo>
<wsa:Address/>
</wsa:FaultTo>
<wsa:Action/>
<wsa:MessageID/>
<wsse:Security xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsu:Timestamp>
<wsu:Created>2016-3-4T11:49:7</wsu:Created>
<wsu:Expires/>
</wsu:Timestamp>
<wsse:UsernameToken>
<wsse:Username/>
<wsse:Password/>
<wsse:Nonce/>
</wsse:UsernameToken>
</wsse:Security>
<nbfgh:serviceContext>
<clientCode/>
<partnerCode/>
<userProfile/>
<locale/>
<prevMsgId/>
</nbfgh:serviceContext>
<nbfgh:executionMode>
<mockWhere/>
<mockType/>
</nbfgh:executionMode>
</SOAP-ENV:Header>
Hi Ragu,
Thanks for your input 🙂
but is there is no way to do it by XSL code ?? like i read some threads to change dynamic config values and get session ID in Soap header (refer Snap shot)
So can we do same for SOAP header output tags <wsa>,<<wsse> for which below set and get functions are already written and present in global containers and called during message mapping .
setDynConfStatus
setJmsAsma
setGenericAsma
setSOAPheaderAttr
getSOAPheaderAttr
suppressNode
cleanUp
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:map="java:java.util.Map"
xmlns:dyn="java:com.sap.aii.mapping.api.DynamicConfiguration"
xmlns:key="java:com.sap.aii.mapping.api.DynamicConfigurationKey">
<xsl:output indent="no" />
<xsl:param name="inputparam"/>
<xsl:template match="/">
<!-- change dynamic configuration -->
<xsl:variable name="dynamic-conf"
select="map:get($inputparam, 'DynamicConfiguration')" />
<xsl:variable name="dynamic-key"
select="key:create('http://sap.com/xi/XI/System/File', 'Directory')" />
<xsl:variable name="dynamic-value"
select="dyn:get($dynamic-conf, $dynamic-key)" />
<xsl:variable name="new-value"
select="concat($dynamic-value, 'subfolder\')" />
<xsl:variable name="dummy"
select="dyn:put($dynamic-conf, $dynamic-key, $new-value)" />
<!-- copy payload -->
<xsl:copy-of select="." />
</xsl:template>
</xsl:stylesheet>
__________________________________________________________________
Code to get Session ID in Soap Header
####################################
<soapenv:Header>
<urn:SessionHeader>
<xsl:variable name="dynamic-conf" select="map:get($inputparam, 'DynamicConfiguration')" />
<xsl:variable name="dynamic-key" select="key:create('http://sap.com/xi/XI/System/SOAP', 'sessionId')" />
<xsl:variable name="dynamic-value" select="dyn:get($dynamic-conf, $dynamic-key)" />
<urn:sessionId><xsl:value-of select="$dynamic-value"></xsl:value-of></urn:sessionId>
</urn:SessionHeader>
</soapenv:Header>
Below is the code ... sharing it so that it can be helpful for others too as i tested it and it's showing the results..
Closing the thread..!!
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:map="java:java.util.Map"
xmlns:dyn="java:com.sap.aii.mapping.api.DynamicConfiguration"
xmlns:key="java:com.sap.aii.mapping.api.DynamicConfigurationKey">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:param name="inputparam"/>
<xsl:template match="/">
<xsl:variable name="dynamic-conf" select="map:get($inputparam, 'DynamicConfiguration')" />
<xsl:variable name="config-namespace" select="'http://www.nbfg.ca/pi/async/soapHeader/dynamic/config'" />
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header xmlns:nbfgh="http://www.nbfg.ca/fw/serviceHeaders" xmlns:wsa="http://www.w3.org/2005/08/addressing" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<xsl:variable name="dynamic-key" select="key:create($config-namespace, 'wsa:To')" />
<xsl:variable name="dynamic-value" select="dyn:get($dynamic-conf, $dynamic-key)" />
<xsl:if test="$dynamic-value != ''">
<wsa:To>
<xsl:value-of select="$dynamic-value"/>
</wsa:To>
</xsl:if>
<xsl:variable name="dynamic-key" select="key:create($config-namespace, 'wsa:From')" />
<xsl:variable name="dynamic-value" select="dyn:get($dynamic-conf, $dynamic-key)" />
<xsl:if test="$dynamic-value != ''">
<wsa:From>
<wsa:Address>
<xsl:value-of select="$dynamic-value"/>
</wsa:Address>
</wsa:From>
</xsl:if>
<xsl:variable name="dynamic-key" select="key:create($config-namespace, 'wsa:ReplyTo')" />
<xsl:variable name="dynamic-value" select="dyn:get($dynamic-conf, $dynamic-key)" />
<xsl:if test="$dynamic-value != ''">
<wsa:ReplyTo>
<wsa:Address>
<xsl:value-of select="$dynamic-value"/>
</wsa:Address>
</wsa:ReplyTo>
</xsl:if>
<xsl:variable name="dynamic-key" select="key:create($config-namespace, 'wsa:FaultTo')" />
<xsl:variable name="dynamic-value" select="dyn:get($dynamic-conf, $dynamic-key)" />
<xsl:if test="$dynamic-value != ''">
<wsa:FaultTo>
<wsa:Address>
<xsl:value-of select="$dynamic-value"/>
</wsa:Address>
</wsa:FaultTo>
</xsl:if>
<xsl:variable name="dynamic-key" select="key:create($config-namespace, 'wsa:Action')" />
<xsl:variable name="dynamic-value" select="dyn:get($dynamic-conf, $dynamic-key)" />
<xsl:if test="$dynamic-value != ''">
<wsa:Action>
<xsl:value-of select="$dynamic-value"/>
</wsa:Action>
</xsl:if>
<xsl:variable name="dynamic-key" select="key:create($config-namespace, 'wsa:MessageID')" />
<xsl:variable name="dynamic-value" select="dyn:get($dynamic-conf, $dynamic-key)" />
<wsa:MessageID>
<xsl:value-of select="$dynamic-value"/>
</wsa:MessageID>
<wsse:Security xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsu:Timestamp>
<wsu:Created></wsu:Created>
<xsl:variable name="dynamic-key" select="key:create($config-namespace, 'wsu:Expires')" />
<xsl:variable name="dynamic-value" select="dyn:get($dynamic-conf, $dynamic-key)" />
<xsl:if test="$dynamic-value != ''">
<wsu:Expires>
<xsl:value-of select="$dynamic-value"/>
</wsu:Expires>
</xsl:if>
</wsu:Timestamp>
<wsse:UsernameToken>
<xsl:variable name="dynamic-key" select="key:create($config-namespace, 'wsse:Username')" />
<xsl:variable name="dynamic-value" select="dyn:get($dynamic-conf, $dynamic-key)" />
<xsl:if test="$dynamic-value != ''">
<wsse:Username>
<xsl:value-of select="$dynamic-value"/>
</wsse:Username>
</xsl:if>
<xsl:variable name="dynamic-key" select="key:create($config-namespace, 'wsse:Password')" />
<xsl:variable name="dynamic-value" select="dyn:get($dynamic-conf, $dynamic-key)" />
<xsl:if test="$dynamic-value != ''">
<wsse:Password>
<xsl:value-of select="$dynamic-value"/>
</wsse:Password>
</xsl:if>
<xsl:variable name="dynamic-key" select="key:create($config-namespace, 'wsse:Nonce')" />
<xsl:variable name="dynamic-value" select="dyn:get($dynamic-conf, $dynamic-key)" />
<xsl:if test="$dynamic-value != ''">
<wsse:Nonce>
<xsl:value-of select="$dynamic-value"/>
</wsse:Nonce>
</xsl:if>
</wsse:UsernameToken>
</wsse:Security>
<nbfgh:serviceContext>
<xsl:variable name="dynamic-key" select="key:create($config-namespace, 'nbfgh:clientCode')" />
<xsl:variable name="dynamic-value" select="dyn:get($dynamic-conf, $dynamic-key)" />
<xsl:if test="$dynamic-value != ''">
<clientCode>
<xsl:value-of select="$dynamic-value"/>
</clientCode>
</xsl:if>
<xsl:variable name="dynamic-key" select="key:create($config-namespace, 'nbfgh:partnerCode')" />
<xsl:variable name="dynamic-value" select="dyn:get($dynamic-conf, $dynamic-key)" />
<xsl:if test="$dynamic-value != ''">
<partnerCode>
<xsl:value-of select="$dynamic-value"/>
</partnerCode>
</xsl:if>
<xsl:variable name="dynamic-key" select="key:create($config-namespace, 'nbfgh:userProfile')" />
<xsl:variable name="dynamic-value" select="dyn:get($dynamic-conf, $dynamic-key)" />
<xsl:if test="$dynamic-value != ''">
<userProfile>
<xsl:value-of select="$dynamic-value"/>
</userProfile>
</xsl:if>
<xsl:variable name="dynamic-key" select="key:create($config-namespace, 'nbfgh:locale')" />
<xsl:variable name="dynamic-value" select="dyn:get($dynamic-conf, $dynamic-key)" />
<xsl:if test="$dynamic-value != ''">
<locale>
<xsl:value-of select="$dynamic-value"/>
</locale>
</xsl:if>
<xsl:variable name="dynamic-key" select="key:create($config-namespace, 'nbfgh:prevMsgId')" />
<xsl:variable name="dynamic-value" select="dyn:get($dynamic-conf, $dynamic-key)" />
<xsl:if test="$dynamic-value != ''">
<prevMsgId>
<xsl:value-of select="$dynamic-value"/>
</prevMsgId>
</xsl:if>
</nbfgh:serviceContext>
<nbfgh:executionMode>
<xsl:variable name="dynamic-key" select="key:create($config-namespace, 'nbfgh:mockWhere')" />
<xsl:variable name="dynamic-value" select="dyn:get($dynamic-conf, $dynamic-key)" />
<xsl:if test="$dynamic-value != ''">
<mockWhere>
<xsl:value-of select="$dynamic-value"/>
</mockWhere>
</xsl:if>
<xsl:variable name="dynamic-key" select="key:create($config-namespace, 'nbfgh:mockType')" />
<xsl:variable name="dynamic-value" select="dyn:get($dynamic-conf, $dynamic-key)" />
<xsl:if test="$dynamic-value != ''">
<mockType>
<xsl:value-of select="$dynamic-value"/>
</mockType>
</xsl:if>
</nbfgh:executionMode>
</SOAP-ENV:Header>
<SOAP-ENV:Body>
<xsl:copy-of select="." />
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
</xsl:template>
</xsl:stylesheet>
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hello Tomar,
Check if the below link helps you
[SAP PI] &#8211; Customize Message with XSLT Mapping | Simon Les Flex&#039;s Blog
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hi Raghu,
Thanks for your prompt reply 🙂 , but I want to insert code for header(in below) such that above tags and its data is there in the output xml ,once the xslt is executed
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header>
</SOAP-ENV:Header>
<SOAP-ENV:Body>
<xsl:copy-of select="." />
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
</xsl:template>
</xsl:stylesheet>
User | Count |
---|---|
85 | |
23 | |
11 | |
9 | |
8 | |
5 | |
5 | |
5 | |
5 | |
4 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.