当前位置: 首页 > 知识库问答 >
问题:

IllegalAnnotationsException:类有两个同名的属性

冯亮
2023-03-14

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

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

JAVA安全PrivilegedActionException:com。太阳xml。内部的绑定v2。运行时。IllegalAnnotationsException:IllegalAnnotationsException类的1个计数有两个同名的属性“planId”

这里提到的我的类看起来像这样:

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

我不知道为什么会发生这种异常。通过谷歌搜索,我尝试了几种解决方法,但没有一种对我有效:(

注:

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

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

编辑

基本上,当我们从java服务方法创建一个wsdl并在SOAP UI中打开该WSDL时,我们会得到

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

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

当做


共有2个答案

苏乐童
2023-03-14

对于JAXB2.0,在getter或setter上用@Xml瞬态注释将防止冲突。

请参阅此处的更多信息:http://docs.oracle.com/javase/8/docs/api/javax/xml/bind/annotation/XmlTransient.html

公西季
2023-03-14

默认情况下,JAXB(JSR-222)实现处理公共访问器方法和注释字段。如果对一个字段进行注释,并且该字段还具有get/set方法,则会出现以下异常:

如果要注释字段,则应指定@xmlacessortype(xmlacesstype.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;
    }
}

了解更多信息

  • http://blog.bdoughan.com/2011/06/using-jaxbs-xmlaccessortype-to.html
 类似资料:
  • 问题内容: 我正在尝试使用RSA 7.5和Websphere 7服务器开发IBM JAX_WS Web服务。因为我是一个初学者,所以我遵循Java类优先方法,即首先创建Java类,然后生成WSDL文件。 当我尝试创建wsdl文件时,出现异常: java.security.PrivilegedActionException:com.sun.xml.internal.bind.v2.runtime.I

  • 假设您有2个包,并且有名为-Test的公共类。 第一个包。测试 第二包测试 它们中的每一个都有实例变量-x。 在第一种情况下-int x=2; 在第二种情况下-int x=3; 我想导入FirstPackage。在第二个包内测试。测试并打印值为2的x。 我的代码: 但是输出是3。如何打印?

  • 问题内容: 我正在用C#编写.NET Framework 3.5。 我正在尝试将某些Json解析为JObject。 Json如下: 当我尝试将此Json解析为JObject时,JObject仅了解LargeBox。SmallBox和MedBox的信息丢失。显然,这是因为它将“ TBox”解释为一个属性,并且该属性已被覆盖。 我从Delphi编码的服务中收到此Json。我正在尝试为该服务创建C#代理

  • 我在类SpawnManager中声明了一个私有int tree_count。void Start()和void Update()按照预期使用了该变量,但另一个方法public void tree_destroy似乎使用了不同的tree_count。 这是我的代码。

  • 我用的是spring soap ws。 我有以下对应于复杂类型的JAXB域类 我有以下带有@XmlRegistry注释的类 以下是endpoint 当我发出 Soap 请求时,我正在使用 soap 请求中的终结点中给出NAMESPACE_URI。 在这里,在这种情况下,我得到以下回应 如果我使用"超文本传输协议://命名空间/url"作为NAMESPACE_URI在endpoint和肥皂请求我得到

  • 问题内容: 获得JAXB异常,例如“两个类具有相同的XML类型名称…”, 这是异常详细信息 : 线程“主”中的异常com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException:1个IllegalAnnotationExceptions计数 两个类具有相同的XML类型名称“ city”。 使用@ XmlType.name和@ Xml