wso2 - 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 "fault" 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"/>