【发布时间】:2017-01-01 20:06:35
【问题描述】:
我有一个使用 CXF 生成的 jax-ws 客户端
请求有一个包含 xml 的字符串参数(MGRequest),所有的工作,但生成的请求是这样的:
<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);
我曾尝试在@WebParam 之前添加@XmlJavaTypeAdapter(CDataAdapter.class),但结果是:
<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;
}
}
知道如何存档吗? 谢谢
【问题讨论】:
标签: java web-services jax-ws cdata