首页 > 解决方案 > WSO2 EI 从 Oracle Blob 返回图像/jpeg

问题描述

我有 WSO2 EI 6.5.0,其中有一个数据服务和一个 API。

在数据服务中,我返回一个 Blob:

<query id="get_image" useConfig="CONTACTS">
      <sql>{call ?:=CONTACTS_VKB.TEST_IMAGES_LIB.GET_IMAGE(?)}</sql>
      <result element="result" rowName="">
         <element column="result" name="image" xsdType="BLOB"/>
      </result>
      <param name="result" ordinal="1" sqlType="BLOB" type="OUT"/>
      <param name="p_name" ordinal="2" sqlType="STRING"/>
   </query>
   <operation name="get_image" returnRequestStatus="true">
      <call-query href="get_image">
         <with-param name="p_name" query-param="p_name"/>
      </call-query>
   </operation>

在 API 中:

<api xmlns="http://ws.apache.org/ns/synapse" name="images" context="/images" version="1.0" version-type="context">
   <resource methods="GET" uri-template="/{image_name}">
      <inSequence>
         <property name="FORCE_ERROR_ON_SOAP_FAULT" value="true" scope="default" type="STRING"/>
         <property name="IMAGE_NAME" expression="get-property('uri.var.image_name')"/>
         <payloadFactory media-type="xml">
            <format>
               <dat:get_image xmlns:dat="http://ws.wso2.org/dataservice">
                  <dat:p_name>$1</dat:p_name>
               </dat:get_image>
            </format>
            <args>
               <arg evaluator="xml" expression="$ctx:IMAGE_NAME"/>
            </args>
         </payloadFactory>
         <log level="custom">
            <property name="[GET_IMAGES] Before Call" expression="/"/>
         </log>
         <property name="HTTP_METHOD" value="POST" scope="axis2"/>
         <call blocking="true">
            <endpoint key="epIMAGES"/>
         </call>
         <log level="custom">
            <property name="C_IMAGE" expression="//*[local-name()='image']/text()"/>
         </log>
         <loopback/>
      </inSequence>
      <outSequence>
         <property name="messageType" value="image/jpeg" scope="axis2"/>
         <respond/>
      </outSequence>
      <faultSequence>
         <log level="full">
            <property name="MESSAGE" value="Executing default &quot;fault&quot; sequence"/>
            <property name="ERROR_CODE" expression="get-property('ERROR_CODE')"/>
            <property name="ERROR_MESSAGE" expression="get-property('ERROR_MESSAGE')"/>
         </log>
         <payloadFactory media-type="xml">
            <format>
               <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
                  <soap:Header/>
                  <soap:Body>
                     <REQUEST_STATUS>
                        <Result>$1</Result>
                        <Response>$2</Response>
                     </REQUEST_STATUS>
                  </soap:Body>
               </soap:Envelope>
            </format>
            <args>
               <arg evaluator="xml" expression="get-property('ERROR_MESSAGE')"/>
               <arg evaluator="xml" expression="$body//*"/>
            </args>
         </payloadFactory>
         <property name="HTTP_SC" value="500" scope="axis2"/>
         <respond/>
      </faultSequence>
   </resource>
</api>

但最后我永远无法通过 Fiddler 获得真实的图像,也无法通过任何浏览器获得。

我试图将属性 C_IMAGE 设置为 type="OM" 但随后 EI 给出错误。试图改变 messgeBuilders 但没有太大变化。

请帮忙

在axis2.xml中:

<messageBuilder contentType="image/jpeg"
                        class="org.wso2.carbon.relay.BinaryRelayBuilder"/>  
<messageFormatter contentType="image/jpeg"
                        class="org.wso2.carbon.relay.ExpandingMessageFormatter"/>

标签: wso2

解决方案


推荐阅读