Возврат к списку объектов при выводе пользовательского посредника - PullRequest
0 голосов
/ 15 ноября 2018

У меня есть собственный посредник, результатом этого посредника является объект List, вызовите "agencyResult".
Это код Java.

package com.quangnam.example;

import java.util.List;

import org.apache.synapse.MessageContext; 
import org.apache.synapse.mediators.AbstractMediator;

import com.vpcp.services.AgencyServiceImp;
import com.vpcp.services.model.Agency;
import com.vpcp.services.model.GetAgenciesResult;

public class AgenciesListMediator extends AbstractMediator { 

    public boolean mediate(MessageContext context) { 
        getAgenciesList(context);
        return true;
    }

    private void getAgenciesList(MessageContext context) {
        AgencyServiceImp agencyService = new AgencyServiceImp();
        String jsonHeader = "{}";
        GetAgenciesResult getAgenciesResult = agencyService.getAgenciesList(jsonHeader);
        List<Agency> agenciesList = getAgenciesResult.getAgencies();
        context.setProperty("agenciesResult", agenciesList);
    }
}

Как я могу определить payloadFactory для вывода как

{"data": [
   {
        "code":"1",
        "name":"abc"
   },
   {
       "code":"2",
       "name":"def"
    }
]}

Я пытаюсь это сделать

<?xml version="1.0" encoding="UTF-8"?>
<sequence name="agenciesListSeq" trace="disable" xmlns="http://ws.apache.org/ns/synapse">
    <class name="com.quangnam.example.AgenciesListMediator"/>
    <property expression="$ctx:agenciesResult" name="result" scope="default" type="STRING"/>
    <foreach id="foreach_1" expression="$ctx:agenciesResult">
       <sequence>
          <payloadFactory media-type="json">
             <format>{
                       "code" : "$1",
                       "name" : "$2"
                       }
             </format>
             <args>
                <arg evaluator="json" expression="$.code"/>
                <arg evaluator="json" expression="$.name"/>
             </args>
          </payloadFactory>
       </sequence>
    </foreach>
    <property name="messageType" scope="axis2" type="STRING" value="application/json"/>
    <respond/>
</sequence>

Но у меня есть ошибка

[2018-11-15 16:43:29,237] [EI-Core] ERROR - SequenceMediator com.vpcp.services.model.Agency cannot be cast to org.apache.axiom.om.OMNode
java.lang.ClassCastException: com.vpcp.services.model.Agency cannot be cast to org.apache.axiom.om.OMNode
    at org.apache.synapse.mediators.builtin.ForEachMediator.getDetachedMatchingElements(ForEachMediator.java:281)
    at org.apache.synapse.mediators.builtin.ForEachMediator.mediate(ForEachMediator.java:108)

Пожалуйста, помогите мне, как решить это или дайте мне некоторые документы. Спасибо.

...