I created a soap client with wsimport, and I need to send the XML data inside the string field in the message to the web server. I know that I really don't need to use cdata in the webservice call, but the web service needs this field to be in the cdata tags.
The question is how to do this.
To generate code from wsdl, I use jaxws-maven-plugin. in maven configuration i use bind 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 xml is encoded as follows
<![CDATA[<?xml version="1.0" encoding="UTF-8"?>
Now I found this here (how to make cdata with jaxb): http://odedpeer.blogspot.de/2010/07/jaxb-sun-and-how-to-marshal-cdata.html
but I donβt understand how to do this with the maven and wsimport plugin. I mean, I canβt encode it, it must be configured in some way.
Do you have any ideas how to do this?
source share