我对Rapidoid真的很陌生,所以请原谅我的无知。
我们需要生成一个包含属性和文本的soap xml有效负载,如下所示。
<profile xsi:type="ent:Profile" xmlns:ent="http://example.com">
<city xsi:type="xsd:string">San Francisco</city>
<country xsi:type="xsd:string">USA</country>
<email xsi:type="xsd:string">abc@test.com</email>
</profile>
显然,Rapoid上的默认XML渲染不支持JAXB @XmlAttribute和@XmlValue批注。
例如On.post(“ / test”)。xml((Req req)-> new Profile());
给出以下响应:
<Profile>
<city>
<type>xsd:string</type>
<value>1234</value>
</city>
</Profile>
如果遵循Jaxb批注,则预期响应为:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Profile>
<city xsi:type="xsd:string">1234</city>
</Profile>
我可能可以通过使用纯呈现并手动进行xml编组,以达到所需的结果,如下所示:
On.post("/test2").plain((SetRakutenKaiinModel b) ->{
JAXBContext jaxbContext = JAXBContext.newInstance(Profile.class);
Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
StringWriter stringWriter = new StringWriter();
marshaller.marshal(new Profile(), stringWriter);
return stringWriter.toString();
});
但是想要一种更干净的方法,例如自定义/覆盖默认的XML序列化程序。
非常感谢您的投入。
谢谢