Генерирование XSD из существующих классов звучит для меня как самый безопасный путь.
Однако, мне кажется, что если вы не знаете JAXB хорошо, то подход к аннотированию ваших собственных классов может оказаться крайне разочаровывающим (как с болью, так и со временем :)).
Это произошло со мной в связанном контексте, когда я попытался вручную извлечь суперкласс из классов, сгенерированных JAXB, а затем перенаправить экземпляры в XML. Я получал различные (загадочные) исключения JAXB. Правда, мои знания JAXB еще не настолько глубоки.
Если вы настаиваете на использовании JAXB, то я предлагаю рассмотреть возможность использования первого подхода (XSD + XJC) в качестве способа получения начальных аннотаций JAXB для ваших классов.
Вы можете использовать XSD + XJC, чтобы получить представление о том, как комментировать свои собственные классы. Тогда вы можете попробовать и разместить на них правильные аннотации. Начните с более сложных классов (ссылок, наследования, списка ссылок, списка ссылок на абстрактный базовый класс) в самом начале.
Использование другой технологии для генерации XSD из неаннотированных классов в качестве начального шага на XSD может помочь. Или вы можете выбрать XSD, охватывающий большую часть того, что используют ваши классы.
Если цель этих усилий состоит в том, чтобы также иметь возможность маршалировать экземпляры в XML, то я предлагаю следить за JAXBElement. В некоторых случаях (которые я не могу точно указать из-за недостатка знаний) экземпляры не будут маршалировать, если они не заключены в элемент JAXBElement.
Мы используем HyperJAXB для генерации уровня персистентности на основе набора XSD. Сгенерированные классы также используются для маршалинга. У нас есть много «веселья», заставляя это работать, особенно. из-за IDREF и JAXBElement.