WSO2 EI 6.6.0类介体无法使用SOAP调用返回内容

时间:2020-07-23 18:00:32

标签: wso2 wso2esb wso2ei

我在EI 6.6.0中具有以下API:

<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/6.5.5/rxjs.umd.min.js" integrity="sha256-85uCh8dPb35sH3WK435rtYUKALbcvEQFC65eg+raeuc=" crossorigin="anonymous"></script>

我的中介方法内容:

<?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>

我无法在调解器中使用SOAP调用的返回值,因此我可以对其进行处理。

运行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调用返回的信封并在调解器中使用它?

2 个答案:

答案 0 :(得分:0)

由于您正在调用SOAP后端并获取SOAP负载,因此JSON负载将变为空。您可以在中介器中使用synCtx.getEnvelope()从响应中获取SOAPEnvelope。

答案 1 :(得分:0)

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中有很多示例可以为您提供帮助。

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