Я использую веб-сервис, который получает 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"><?xml version="1.0" encoding="UTF-8" standalone="yes"?><remessa><cliente Cod="26"></remessa></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?