Так что я искал вокруг немного для решения этой конкретной проблемы, и я надеюсь, что кто-то может указать мне в хорошем направлении.Проблема с JAXB с отсутствующим пространством имен
Мы получаем данные как XML, и у нас есть только XSD для проверки данных. Поэтому я использовал JAXB для генерации классов Java. Когда я пошел на демонтаж образца XML, я обнаружил, что некоторые значения атрибутов отсутствуют. Оказывается, что схема ожидает, что эти атрибуты будут QName, но поставщик данных не определил префикс в XML.
Например, одно значение атрибута XML равно "repository:<uuid>"
, но префикс пространства имен «репозиторий» никогда не определяется в наборе данных. (Не обращайте внимания на то, что лучшие практики поставщика предлагают определить его!)
Итак, когда я пошел на демонтаж набора образцов, атрибуты QName с указанным префиксом («репозиторий» в моем примере выше) являются NULL! Таким образом, похоже, что JAXB «выбрасывает» те значения атрибута QName, которые имеют неопределенный префикс пространства имен. Я удивлен, что он не сохраняет даже локального имени.
В идеале, я хотел бы сохранить значение как есть, но похоже, что я не могу сопоставить QName со строкой во время привязки (схема к Java).
Я попытался «вручную» вставить определение пространства имен в XML и работает как шарм. Каким будет наименее сложный метод?
Есть ли способ «вставить» отображение/определение пространства имен во время выполнения? Или определить его «глобально» во время привязки?
Я настоятельно рекомендую вам опубликовать соответствующие части вашего CSD и XML-документа. По-прежнему очень вероятно, что XML, который вы reeive не соответствует XSD, что будет проблемой для JAXB un-marshalling. Если вы установили, что XML на самом деле соответствует XSD (например, с помощью онлайн-инструмента проверки), скажите так (так, чтобы SO-помощники убирали его с пути). –
Я задавался вопросом, должен ли я предоставить некоторые подробности, но это было немного сложно на моем планшете. В следующий раз я дам реальную заявку на код. Спасибо за ответ. – raydogg