В WSO2 ESB проверяет XML перед приходом в API - PullRequest
0 голосов
/ 19 октября 2018

Есть ли способ проверить XML , поступающий на WSO2 ESB API , поскольку для проверки.

Я получаю сообщение об ошибке при неправильном XML приходит к моему API .Это ошибка, которую я получаю, когда дело доходит до API , который я хочу проверить до этого.

[2018-10-19 10: 00: 03,531] ОШИБКА - LogMediator Не удалось создать полное сообщение журнала: com.ctc.wstx.exc.WstxParsingException: неожиданный закрывающий тег;ожидается.

Отправка XML

<Request>
    <DeleteServiceRequest> 
       <ServiceLineId>12344455</ServiceLineId> 

</Request> 

Заголовок API

<?xml version="1.0" encoding="UTF-8"?>
<api context="/test" name="testAPI" xmlns="http://ws.apache.org/ns/synapse">
    <resource methods="POST">
        <inSequence>

1 Ответ

0 голосов
/ 19 октября 2018

Проблема в том, что для проверки сообщения сначала необходимо его создать.Полученное сообщение не является правильно сформированным xml, поэтому при первой попытке API создать сообщение оно не будет выполнено.Однако для проверки правильности построения сообщения XML также требуется, и как таковой посредник проверки XML также не будет выполнен.

Так что нет, вы не можете проверить XML, если полученное вами сообщение не является правильным XML.(технически это не XML).Обычно это когда вы отправляете ошибку клиенту.И поскольку они совершают техническую ошибку, вызывая API, вы можете просто обслужить их с фактической ошибкой, которую вы получаете, чтобы они знали, что исправить.

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

      <faultSequence>
         <log level="custom">
            <property name="text" value="An unexpected error occured"/>
            <property expression="get-property('ERROR_MESSAGE')" name="message"/>
            <property expression="get-property('ERROR_DETAIL')" name="detail"/>
            <property expression="get-property('ERROR_CODE')" name="code"/>
            <property expression="get-property('ERROR_DETAIL')" name="detail"/>
         </log>
         <payloadFactory media-type="xml">
            <format>
               <ERROR xmlns="">
                  <MESSAGE>You broke it</MESSAGE>
                  <DETAIL>$1</DETAIL>
               </ERROR>
            </format>
            <args>
               <arg evaluator="xml" expression="get-property('ERROR_MESSAGE')"/>
            </args>
         </payloadFactory>
         <respond/>
      </faultSequence>

Возможно, вы также захотите установить правильный код состояния http перед возвратом сообщения,например:

<property name="HTTP_SC" value="500" scope="axis2"/>
...