I «Не уверен, что есть достаточно деталей или вопроса, который здесь хорошо сформирован, чтобы дать точный ответ, но я делал что-то довольно похожее и сталкивался с некоторыми препятствиями. Думал, что я предоставил бы свои 2 цента. Я не так хорошо знаком с Кастором, как и с некоторыми другими XML-фреймворками, и в моем случае Кастор делает автоматическую сортировку/развязку вместо того, чтобы мы вручную записывали код, чтобы решить, когда мы хотим, чтобы это было сделано. Если бы мы вручную делали эту пьесу, я думал, что мы смогли бы принять решение об отказе от участия в определенных классах, расширяющих абстрактный класс.
Со всем моим отказом от ответственности, что вы могли бы сделать.
** Если вы можете добавить поле запроса/ответа, то создать что-то вроде этого:
public class RuleContainer {
private RuleType ruleType; // possibly build enum or other non-java equivalent
private RuleImpl1 ruleImpl1;
private RuleImpl2 ruleImpl2;
private RuleImpl...N ruleImpl...N;
// getters & setters, etc
}
Тогда значение вашей таблицы изменяется на
<field name="value" type="com.RuleContainer"></field>
и включают в себя отображение от RuleContainer
<class name="com.RuleContainer">
<field name="ruleType" type="com.RuleType"
<field name="ruleImpl1" type="com.RuleImpl1">
<field name="ruleImpl2" type="com.RuleImpl2">
<field name="ruleImpl...N" type="com.RuleImpl...N">
</class>
также включают в себя отображения каждой реализации независимо от того, что может выглядеть l Айк. В моем случае я разбил каждое картирование реализации в отдельный файл и использовать
<include href="" />
тег, чтобы включить эти лишние отображения в родительском файле.
Все это позволяет вам использовать это поле RuleType, чтобы узнать, какое правило в RuleContainer является допустимым (остальное будет равно null, если требуется значение Castor = «false»). Логика для работы с каждой реализацией правила проста писать оттуда. Надеюсь, это поможет.