我正在尝试使用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计数 Class有两个同名的属性“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 UI <!--Optional-->
中打开WSDL时,不会出现强制性元素。
根据我的概念,@ XMLElement(required = true)会将minOccurs设置为1,即大于零,因此当我在SOAP UI中打开它时,可选的注释将从WSDL中删除。但不幸的是它没有用,因此我的概念不正确。生成WSDL之后,我可以看到minOccurs仍为0.
请解释在SOAP UI中打开WSDL时如何删除可选标记。
此致
答案 0 :(得分:39)
默认情况下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;
}
}
了解更多信息
答案 1 :(得分:0)
对于JAXB2.0,在getter或setter上使用@XmlTransient
进行注释可以防止冲突。
在此处查看更多内容:http://docs.oracle.com/javase/8/docs/api/javax/xml/bind/annotation/XmlTransient.html