Произошла ошибка при посредничестве классового посредника WSO2 ESB

Я использовал wso2 esb 5.0 для создания прокси-сервисов. Я создал прокси-сервис, используя посредник класса. Ниже приведен класс Java.

public class CalculatePaymentAmount extends AbstractMediator {

    public boolean mediate(MessageContext messageContext) {

        String noOfMonths = messageContext.getEnvelope().getBody().getFirstElement().
                getFirstChildWithName(new QName("noOfMonths")).getText();

        String InsuranceRate = messageContext.getEnvelope().getBody().getFirstElement().
                getFirstChildWithName(new QName("InsuranceRate")).getText();

        DecimalFormat decimalFormat = new DecimalFormat("#.##");

        double totalAmount = Double.parseDouble(noOfMonths) * Double.parseDouble(InsuranceRate);

        messageContext.setProperty("noOfMonths", noOfMonths);
        messageContext.setProperty("paymentAmount", decimalFormat.format(totalAmount));

        return true;
    }

    public String getType() {
        return null;
    }

    public void setTraceState(int traceState) {
        traceState = 0;
    }

    public int getTraceState() {
        return 0;
    }

}

Я создал прокси-сервис с помощью посредника классов. Ниже определите код прокси.

<?xml version = "1.0" encoding = "UTF-8"?>
<proxy xmlns = "http://ws.apache.org/ns/synapse"
       name = "PaymentAmountProxy"
       startOnLoad = "true"
       statistics = "disable"
       trace = "disable"
       transports = "http,https">
   <target>
      <inSequence>
         <log/>
         <class name = "com.mediator.java.CalculatePaymentAmount"/>
         <property expression = "get-property('default','noOfMonths')"
                   name = "getNoOfMonths"
                   scope = "default"
                   type = "STRING"/>
         <property expression = "get-property('default','paymentAmount')"
                   name = "getPaymentAmount"
                   scope = "default"
                   type = "STRING"/>
         <log>
            <property expression = "get-property('default','getNoOfMonths')"
                      name = "No.Of Months:"/>
            <property expression = "get-property('default','getPaymentAmount')"
                      name = "Paymrent Amount:"/>
         </log>
      </inSequence>
   </target>
   <description/>
</proxy>

Этот работает нормально и дает ожидаемый ответ. Но когда я использую этот посредник класса с другими посредниками, он получает ошибки при вызове прокси-сервиса. Ниже упоминается прокси-сервис, который я использовал с посредником класса.

<?xml version = "1.0" encoding = "UTF-8"?>
<proxy xmlns = "http://ws.apache.org/ns/synapse"
       name = "LatestLicenseRenewalSystem"
       startOnLoad = "true"
       statistics = "disable"
       trace = "disable"
       transports = "http,https">
   <target>
      <inSequence>
         <log/>
         <property expression = "get-property('transport','VehicleNo')"
                   name = "vehicleNo"
                   scope = "default"
                   type = "STRING"/>
         <log>
            <property expression = "get-property('default','vehicleNo')" name = "VehicleNo"/>
         </log>
         <payloadFactory media-type = "xml">
            <format>
               <soapenv:Envelope xmlns:soapenv = "http://schemas.xmlsoap.org/soap/envelope/"
                                 xmlns:wsa = "http://www.w3.org/2005/08/addressing"
                                 xmlns:sam = "http://sample.esb.org">
                  <soapenv:Header/>
                  <soapenv:Body>
                     <sam:getPolicyID>
                        <sam:vehicleNumber>$1</sam:vehicleNumber>
                     </sam:getPolicyID>
                  </soapenv:Body>
               </soapenv:Envelope>
            </format>
            <args>
               <arg evaluator = "xml" expression = "get-property('default','vehicleNo')"/>
            </args>
         </payloadFactory>
         <log level = "full"/>
         <header name = "Action" scope = "default" value = "urn:getCertificateID"/>
         <call>
            <endpoint>
               <address format = "soap12"
                        uri = "http://172.17.0.1:9763/services/EmissionTestService.EmissionTestServiceHttpSoap12Endpoint/">
                  <enableAddressing/>
               </address>
            </endpoint>
         </call>
         <log level = "full"/>
         <property xmlns:ns = "http://sample.esb.org"
                   expression = "//ns:getCertificateIDResponse/ns:return"
                   name = "certificateID"
                   scope = "default"
                   type = "STRING"/>
         <log>
            <property expression = "get-property('default','certificateID')"
                      name = "CertificateID"/>
         </log>
         <class name = "com.mediator.java.CalculatePaymentAmount"/>
         <property expression = "get-property('default','noOfMonths')"
                   name = "getNoOfMonths"
                   scope = "default"
                   type = "STRING"/>
         <property expression = "get-property('default','paymentAmount')"
                   name = "getPaymentAmount"
                   scope = "default"
                   type = "STRING"/>
         <log>
            <property expression = "get-property('default','getNoOfMonths')"
                      name = "No.Of Months:"/>
            <property expression = "get-property('default','getPaymentAmount')"
                      name = "Paymrent Amount:"/>
         </log>
         <respond/>
      </inSequence>
   </target>
   <description/>
</proxy>

Ниже приведена ошибка при вызове указанной выше прокси-службы.

LogMediator To: http://www.w3.org/2005/08/addressing/anonymous, WSAction: urn:getCertificateIDResponse, SOAPAction: urn:getCertificateIDResponse, ReplyTo: http://www.w3.org/2005/08/addressing/anonymous, MessageID: urn:uuid:6f4557eb-b8ff-4c19-bbe8-4c7e929d8386, Direction: request, MESSAGE = Executing default 'fault' sequence, ERROR_CODE = 0, ERROR_MESSAGE = Error occured in the mediation of the class mediator, Envelope: <?xml version='1.0' encoding='utf-8'?><soapenv:Envelope xmlns:soapenv = "http://www.w3.org/2003/05/soap-envelope"><soapenv:Header xmlns:wsa = "http://www.w3.org/2005/08/addressing"><wsa:Action>urn:getCertificateIDResponse</wsa:Action><wsa:RelatesTo>urn:uuid:6f4557eb-b8ff-4c19-bbe8-4c7e929d8386</wsa:RelatesTo></soapenv:Header><soapenv:Body><ns:getCertificateIDResponse xmlns:ns = "http://sample.esb.org"><ns:return>-1250719063</ns:return></ns:getCertificateIDResponse></soapenv:Body></soapenv:Envelope> 

Может ли кто-нибудь помочь мне решить эту проблему. Любая помощь или обходные пути действительно ценятся.

Gradle за прокси-сервером
Gradle за прокси-сервером
Создайте проект Gradle под сетевым прокси.
0
0
1 508
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Посредник вашего класса обращается к элементам noOfMonths и InsuranceRate из контекста сообщения. Но, согласно журналу ошибок, контекст сообщения имеет другой мыльный конверт, в котором нет вышеуказанных элементов.

<soapenv:Envelope xmlns:soapenv = "http://www.w3.org/2003/05/soap-envelope"><soapenv:Header xmlns:wsa = "http://www.w3.org/2005/08/addressing"><wsa:Action>urn:getCertificateIDResponse</wsa:Action><wsa:RelatesTo>urn:uuid:6f4557eb-b8ff-4c19-bbe8-4c7e929d8386</wsa:RelatesTo></soapenv:Header><soapenv:Body><ns:getCertificateIDResponse xmlns:ns = "http://sample.esb.org"><ns:return>-1250719063</ns:return></ns:getCertificateIDResponse></soapenv:Body></soapenv:Envelope> 

Это должен быть ответ, полученный от операции вызова до посредника класса.

Вы должны либо изолировать посредник класса от операции вызова и использовать разные прокси-сервисы, либо переместить посредник класса над фабрикой полезной нагрузки.

Чтобы решить эту проблему, используйте посредник payloadFactory перед посредником класса и установите параметры полезной нагрузки. Я упомянул ниже код.

<payloadFactory media-type = "xml">
            <format>
               <paymentDetails xmlns = "">
                  <noOfMonths>$1</noOfMonths>
                  <InsuranceRate>$2</InsuranceRate>
               </paymentDetails>
            </format>
            <args>
               <arg evaluator = "xml" expression = "get-property('default','noOfMonths')"/>
               <arg evaluator = "xml" expression = "get-property('default','InsuranceRate')"/>
            </args>
         </payloadFactory>
         <class name = "com.mediator.java.CalculatePaymentAmount"/>

Другие вопросы по теме