Извлечение подробностей расположения контента из шлюза IBM Datapower
Я хотел бы извлечь имя файла из Content-Disposition, которое входит в заголовок AS2, и назначить его переменной в шлюзе IBM Datapower. Есть ли у нас переменная dp: service для ее извлечения.
2 ответа
Я не думаю, что в DataPower есть конкретная переменная для точного имени файла заголовка Content-Disposition сообщения AS2. Однако заголовок 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>
Ответ AugustZ подходит для заголовка HTTP, НО, когда речь идет о Content-Disposition (имя файла) для AS2, сначала необходимо включить "Сохранить имя файла" в настройках партнера AS2 в DataPower, в противном случае DataPower удаляет информацию.
Имя файла Content-Disposition для AS2 - это не заголовок 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, '"', '')"/>