У меня есть клиент JAX-WS ganerated с CXFДобавить CDATA по параметру строки запроса, используя только JAX-WS
Запроса есть строка-параметр (MGRequest), который содержит XML, все работы, но сгенерированный запрос как это:
<S:Body>
<ns5:MGRequest><mytag>hello</mytag></ns5:MGRequest>
</S:Body>
Мне нужно создать тело, как:
<S:Body>
<ns5:MGRequest><![CDATA[<mytag>hello</mytag>]]></ns5:MGRequest>
</S:Body>
(потому что я не могу управлять сервером ..)
Клиент как стандартный JAX-WS:
@WebService(name = "ServiceSoap")
@XmlSeeAlso({ ObjectFactory.class})
@SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)
public interface ServiceSoap {
@WebMethod(operationName = "ProcessMessage")
@WebResult(name = "MGResponse")
public String processMessage(
@WebParam(partName = "input", name = "MGRequest") String input);
}
И я называю так:
Service client = new Service(url);
client.setHandlerResolver(HandlerFactory.build(new LoggerHandler()));
ServiceSoap service = client.getServiceSoap();
String msgToSend = JaxbUtil.jaxbObjToString(xmlObj, false);
String response = service.processMessage(msgToSend);
Я попытался добавить @XmlJavaTypeAdapter(CDataAdapter.class)
до @WebParam
, но результат был:
<S:Body>
<ns5:MGRequest><![CDATA[<mytag>hello</mytag>]]></ns5:MGRequest>
</S:Body>
Где CDataAdapter:
public class CDataAdapter extends XmlAdapter<String, String> {
@Override
public String marshal(String v) throws Exception {
return "<![CDATA[" + v + "]]>";
}
@Override
public String unmarshal(String v) throws Exception {
return v;
}
}
Любая идея, как это сделать? Благодаря
Вышеупомянутое решение, которое нужно обработать, необходимо добавить «message.saveChanges();» в функции сообщения сообщения handleMessage. См. Https://www.mkyong.com/webservices/jax-ws/jax-ws-soap-handler-in-client-side/ –