Аннотации XmlElement не разрешены с помощью WebParam

У меня есть метод внутри webservice со следующей подписью:

@WebResult(name="purchaseId") public int CreatePurchase(
            @XmlElement(required=true)
            @WebParam(name = "item") String item {
  ...
}

Мне кажется (на основе какой информации я нашел), что это должно работать. К сожалению, я получаю следующее сообщение об ошибке при компиляции:

The annotation @XmlElement is disallowed for this location

Кто-нибудь знает, как решить проблему?

Ответы

Ответ 1

JAX-B включен по умолчанию в JDK. Версия, которая поставляется с конкретным JDK, не обновляется почти так же часто, как JAX-B. Текущей версией, поставляемой с JDK (1.6), является JAX-B 2.1.10 (документировано здесь).

@XmlElement разрешен только для параметров метода, начиная с JAX-B 2.2

Когда Java загружает libaries, он загружает библиотеки, которые поставляются вместе с JDK, прежде чем загружать библиотеки, находящиеся в пути к классам. Upgrdading для Java 7 исправит вашу проблему. Существует также процесс передачи Java, что вы хотите использовать более современную библиотеку, если вы не можете перейти на Java 7. Они называются "одобренными" библиотеками, и вы должны поместить библиотеку в одну и ту же как сама JDK. Этот процесс описан здесь.

Ответ 2

При появлении следующего сообщения об ошибке: " аннотация @XmlElement запрещена для этого местоположения), возможно, вы используете неправильный оператор импорта.

Измените его на:

import javax.xml.bind.annotation.XmlElement;

Поскольку Eclipse предлагает другой пакет в качестве первого варианта, это очень распространенная ошибка.