У меня есть существующая сложная объектная модель, которую я пытаюсь настроить на JAXB xml. Я не хочу менять какие-либо существующие классы домена, если это возможно. У меня есть этот фрагмент кода работает Маршаллу в файл (с помощью Groovy)Можно ли анализировать анализы объектов JAXB?
def marshallToFile(Object objectToMarshall, File location){
def context = JAXBContext.newInstance(objectToMarshall.class)
def m = context.createMarshaller()
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true)
location.withOutputStream { out ->
m.marshal(new JAXBElement(new QName("","rootTag"),objectToMarshall.class,objectToMarshall), out)
}
}
Проблема заключается в том, что объект Graph является очень сложным и JAXB говорит мне com.sun.istack.internal.SAXException2: A cycle is detected in the object graph. This will cause infinitely deep XML: [email protected][Id=100053900] -> [email protected][Id=100053900]
Есть ли способ, чтобы получить более подробную информацию о обнаруженный цикл? Кто-нибудь знает инструмент, который поможет проанализировать график или перечислить его графически, чтобы я мог выбирать циклы? У меня такое чувство, что на этом графике много циклов (это старое и сложное), поэтому любая помощь будет оценена.
Возможно, в качестве альтернативы вы можете сказать JAXB, что только уровни «n» находятся глубоко или что-то похожее, так что он не создает бесконечно глубокий XML?
Edit:
Так по отношению к моей конкретной проблеме ... Оказывается, существующий объект домена был Object getThis()
и void setThis(Object obj)
метод определил, что было «получением» и «установка» this
самореференции ключевых слов , Именно это и вызывало мой цикл. Это также подчеркивает тот факт, что JAXB должен использовать определения метода JavaBean для определения того, какие свойства он будет маршаллировать (о чем я раньше не знал).
Однако, я думаю, что исходный вопрос все еще стоит, есть ли хорошие инструменты для анализа/просмотра графа объекта?