Извлечение подробностей расположения контента из шлюза 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>&#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>

Ответ 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, '&quot;', '')"/>
Другие вопросы по тегам