Я создал мыльный клиент с помощью wsimport, и мне нужно отправить данные XML внутри строкового поля в сообщении на веб-сервер.Я знаю, что мне действительно не нужно использовать cdata в вызове веб-сервиса, но веб-сервису нужно, чтобы это поле было в тегах cdata.
Вопрос в том, как это сделать.
Чтобы сгенерироватькод из WSDL я использую плагин jaxws-maven-.В конфигурации Maven я использую файл привязки
bindingFiles
binding Filebinding.xjb /bindingFile
/bindingFiles
jxb:bindings version="2.0"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:tns="urn:uniface:applic:services:BRF_IN"
xmlns:jxb="http://java.sun.com/xml/ns/jaxb">
<jxb:globalBindings generateElementProperty="false"/>
<jxb:bindings scd="//element::tns:DATA">
<jxb:javaType
name="String"
parseMethod="de.xyz.CdataConverter.unmarshal"
printMethod="de.xyz.CdataConverter.marshal"
/>
</jxb:bindings>
, и маршал / unmarschal выглядит так:
public class CdataConverter {
private static final Pattern PATTERN = Pattern.compile("((?<=\\<\\!\\[CDATA\\[)[\\S\\s]+(?=\\]\\]\\>))");
private static final String CDATA_START = "<![CDATA[";
private static final String CDATA_END = "]]>";
private final static Logger logger =
Logger.getLogger(LgTestServer.class.getName());
public static String marshal(String input) {
if (input == null) {
return null;
}
PropertyConfigurator.configure(".\\log4j.properties");
logger.info("input --------------------->>>>>>>>\n" + input);
return CDATA_START + input + CDATA_END;
}
public static String unmarshal(String cdatainput) {
if (cdatainput == null) {
return null;
}
Matcher matcher = PATTERN.matcher(cdatainput);
if (matcher.find()) {
return matcher.group();
}
return cdatainput.trim();
}
С этим я получаю![CDATA [в поле данных, но xml кодируется следующим образом
<![CDATA[<?xml version="1.0" encoding="UTF-8"?>
Теперь я нашел это здесь (как сделать cdata с помощью jaxb): http://odedpeer.blogspot.de/2010/07/jaxb-sun-and-how-to-marshal-cdata.html
но я не понимаюкак это сделать с помощью плагина maven и wsimport.Я имею в виду, я не могу кодировать это, он должен быть настроен любым способом.
У вас есть идеи, как это сделать?