недопустимые символы XML / ось - PullRequest
5 голосов
/ 21 мая 2009

Я разработал веб-сервис и развернул его с помощью Axis. Все работает очень хорошо, но у меня есть проблема, когда я использую сервис, используя строку, содержащую непечатаемый символ (например, ETX, FS, ..). У меня следующая ошибка:

exception: java.lang.IllegalArgumentException: The char '0x1c' after '....' is not a valid XML character.

Есть идеи, пожалуйста?

редактировать:

Я должен отправить фрейм на свой сервер, используя веб-сервис. Моя рамка имеет строгую форму (содержит некоторые непечатаемые символы в качестве разделителя)

class Automate {void checkFrame(String frame){// checking the frame}}

файл wsdl

<?xml version="1.0" encoding="UTF-8"?>

  <wsdl:part element="impl:checkFrameResponse" name="parameters"/>

  <wsdl:part element="impl:checkFrame" name="parameters"/>

  <wsdl:operation name="checkFrame">

     <wsdl:input message="impl:checkFrameRequest" name="checkFrameRequest"/>

     <wsdl:output message="impl:checkFrameResponse" name="checkFrameResponse"/>

  </wsdl:operation>

  <wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>

  <wsdl:operation name="checkFrame">

     <wsdlsoap:operation soapAction=""/>

     <wsdl:input name="checkFrameRequest">

        <wsdlsoap:body use="literal"/>

     </wsdl:input>

     <wsdl:output name="checkFrameResponse">

        <wsdlsoap:body use="literal"/>

     </wsdl:output>

  </wsdl:operation>

  <wsdl:port binding="impl:AutomateSoapBinding" name="Automate">

     <wsdlsoap:address location="http://localhost:8080/Gateway/services/Automate"/>

  </wsdl:port>

Ответы [ 4 ]

3 голосов
/ 21 мая 2009

К сожалению, это естественная проблема с SOAP - он использует XML для текста, и эти символы не могут быть представлены в XML (даже с сущностями).

Можете ли вы как-нибудь избежать непечатных символов? К сожалению, вам нужно найти способ не представлять их в виде простого текста.

1 голос
/ 06 августа 2009

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

1 голос
/ 22 мая 2009

Когда вы формируете XML, который вы собираетесь заложить в конверт SOAP XML, вам необходимо убедиться, что в ваших значениях атрибутов и в любых текстовых узлах, которые есть в ваших элементах, нет символов без экранирования. То есть:

<your_elt your_attr="Don&apos;t put unescaped chars here, eg, apostrophe">
    <foo>
        Be sure to escape stuff here too, like: 2 &lt; 100
        A greek lambda is escaped like this: &#955;
    </foo>
</your_elt>

Я предполагаю, что вы делаете это на Java, поэтому вам следует поискать библиотеки, которые делают это для вас автоматически. Apache имеет StringEscapeUtils , например.

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

Надеюсь, это поможет.

0 голосов
/ 21 мая 2009

Похоже, у вас есть текст, который невозможно представить в XML. Вам придется убежать от этих персонажей, но, честно говоря, я подозреваю, что вы должны «убежать» от всей строки. Кодировка Base64 строки может работать, но вы также можете взглянуть на MTOM или какой-то другой механизм передачи двоичных данных через веб-сервисы.

Если вы владеете обеими сторонами этой системы (клиентами и веб-службой), добавление шагов кодирования / декодирования не должно быть слишком сложным, и достаточно кодирования base64.

...