Я действительно новичок в Rapidoid, поэтому прошу прощения за мое невежество.
У нас есть требование для создания полезных данных мыла 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>
Очевидно, что рендеринг XML по умолчанию на Rapidoid не учитывает аннотации 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 по умолчанию.
Действительно ценю ваши входные данные.
Спасибо