非法注释例外:类有两个同名的属性

2022-09-02 11:50:12

我正在尝试使用 RSA 7.5 和 Websphere 7 服务器开发 IBM JAX_WS Web 服务。由于我是初学者,因此我遵循Java类优先方法,即我首先创建Java类,然后生成WSDL文件。

当我尝试创建wsdl文件时,我得到一个例外:

java.security.PrivilegedActionException:com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException: 1 Counts illegalAnnotationsException 类有两个同名属性 “planId”

我在这里引用的类看起来像这样:

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

我不知道为什么会发生这种例外。通过谷歌搜索,我尝试了一些替代方案来解决它,但没有一个对我有用:(

注意:

这是我在整个工作区中使用的唯一注释。我不确定这是否依赖于其他一些注释。但是我尝试了一些,例如@XMLElement(name=“Plan”,required=true),@XMLType等,但每次我都会得到这个例外。

此异常在 wsgen 期间发生。(java.lang.reflect.InvocationTargetException)

编辑

基本上,当我们从java服务方法创建一个wsdl并在SOAP UI中打开该WSDL时,我们就会到达每个元素的顶部。我想删除此选项标记标记,因此我正在尝试@XMLElement(required=true)方法,以便当我在SOAP中打开WSDL UI时不会出现在强制元素中。<!--Optional--><!--Optional--><!--Optional-->

根据我的概念,@XMLElement(required=true)会将 minOccurs 设置为 1,即大于零,因此当我在 SOAP UI 中打开它时,可选注释将从 WSDL 中删除。但不幸的是,它不起作用,因此我的概念是不正确的。生成 WSDL 后,我可以看到 minOccurs 仍然是 0。

请解释一下,当我在 SOAP UI 中打开 WSDL 时,如何删除可选标记。

问候


答案 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;
    }
}

详细信息


答案 2

对于 JAXB2.0,使用 on getter 或 setter 进行注释将防止冲突。@XmlTransient

在这里查看更多: http://docs.oracle.com/javase/8/docs/api/javax/xml/bind/annotation/XmlTransient.html


推荐