IllegalAnnotationsException:类有两个同名的属性

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (32)

我正在尝试使用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 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时,我们就可以看到<!--Optional-->每个元素的顶部。我想删除此选项标记<!--Optional-->标记,因此我正在尝试使用@XMLElement(required = true)方法,以便在SOAP中打开WSDL时,<!--Optional-->不会显示强制元素。

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

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

问候,

提问于
用户回答回答于

默认情况下,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;
    }
}

了解更多信息

扫码关注云+社区

领取腾讯云代金券