首页 > 解决方案 > WSO2 EI 6.6.0 类调解器无法使用 SOAP 调用返回内容

问题描述

我在 EI 6.6.0 中有以下 API:

<?xml version='1.0' encoding='UTF-8'?>
<api xmlns="http://ws.apache.org/ns/synapse" name="sample" context="/sample">
   <resource methods="POST">
      <inSequence>
         <payloadFactory media-type="xml">
            <format>
               <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
                  <soap:Body>
                     <P xmlns="http://tempuri.org/">
                        <P1>$1</P1>
                        <P2>$2</P2>
                        <P3>$3</P3>
                     </P>
                  </soap:Body>
               </soap:Envelope>
            </format>
            <args>
               <arg evaluator="json" expression="$.p1" />
               <arg evaluator="json" expression="$.p2" />
               <arg evaluator="json" expression="$.p3" />
            </args>
         </payloadFactory>
         <log level="full" />
         <property name="Content-Type" value="text/xml;charset=UTF-8" scope="axis2"/>
         <header name="Accept" scope="transport" value="text/xml"/>
        <call>
         <endpoint>
            <wsdl Action="name_of_the_action" service="name_of_the_service" port="name_of_soap_port" uri="http://<ip>/path?WSDL" />
         </endpoint>
        </call> 
      
        <class name="my_mediator_package"></class>
        <log level="full" />
        <payloadFactory media-type="xml">
           <format>
              <retorno xmlns="">
                 <msg>$1</msg>
              </retorno>
           </format>
           <args>
              <arg evaluator="xml" expression="get-property('property_set_on_mediator')" />
           </args>
        </payloadFactory>
        <property name="messageType" value="application/xml" scope="axis2" type="STRING" />
        <respond />
    </inSequence>
      
    <outSequence>
      </outSequence>

      <faultSequence>
         <property name="text" value="An unexpected error occured"/>
         <property name="message" expression="get-property('ERROR_MESSAGE')"/>
         <payloadFactory media-type="xml">
            <format>
               <error xmlns="">
                  <msg>$1</msg>
               </error>
            </format>
            <args>
               <arg evaluator="xml" expression="get-property('ERROR_MESSAGE')"/>
            </args>
         </payloadFactory>
         <property name="messageType" value="application/json" scope="axis2" type="STRING"/>
         <respond/>
      </faultSequence> 
   </resource>
</api>

我的中介方法内容:

public boolean mediate(MessageContext synCtx) {
        org.apache.axis2.context.MessageContext axis2MessageContext = ((Axis2MessageContext) synCtx)
                .getAxis2MessageContext();
        try {

            // Getting the json payload to string
            String jsonPayloadToString = JsonUtil.jsonPayloadToString(((Axis2MessageContext) synCtx)
                    .getAxis2MessageContext());

            System.out.println("original payload : \n" + jsonPayloadToString + "\n");

我无法在我的调解器中使用我的 SOAP 调用的返回,所以我可以处理它。

当我运行 API 时,我从中介代码中得到以下信息:

    original payload: 
    {}

有没有办法让我可以获取 SOAP 调用返回的信封并在我的调解器中使用它?

标签: wso2wso2esbwso2ei

解决方案


1-确保 json 有效负载在那里。因此,将json属性记录在您的inSequence.

2-您可以在您的当前什么都不做I'm not being able to use the return from my SOAP call in my mediator so I can work on it.的情况下看到响应有效负载。outSequence

3-根据您只是调用 SOAP Web 服务的场景,您不需要类中介。换句话说,当您不需要操作初始有效负载然后将其传递给目标服务时,在逻辑上实现您自己的类中介对您没有任何好处。

此外, https://docs.wso2.com/display/EI611中有相当多的示例可以帮助您。

请让我知道您的问题是否已解决。


推荐阅读