我想从AS2标头中的Content-Disposition中提取文件名,并将其分配给IBM Datapower网关中的变量。我们是否有dp:服务变量来提取它。
答案 0 :(得分:0)
我认为DataPower上没有仅用于AS2消息的Content-Disposition标头的文件名的特定变量。 但是,Content-Dispositon标头应该是HTTP标头集的一部分,您可以通过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> </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, '"', '')"/>