может ли допустимое тело XML иметь экранированные символы для '<' и '>' вокруг имен элементов - PullRequest
0 голосов
/ 23 февраля 2010

Мой веб-сервис получает XML от третьей стороны, которая выглядит следующим образом:

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
    <SOAP-ENV:Body>
&lt;Foo&gt;bar&lt;/Foo&gt;
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Мой веб-сервис jaxws отклоняет это с ошибкой разбора. Также, если я пытаюсь проверить этот xml с использованием soapui, он говорит, что Body с типом контента только для элементов не может иметь текстовый элемент.

Мой вопрос: допустим ли этот xml? Или клиент должен отправить мне что-то без экранирования <и>.

Любые ссылки на стандарты или правила XML приветствуются.

Ответы [ 2 ]

2 голосов
/ 23 февраля 2010

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

В этом примере ваше тело SOAP - это просто текстовый элемент. Я не эксперт SOAP, но во всех примерах SOAP, которые я вижу, в теле есть узлы элементов, а не только текст. Также рекомендация SOAP (http://www.w3.org/TR/2000/NOTE-SOAP-20000508) говорит

"Запись тела идентифицируется его полное имя элемента "

, который предлагает требование для элементов, а не текста.

1 голос
/ 23 февраля 2010

Кроме того, вы можете экранировать полную строку, заключив ее в раздел CDATA (символьные данные). Раздел CDATA начинается с разделителя из девяти символов! [CDATA [и заканчивается разделителем]]:

  <![CDATA["Me, Myself & <I>"]]>

посмотрите здесь http://xmmssc -www.star.le.ac.uk / SAS / xmmsas_20070308_1802 / doc / param / node24.html

...