Исключение фабрики полезных данных с недействительным json - PullRequest
0 голосов
/ 15 апреля 2020

Если я использую фабрику полезной нагрузки для создания или просто для очистки полезной нагрузки в случае сбоя, фабрика полезной нагрузки выходит из строя за исключением. Поэтому в случае ошибки я не могу манипулировать полезной нагрузкой. Мне нужно только удалить его, например, поэтому тот факт, что он для меня недействителен, не имеет значения.

Пример:

    <?xml version="1.0" encoding="UTF-8"?>
<api context="/DemoError" name="DemoError" xmlns="http://ws.apache.org/ns/synapse">
    <resource methods="POST">
        <inSequence>
            <payloadFactory media-type="json">
                <format>{&#xd;
"status":"OK"&#xd;
}</format>
                <args/>
            </payloadFactory>
            <loopback/>
        </inSequence>
        <outSequence>
            <send/>
        </outSequence>
        <faultSequence>
            <payloadFactory media-type="json">
                <format>{&#xd;
"status":"KO"&#xd;
}</format>
                <args/>
            </payloadFactory>
        </faultSequence>
    </resource>
</api>

В этом примере, если я сделал вызов с недействительным json ... ESB, он идет в последовательности ошибок (справа), но когда я пытаюсь очистить полезную нагрузку, происходит сбой фабрики полезной нагрузки (org. apache .synapse.commons.SynapseCommonsException: Existing json полезная нагрузка искажена), хуже всего то, что при сбое последовательности ошибок возвращается http 202 ... очень плохо, я использую WSO2 EI 6.5.0

Ответы [ 2 ]

0 голосов
/ 16 апреля 2020

Я воспроизвел проблему, она немного сложнее. Если у меня есть валидатор, он выглядит как go в последовательности сбоев, как и ожидалось, но теперь последовательность сбоев завершается с ошибкой на фабрике полезной нагрузки, возвращая http 202.

Попробуйте это:

<?xml version="1.0" encoding="UTF-8"?>
<api context="/DemoError" name="DemoError" xmlns="http://ws.apache.org/ns/synapse">
    <resource methods="POST">
        <inSequence>
            <validate cache-schema="true">
                <schema key="gov:custom/schema.json"/>
                <on-fail>
                    <log level="custom">
                        <property name="ERROR" value="VALIDATE"/>
                    </log>
                </on-fail>
            </validate>
            <payloadFactory media-type="json">
                <format>{&#xd;
"status":"OK"&#xd;
}</format>
                <args/>
            </payloadFactory>
            <loopback/>
        </inSequence>
        <outSequence>
            <send/>
        </outSequence>
        <faultSequence>
            <log level="custom">
                        <property name="ERROR" value="I'M IN FAULT SEQUENCE"/>
                    </log>
            <property name="HTTP_SC" scope="axis2" type="STRING" value="500"/>
            <payloadFactory media-type="json">
                <format>{&#xd;
"status":"KO"&#xd;
}</format>
                <args/>
            </payloadFactory>
            <respond/>
        </faultSequence>
    </resource>
</api>

со следующей схемой:

{
  "$id": "https://example.com/person.schema.json",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "title": "example",
  "type": "object",
  "required": [ "input"],
  "properties": {
    "input": {
      "type": "boolean",
      "description": "Input"
    }
  }
}

и следующим вводом:

{
    "input":xxx
    }
0 голосов
/ 15 апреля 2020

Я опробовал ваш API. Это не терпит неудачу на самом деле. Если я добавлю медиатор <respond/> после медиатора Payload Factory внутри Fault Sequence, я вижу, что полезная нагрузка Fault Sequence возвращается правильно.

...