Отправить специальные символы в XML через веб-сервис с использованием Java - PullRequest
0 голосов
/ 22 апреля 2019

Я использую веб-сервис, который получает 2 параметра. Есть параметр, который получает документ XML. Когда я вызываю AXIS для отправки моего запроса, документ, отправленный в параметре, экранируется.

Я читал решения с CharacterEscapeHandler, но обработчик учитывает только данные. Пример: данные и дата. Тело XML, и он не манипулирует.

Для преобразования в XML я использую решение JAXB:

final StringWriter sw = new StringWriter();
final Class classType = this.getClass();
final JAXBContext jaxbContext = JAXBContext.newInstance(classType);
final Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.setProperty(CharacterEscapeHandler.class.getName(), new CustomCharacterEscapeHandler());
marshaller.marshal(this, sw);
return sw.toString();

Я получил это:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<remessa>
    <cliente Cod="26">
    </cliente>
</remessa>

Это верно.

Когда я вызываю классы-заглушки AXIS1 для отправки моего XML на сервер, генерируется следующее Envelop Soap:

<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <soapenv:Body>
      <ns1:stackoverflow xmlns:ns1="https://stackoverflow.com/" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
         <user_arq xsi:type="xsd:string">param1</user_arq>
         <user_dados xsi:type="xsd:string">&lt;?xml version="1.0" encoding="UTF-8" standalone="yes"?&gt;&lt;remessa&gt;&lt;cliente Cod="26"&gt;&lt;/remessa&gt;</user_dados>
      </ns1:stackoverflow>
   </soapenv:Body>
</soapenv:Envelope>

Но я хочу сохранить текущий контент, я не хочу экранировать контент XML. Я ожидаю, что результат будет таким:

<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <soapenv:Body>
      <ns1:stackoverflow xmlns:ns1="https://stackoverflow.com/" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
         <user_arq xsi:type="xsd:string">param1</user_arq>
         <user_dados xsi:type="xsd:string"><?xml version="1.0" encoding="UTF-8" standalone="yes"?><remessa><cliente Cod="26"></cliente></remessa>
        </user_dados>
      </ns1:stackoverflow>
   </soapenv:Body>
</soapenv:Envelope>

Я понимаю, что ОСЬ манипулирует содержимым документа и избегает его. Есть способ установить обработчик при генерации конверта SOAP?

...