Вы правы, Кастор ожидает статическое отображение. Но вы можете работать с этим. Вы можете написать некоторый код, который изменит входящий xml, чтобы на вашей стороне Castor мог использовать одну схему, а на стороне ваших клиентов им не приходилось менять свои схемы.
Измените схему, которую Кастор ожидает получить с чем-то с общим корневым элементом, с учетом этого ваши девять различных альтернатив для ваших различных объектов (я думаю, вы можете ограничить ее, чтобы схема допускала только одну из девяти, если это не сработает, вы можете просто сделать все подэлементы необязательными).
Затем вы можете написать код, который модифицирует входящий xml, чтобы обернуть ваш входящий xml этим общим корневым элементом, а затем подать обернутый xml в поток, который читается демаршаллером Castor.
Существует как минимум 3 различных способа реализации XML-оболочки: библиотеки SAX, XSLT и XML (например, JDOM, DOM4J и XOM - я предпочитаю XOM, но любой из них будет работать).
Путь SAX, вероятно, лучше всего подходит, если вы уже знакомы с SAX или если один из других способов работает, но не хватает производительности. Если бы мне пришлось реализовать это, то я бы создал XMLFilter, который принимает xml и записывает xml, укладывая его поверх другого куска, который записывает xml в OutputStream, и записывая метод-обертку вокруг демаршаллинга, чтобы передать входящий поток в xmlreader, скопируйте OutputStream в другой InputStream (простой способ - использовать commons-io) и передайте новый InputStream в демаршаллер Castor.
С XSLT нет никакого дурака с SAX, хотя иногда XSLT имеет репутацию болевого синдрома, мне кажется, что это может быть относительно простым преобразованием, но я также не сделал на это укол. Прошло много времени с тех пор, как я использовал XSLT для чего-либо. Я также не уверен в производительности, хотя я бы не стал списывать ее со счетов.
Использование XOM, JDOM или DOM4J для переноса XML также возможно, и кривая обучения намного ниже, чем для SAX или XSLT. Недостатком является то, что весь XML-документ имеет тенденцию сразу всасываться в память, поэтому, если вы имеете дело с достаточно большими документами, вам может не хватить памяти.