Wso2 将多部分/表单数据从ESB发送到APIM

Wso2 将多部分/表单数据从ESB发送到APIM,wso2,wso2esb,wso2-am,wso2carbon,Wso2,Wso2esb,Wso2 Am,Wso2carbon,我正在使用WSO2 ESB 6.4.0和APIM 2.6.0 我正在使用APIM应用程序的RESTAPI在APIM服务器中添加证书。 在添加新证书的请求中,post请求应该是表单数据 因此,为了自动化这个过程,我使用ESB服务器。我已经编写了一个代理,它将选择证书文件并对其进行处理。下面是我的代理代码 <?xml version="1.0" encoding="UTF-8"?> <proxy name="ClientSslCertificateAdd-APIM" startOn

我正在使用WSO2 ESB 6.4.0和APIM 2.6.0

我正在使用APIM应用程序的RESTAPI在APIM服务器中添加证书。 在添加新证书的请求中,post请求应该是表单数据

因此,为了自动化这个过程,我使用ESB服务器。我已经编写了一个代理,它将选择证书文件并对其进行处理。下面是我的代理代码

<?xml version="1.0" encoding="UTF-8"?>
<proxy name="ClientSslCertificateAdd-APIM" startOnLoad="true" transports="http https vfs" xmlns="http://ws.apache.org/ns/synapse">
    <target>
        <inSequence>
            <!--   <enrich>
            <source clone="true" type="body"/>
            <target property="originalBody" type="property" />
        </enrich>
        <property expression="get-property('originalBody')"
                name="payloadposttexttransformation"
                scope="default"
                type="STRING"/> -->
            <property expression="$body/*" name="payload" scope="default" type="STRING"/>
            <property expression="get-property('payload')" name="xml form certificate captured  ===" scope="default" type="STRING"/>
            <xslt description="" key="xmltotext"/>
            <property expression="$body/*" name="payloadpostmapping" scope="default" type="STRING"/>
            <property name="filename" scope="default" type="STRING" value="filename_certifiate"/>
            <property name="alias" scope="default" type="STRING" value="alias_certifiate"/>
            <property name="endpoint" scope="default" type="STRING" value="endpoint_certifiate"/>
            <property name="uri.var.host" scope="default" type="STRING" value="http://apimserver.com/"/>
            <property name="uri.var.context" scope="default" type="STRING" value="certificates"/>
            <property expression="get-property('alias')" name="uri.var.resourcepath" scope="default" type="STRING"/>
            <property name="Authorization" scope="transport" type="STRING" value="Bearer token"/>
            <call>
                <endpoint>
                    <http method="get" uri-template="{uri.var.host}/{uri.var.context}/{uri.var.resourcepath}"/>
                </endpoint>
            </call>
            <property expression="json-eval($.status)" name="currentstatusoftobeaddedalias" scope="default" type="STRING"/>
            <filter regex="Expired" source="get-property('currentstatusoftobeaddedalias')">
                <then>
                    <property expression="get-property('alias')" name="alias" scope="default" type="STRING"/>
                    <property expression="get-property('endpoint')" name="endpoint" scope="default" type="STRING"/>
                    <property name="Authorization" scope="transport" type="STRING" value="Bearer token"/>
                    <property name="messageType" scope="axis2" type="STRING" value="multipart/form-data"/>
                    <payloadFactory media-type="xml">
                        <format>
                            <root xmlns="">
                                <certificate charset="UTF-8" contentType="text/plain" xmlns="http://org.apache.axis2/xsd/form-data">$3</certificate>
                                <alias xmlns="http://org.apache.axis2/xsd/form-data">$1</alias>
                                <endpoint xmlns="http://org.apache.axis2/xsd/form-data">$2</endpoint>
                            </root>
                        </format>
                        <args>
                            <arg evaluator="xml" expression="$ctx:alias"/>
                            <arg evaluator="xml" expression="$ctx:endpoint"/>
                            <arg evaluator="xml" expression="$ctx:payloadpostmapping"/>
                        </args>
                    </payloadFactory>
                    <property name="DISABLE_CHUNKING" scope="axis2" type="STRING" value="true"/>
                    <!-- <property name="ContentType" scope="axis2" value="multipart/form-data" type="STRING"/> -->
                    <property name="messageType" scope="axis2" type="STRING" value="multipart/form-data"/>
                    <!-- <call>
                        <endpoint>
                            <http format="rest" method="post" uri-template="http://apimserver.com"/>
                        </endpoint>
                    </call> -->
                    <send>
            <endpoint>
            <http method="POST" format="rest"
                    uri-template="http://apimserver.com"/>
            </endpoint>
            </send>
                </then>
                <else>
                    <log>
                        <property name="alreadypresent" value="with entered alias name, certificate is active"/>
                    </log>
                </else>
            </filter>
        </inSequence>
        <outSequence/>
        <faultSequence/>
    </target>
    <parameter name="transport.PollInterval">5</parameter>
    <parameter name="transport.vfs.FileURI">file:///opt/new/esb/clientSSLcertificate_repo/</parameter>
    <parameter name="transport.vfs.ContentType">application/xml;charset=UTF-8</parameter>
    <parameter name="transport.vfs.ActionAfterProcess">MOVE</parameter>
    <parameter name="transport.vfs.MoveAfterFailure">file:///opt/new/esb/clientSSLcertificate_repo/failed_clientSSLcertificate</parameter>
    <parameter name="transport.vfs.ActionAfterFailure">MOVE</parameter>
    <parameter name="transport.vfs.FileNamePattern">.*.xml</parameter>
    <parameter name="transport.vfs.MoveAfterProcess">file:///opt/new/esb/clientSSLcertificate_repo/updated_clientSSLcertificate</parameter>
</proxy>
从错误日志来看,APIM服务器似乎无法从ESB获取附加文件,这就是它无法处理请求的原因

APIM 2.6.0是否支持多部分/表单数据


谢谢

我们遇到了类似的问题,我们必须在axis2/axis2.xml文件(ESB和APIM中)中更新messageFormatters和messageBuilders:

更新消息格式化程序:

<!-- <messageFormatter contentType="multipart/form-data" 
  class="org.apache.axis2.transport.http.MultipartFormDataFormatter"/ -->
<messageFormatter contentType="multipart/form-data" 
  class="org.wso2.carbon.relay.ExpandingMessageFormatter"/>

更新消息生成器

<!-- messageBuilder contentType="multipart/form-data"
  class="org.apache.axis2.builder.MultipartFormDataBuilder"/ -->
 <messageBuilder contentType="multipart/form-data"
  class="org.wso2.carbon.relay.BinaryRelayBuilder"/>

这些更新应该更改传输以流式传输负载,而无需解析和重建负载

<!-- <messageFormatter contentType="multipart/form-data" 
  class="org.apache.axis2.transport.http.MultipartFormDataFormatter"/ -->
<messageFormatter contentType="multipart/form-data" 
  class="org.wso2.carbon.relay.ExpandingMessageFormatter"/>
<!-- messageBuilder contentType="multipart/form-data"
  class="org.apache.axis2.builder.MultipartFormDataBuilder"/ -->
 <messageBuilder contentType="multipart/form-data"
  class="org.wso2.carbon.relay.BinaryRelayBuilder"/>