[xsl] adding element in with general namespace prefix

Subject: [xsl] adding element in with general namespace prefix
From: ram <ram_kurra@xxxxxxxxxxx>
Date: Thu, 9 Feb 2012 03:06:06 +0530 (IST)
Hi,
   I have a soap request like the following
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/";
xmlns:con1="http://abc.com/DefService/"; >
	<soapenv:Header>

         </soapenv:Header>
	<soapenv:Body>
		<con1:GetDefinition>
			<!--Optional:-->
			<con1:Request><con1:Id/>
			</con1:Request>
		</con1:GetDefinition>
	</soapenv:Body>
</soapenv:Envelope>

I wanted to add ws:security with username credentials to the request like the
following.



<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:con="http://wellpoint.com/esb/context";
xmlns:con1="http://abc.com/DefService/>
<soapenv:Header>
<wsse:Security
xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurit
y-secext-1.0.xsd">
 <wsse:UsernameToken>
   <wsse:Username>abcd</wsse:Username>
   <wsse:Password>ramkurra</wsse:Password>
 </wsse:UsernameToken>
</wsse:Security>
</soapenv:Header>
<soapenv:Body>
   <con1:GetDefinition>
	<con1:Id/>
	</con1:Response>
   </con1:GetDefinition>
</soapenv:Body>
</soapenv:Envelope>


i tried with the following piece of code

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
<xsl:template match="@*|node()">
    <xsl:copy>
	<xsl:apply-templates select="@*|node()"/>
   </xsl:copy>

</xsl:template>
<xsl:template match="/*[local-name()='Envelope']/*[local-name()='Header']">
<soapenv:Header xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/";>
<wsse:Security
xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurit
y-secext-1.0.xsd">
<wsse:UsernameToken>
   <wsse:Username>	abc</wsse:Username>
   <wsse:Password>	xya</wsse:Password>
</wsse:UsernameToken>
</wsse:Security>
</soapenv:Header>
</xsl:template>
</xsl:stylesheet>

    i get the result as expected, but my problem is when client sends the
request with different namespace name rather than soapenv:Header, like
s:Header, the following line of code will still put soapenv:Header in the
result
<soapenv:Header xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/";>

   I wanted to make this namespace prefix is more of generalized manner, which
picks from request.
      So any idea how to fix it.

Current Thread