Подтвердить что ты не робот

IllegalAnnotationsException: класс имеет два свойства одинакового имени

Я пытаюсь создать веб-службу IBM JAX_WS с использованием RSA 7.5 и сервера Websphere 7. Поскольку я новичок, следовательно, я следую первому подходу Java-класса, то есть сначала создаю классы Java, а затем создаю файл WSDL.

Когда я пытаюсь создать файл wsdl, я получаю исключение:

java.security.PrivilegedActionException: com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException: 1 количество исключений IllegalAnnotationsException Класс имеет два свойства с одним и тем же именем "planId"

Мой класс, который здесь называется, выглядит примерно так:

public class MemberDetails{
    @XMLElement(required=true)
    private String planId;
    //public getters and setters for the planId;
}

У меня нет идеи, почему это исключение происходит. Через поиск Google я попробовал несколько альтернатив для его решения, но ни один из них не работал у меня: (

Примечание:

Это единственная аннотация, которую я использую на протяжении всего рабочего пространства. Я не уверен, что это зависит от каких-то других аннотаций или нет. Но я попробовал несколько таких, как @XMLElement (name= "Plan", required = true), @XMLType и т.д., Но каждый раз, когда получаю это исключение.

Это исключение происходит во время wsgen. (java.lang.reflect.InvocationTargetException)

ИЗМЕНИТЬ

В принципе, когда мы создаем wsdl из java-сервиса и открываем WSDL в SOAP UI, мы получаем <!--Optional--> в верхней части каждого элемента. Я хочу удалить тег тега <!--Optional-->, поэтому я пытаюсь использовать метод @XMLElement (required = true), чтобы при открытии WSDL в SOAP UI <!--Optional--> не отображается для принудительных элементов.

Согласно моей концепции, @XMLElement (required = true) установит minOccurs на 1, то есть больше нуля, и, следовательно, необязательный комментарий будет удален из WSDL, когда я открою его в пользовательском интерфейсе SOAP. Но, к сожалению, он не работает, поэтому моя концепция неверна. После создания WSDL я вижу, что minOccurs все равно 0.

Пожалуйста, объясните, как удалить необязательный тег при открытии WSDL в интерфейсе SOAP.

Привет,

4b9b3361

Ответ 1

По умолчанию JAXB (JSR-222) реализует методы открытого доступа и аннотированные поля. Если вы аннотируете поле, в котором у вас также есть методы get/set, вы получите это исключение:

Если вы собираетесь аннотировать поля, вы должны указать @XmlAccessorType(XmlAccessType.FIELD)

@XmlAccessorType(XmlAccessType.FIELD)
public class MemberDetails{
    @XMLElement(required=true)
    private String planId;
    //public getters and setters for the planId;
}

Или вы можете аннотировать свойство

public class MemberDetails{

    private String planId;

    @XMLElement(required=true)
    public String getPlanId() {
        return planId;
    }
}

Дополнительная информация