从IBM Datapower网关中提取内容处置详细信息

时间:2018-07-22 18:28:08

标签: header ibm-datapower

我想从AS2标头中的Content-Disposition中提取文件名,并将其分配给IBM Datapower网关中的变量。我们是否有dp:服务变量来提取它。

2 个答案:

答案 0 :(得分:0)

我认为DataPower上没有仅用于AS2消息的Content-Disposition标头的文件名的特定变量。 但是,Content-Dispositon标头应该是H​​TTP标头集的一部分,您可以通过header-manifest变量根据请求或响应进行查询。一旦有了,只需查询相关标头的值即可,在本例中为“ Content-Disposition”。 您可以使用XSLT或GatewayScript执行此操作。 作为一个重载示例(未完全减少到您的用例),以下XSLT遍历清单,然后使用dp:http-request-header(...)查询从标头清单中检索到的每个标头名称的值,以获取个人价值观。获得Content-Disposition值后,只需对“ filename = ...;”进行子字符串化一部分。 我希望这对于学习和抓住想法足够有趣吗?

<xsl:stylesheet version="1.0" 
     xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
     xmlns:dp="http://www.datapower.com/extensions" 
     extension-element-prefixes="dp"> 
<xsl:output omit-xml-declaration="yes" /> 

<xsl:template match="/"> 
    <xsl:apply-templates select="dp:variable('var://service/header-manifest')/headers/header" /> 
</xsl:template> 

<xsl:template match="header"/> 

<xsl:template match="header[. != 'xsl']"> 
    <property> 
        <xsl:attribute name="name"><xsl:value-of select="."/></xsl:attribute> 
        <xsl:value-of select="dp:http-request-header(.)"/> 
    </property><xsl:text>&#10;</xsl:text> 

    <xsl:variable name="input" select="dp:http-request-header(.)"/> 
    <xsl:message dp:priority="warning"><xsl:copy-of select="." />: <xsl:copy-of select="$input" /></xsl:message> 
</xsl:template> 
</xsl:stylesheet>

答案 1 :(得分:0)

AugustZ的答案非常适合HTTP标头,但是,对于AS2的内容处置(文件名),您首先必须在DataPower的AS2合作伙伴设置中启用“保留文件名”,否则DataPower剥离信息。 / p>

AS2的Content-Disposition文件名不是HTTP标头,而是MIME标头,这就是为什么必须将其移到HTTP标头才能获取它的原因。

文件名也会加引号,因此以下XSLT会处理该文件名:

<!-- use xpath to get the value of Content-Disposition header. For example,
         Content-Disposition: attachment; filename="fname.txt"
         Content-Disposition: attachment; filename="fname.txt"; otherparam="xyz" 
         Content-Disposition: attachment; filename=fname.txt -->
<xsl:variable name="cdisp" select="dp:request-header('Content-Disposition')"/>

<!-- Match the value of filename, quoted or non-quoted. 
     For example, "fname.txt" or fname.txt -->
<xsl:variable name="quoted-filename" select="regexp:match($cdisp, 'filename=(.+?)\s*(;|$)', 'i')[2]"/>

<!-- strip all double quotes if the filename is double-quoted. $filename is the resulting filename -->
<xsl:variable name="filename" select="translate($quoted-filename, '&quot;', '')"/>