Предупреждение от XStream, не удается найти itemFieldName в XStreamImplicit - PullRequest
0 голосов
/ 01 июля 2010

Я пытаюсь отследить источник предупреждения:

warning: Cannot find annotation method 'itemFieldName()' in type 'com.thoughtworks.xstream.annotations.XStreamImplicit'

Соответствующий код:

@XStreamAlias("things")
@XStreamImplicit(itemFieldName = "things")
private List<Thing> things;

Глядя на XStream JAR, я вижу:

@java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME)
@java.lang.annotation.Target({java.lang.annotation.ElementType.FIELD})
public static @interface XStreamImplicit {

    java.lang.String itemFieldName() default "";
}

Так что я не совсем уверен, почему я получаю предупреждение.Кажется, это не вызывает проблем, но я получаю кучу таких в выходных данных моего компилятора, и я бы хотел привести их в порядок.

Редактировать: Сделал еще несколько копаний и нашел это: http://java.dzone.com/articles/when-good-annotations-go-bad посмотрите на комментарий от "Фабрицио"

Хм ... может быть, я слишком быстро отвечаю, и я не очень хорошо понял ... но AFAIK, когда у вас естьскомпилировав класс C1 с аннотацией A, вы можете поместить C1 в путь к классам компиляции (и запуска) для C2 без необходимости помещать A в путь класса C2. Вы получаете только предупреждения, а A игнорируется (как это правильно делать: annotationsимеют значение только в определенном контексте, а в C2 контекст A не имеет смысла).

Я просто дважды проверил, скомпилировав пример класса X с JAR, который содержит аннотации javax.persistence (но не помещая jpa.jar в компиляторе classpath):

istral: / tmp> javac -classpath it-tidalwave-catalog.jar X.java it / tidalwave / catalog / persistence / CategoryPB.class (it / tidalwave / catalog /настойчивость: CategoryPB.clзадница): предупреждение: не удается найти метод аннотации name () в типе javax.persistence.Table: файл класса для javax.persistence.Table не найден / tidalwave / catalog / persistence / CategoryPB.class (it / tidalwave /catalog / persistence: CategoryPB.class): предупреждение: не удается найти метод аннотации 'length ()' в типе 'javax.persistence.Column': файл класса для javax.persistence.Column не найден / tidalwave / catalog / persistence / CategoryPB.class (it / tidalwave / catalog / persistence: CategoryPB.class): предупреждение: не удается найти метод аннотации 'name ()' в типе 'javax.persistence.Column'

и т. д. Просто предупреждения, компиляцияуспешно.

Так что я думаю, это просто проблема аннотации / пути к классам.

1 Ответ

0 голосов
/ 01 июля 2010

Я не очень знаком с XStream - выглядит довольно изящно - но исходя из характера используемых вами аннотаций (и учебника по аннотациям ), я думаю, у вас слишком много аннотаций на вашемthings.Из моего быстрого однократного аннотации псевдонимов преобразует полные имена объектов в более подходящие имена элементов XML (имена объектов по умолчанию).Неявные коллекции будут работать без имени поля, просто используя имя класса типа содержимого коллекции.Если вы хотите, чтобы элементы коллекции в XML имели другое имя, используйте свойство itemFieldName.

Я рекомендую попробовать тот же код, просто удалив аннотацию @XStreamAlias из things.и посмотрим, исправит ли это.Кроме того, если это работает, я думаю, что вы можете изменить значение в itemFieldName, потому что в его нынешнем виде у вас будет набор элементов с именем things - я думаю, что использование thing вместо этого может работать лучше.

Надеюсь, это поможет!

...