JAXB: Как узнать, какой класс Java нужно демаршировать при наличии нескольких XSD? - PullRequest
3 голосов
/ 17 июля 2011

У меня есть несколько файлов XSD, которые я обработал с помощью XJC для генерации классов Java.

Я хотел бы прочитать произвольный файл XML и, основываясь на содержимом файла XML, преобразовать его в один из сгенерированных классов Java.

Можно ли сделать это, не изучая содержимое самого XML и не позволяя инфраструктуре JAXB выполнять всю работу?

Например, допустим, у меня есть следующие XSD-файлы:

dog.xsd cat.xsd

Я компилирую их, используя XJC для генерации Dog.java и Cat.java.

Теперь я читаю некоторый произвольный XML и создаю экземпляр Dog или Cat, в зависимости от того, какой схеме он соответствует.

Спасибо.

Ответы [ 2 ]

4 голосов
/ 17 июля 2011

XJC генерирует классы на основе типов в ваших схемах, а не самих схем.И он помещает сгенерированные классы в пакеты на основе этих целевых пространств имен.Если вы загружаете несколько схем в JAXBContext, он автоматически отменяет маршалинг до правильного типа.В этом и заключается весь смысл JAXB.Если в двух ваших схемах есть типы с одинаковыми именами в одном и том же пространстве имен, XJC завершится ошибкой.

0 голосов
/ 17 июля 2011

Простое решение, которое может сработать, - попытаться отменить вызов одного из них, если все в порядке, а затем правильное, если вы получите исключение, которое является вторым, которое вам следует использовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...