ERROR errors.GrailsExceptionResolver - Невозможно сослаться на неявный элемент - PullRequest
1 голос
/ 22 сентября 2010

Я получаю сообщение об ошибке ниже, когда пытаюсь использовать Xstream для маршалинга одного из моих классных доменов Employee.Сотрудник имеет множество сотрудниковDesiredSkills, которые принадлежат навыку и сотруднику

. Здесь приведен соответствующий код Xstream

employeeInstance = new Employee();
XStream xstream = new XStream();

Xstream.alias("employee", Employee.class);

String xml = xstream.toXML(employeeInstance);

. Для класса сотрудника объяснение employeeDesiredSkills определяется как ArrayLists.Я не совсем уверен, что сообщение об ошибке говорит.Я просто знаю, что "C Development" был одним из элементов, сохраненных как EmployeeDesiredSkill в базе данных

2010-09-21 18:13:13,911 [http-8080-1] ERROR errors.GrailsExceptionResolver  - Cannot    reference implicit element
---- Debugging information ----
implicit-element    : C Development
referencing-element : /employee/employeeDesiredSkills/storedSnapshot/EmployeeDesiredSkill/skill/roleSkills/owner
-------------------------------
com.thoughtworks.xstream.core.AbstractReferenceMarshaller$ReferencedImplicitElementException: Cannot reference implicit element
---- Debugging information ----
implicit-element    : C Development
referencing-element : /employee/employeeDesiredSkills/storedSnapshot/EmployeeDesiredSkill/skill/roleSkills/owner

-------------------------------
    at com.thoughtworks.xstream.core.AbstractReferenceMarshaller.convert(AbstractReferenceMarshaller.java:58)
    at com.thoughtworks.xstream.core.TreeMarshaller.convertAnother(TreeMarshaller.java:78)
    at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.marshallField(AbstractReflectionConverter.java:157)
    at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter$2.writeField(AbstractReflectionConverter.java:148)
    at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter$2.visit(AbstractReflectionConverter.java:118)
    at com.thoughtworks.xstream.converters.reflection.PureJavaReflectionProvider.visitSerializableFields(PureJavaReflectionProvider.java:129)
    at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.doMarshal(AbstractReflectionConverter.java:100)
    at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.marshal(AbstractReflectionConverter.java:58)
    at com.thoughtworks.xstream.core.AbstractReferenceMarshaller.convert(AbstractReferenceMarshaller.java:68)
    at com.thoughtworks.xstream.core.TreeMarshaller.convertAnother(TreeMarshaller.java:78)
    at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.marshallField(AbstractReflectionConverter.java:157)
    at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter$2.writeField(AbstractReflectionConverter.java:148)
    at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter$2.visit(AbstractReflectionConverter.java:118)
    at com.thoughtworks.xstream.converters.reflection.PureJavaReflectionProvider.visitSerializableFields(PureJavaReflectionProvider.java:129)
    at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.doMarshal(AbstractReflectionConverter.java:100)

1 Ответ

0 голосов
/ 22 сентября 2010

Учитывая Исключение, похоже, что ваш элемент Employee может иметь поле, которое должно быть явно указано в вашем XStream объекте.

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

В качестве метода отладки вы можете попробовать использовать omitField() XStream для ВСЕХ свойств Employee, а затем удалять их по одному, пока не выясните, какое из них вызывает проблему. Оттуда можно сверлить.

...