пятница, 18 октября 2013 г.

CDATA wraper feature

Казалось бы просто веб-сервис: на входе и выходе строка:
    public String processByJavaAdapter(String data, FreeMarkerVars[] reportContext, String className) throws Exception
    {
     ..
    }
Если строка XML, то возвращается обертка в CDATA:
<ns2:processByJavaAdapterResponse xmlns:ns2="http://wsi.reg.sitronics.com/">
      </ns2:processByJavaAdapterResponse>
         <return><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
         <error>
   <faultcode>Нет связи с сервером</faultcode>
   <fault></fault>
   </error>]]></return>


А вот не всегда.
Иногда ответ приходит таким:

<ns2:processByJavaAdapterResponse xmlns:ns2="http://wsi.reg.sitronics.com/">
         <return>&lt;?xml version="1.0" encoding="UTF-8"?>
  &lt;faultcode>Нет связи с сервером&lt;/faultcode></return>
      </ns2:processByJavaAdapterResponse>


И это не баг, а фича :-)
Иногда веб-сервису кажется что такой способ обертки XML более лучший.

2 комментария:

  1. Слово "иногда" меня пугает больше всего. Без особых причин?

    ОтветитьУдалить
    Ответы
    1. Как я понял, в CDATA заворачиваются большие XML конструкции.
      Опытным путем установлено, при количестве нод >=3 100% будет оборачивание в CDATA.
      Кстати, пока искал, натыкался что C# веб-сервисы тоже чем-то похожим страдают, скорее всего дело в каком-то хитром стандарте.

      Удалить