Вполне возможно, что по умолчанию Castor - используя интроспекцию для получения списка полей с помощью методов getter / setter и генерацию XML-тегов на основе имен классов и членов, будет выполнять большую часть того, что вы хотите.Однако вы, вероятно, обнаружите, что вам, возможно, придется настроить его, чтобы убедиться в таких вещах, как порядок тегов в выходных данных и точное форматирование.
Важные элементы, которые необходимо добавитьявляются map-to
определениями XML для каждого класса (что позволяет каждому узлу XML быть демаршалированными в правильный класс) и bind-xml
узлами для каждого поля, чтобы поля могли отображаться в правильное местоположение.Есть еще одно изменение, которое вы внесете в поле client
- вы заметите, что значение поля во входящих данных для клиента отображается не как дочерний элемент узла client
, а как дочерний элемент узла project
,Вы можете сделать это, указав container="true"
, что означает, что класс не будет отображаться, только его поля.
(не проверено) что-то вроде этого, при условии, что ваша строка клиента собирается в поле с именем name
.
<class name="Project">
<map-to xml="project"/>
<field name="client" type="Client" container="true"/>
<field name="description" type="string"><bind-xml name="description"/></field>
</class>
<class name="Client">
<field name="name" type="string"><bind-xml name="client"/></field>
</class>