I created a soap client with wsimport and i need to send xml data inside of a string field in the message to the webserver. I know that i dont really need to use a cdata in a webservice call but the webservice needs this field to be in cdata tags.
The question is how to do it.
To generate the code from the wsdl i use the jaxws-maven-plugin. in the maven config i use a binding file
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>
and marshal/unmarschal looks like this:
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();
}
With this i get a ![CDATA[ in the data field but the xml is encoded like this
<![CDATA[<?xml version="1.0" encoding="UTF-8"?>
Now i found this here (how to do cdata with jaxb): http://odedpeer.blogspot.de/2010/07/jaxb-sun-and-how-to-marshal-cdata.html
but i dont understand how to do this with the maven plugin and wsimport. i mean, i cant code this it has to be configured in any way.
do you have any ideas how to do this?
@XmlCDATA
extension from EclipseLink JAXB (MOXy): blog.bdoughan.com/2010/07/cdata-cdata-run-run-data-run.html – Undercharge