gpt4 book ai didi

java - Spring + JAXB 集成 : Class has two properties of the same name

转载 作者:行者123 更新时间:2023-11-29 10:01:43 25 4
gpt4 key购买 nike

我在生成 WSDL 时遇到问题。我想创建生成 json 字符串SOAP 网络服务。下面的 pojo 类是从另一个 Web 项目引用到我的 Web 服务项目中的。我在 servlet 响应 对象上写入生成的 json 字符串,该对象是使用 WebServiceContext 创建的,并且使用 @Resource 注释进行注释。

我还尝试调试 Web 服务方法(用@WebParam 注释的参数化),pojo,但项目未在 Debug模式下启动。在调用网络方法之前,它会为所有字段抛出异常:

Caused by: com.sun.xml.bind.v2.runtime.IllegalAnnotationsException: 15 counts of IllegalAnnotationExceptions
Class has two properties of the same name "result"
this problem is related to the following location:
at public portal.common.ejb.LoginResult portal.common.ejb.LoginResponse.getResult()
at portal.common.ejb.LoginResponse
this problem is related to the following location:
at private portal.common.ejb.LoginResult portal.common.ejb.LoginResponse.result
at portal.common.ejb.LoginResponse
Class has two properties of the same name "userInfo"
this problem is related to the following location:
at public portal.common.ejb.UserDTO portal.common.ejb.LoginResponse.getUserInfo()
at portal.common.ejb.LoginResponse
this problem is related to the following location:
at private portal.common.ejb.UserDTO portal.common.ejb.LoginResponse.userInfo
at portal.common.ejb.LoginResponse
Class has two properties of the same name "notifications"
this problem is related to the following location:
at public java.util.List portal.common.ejb.LoginResult.getNotifications()
at portal.common.ejb.LoginResult
at private portal.common.ejb.LoginResult portal.common.ejb.LoginResponse.result
at portal.common.ejb.LoginResponse
this problem is related to the following location:
at private java.util.List portal.common.ejb.LoginResult.notifications
at portal.common.ejb.LoginResult
...

我正在使用 jaxws-ri-2.2.8jaxws-json-1.2jaxws-spring-1.9 xbean-spring-3.9 & spring-framework-4.0.3.RELEASE-dist

注意:我对网络服务不太熟悉,所以请保持礼貌和耐心。

POJO

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class LoginResponse {

private LoginResult result;
private UserDTO userInfo;
// Getter/setter
}

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class LoginResult {

private List<String> notifications;
private boolean success;
// Getter/setter
}

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class UserDTO {

private String eMail;
private Integer externalIdentifier;
private String firstName;
private String lastLoggedIn;
private String lastName;
private String phone;
private Integer role;
private String status;
private String title;
private int userId;
private String userIdentifier;

// Getter/setter
}

引用文档:

我也引用下面的链接来解决错误

JAXB's @XmlAccessorType - @Blaise Doughan

Jaxb, Class has two properties of the same name - Stackoverflow

IllegalAnnotationsException: Class has two properties of same name - Stackoverflow

我尝试了@Blaise Doughan 给出的所有示例。在 Java 应用程序和 Web 应用程序中也一切正常。还尝试生成 wsdl 并在控制台上生成并打印输出 xml。

任何人都可以指出我的 pojo 类中有什么问题吗?我在这上面花了很多时间,但没有运气。我应该怎么做才能摆脱这个错误?

编辑:

我还在 getter 方法上尝试了 @XmlTransient 注释,在所有字段上都尝试了 @XmlElement 注释,但是,同样的问题。

非常感谢

最佳答案

默认情况下,JAXB 将公共(public)属性(get/set 方法对)视为已映射。如果你也注释了相应的字段(实例变量),你会得到这个异常。

如果您使用 @XmlAccessorType(XmlAccessType.FIELD) 注释您的类,那么 JAXB 会将字段视为已映射。如果您还注释了相应的属性,您将得到此异常。

检查堆栈跟踪

在堆栈跟踪中,您可以看到 JAXB impl 提示 LoginResult.getNotifications()LoginResult.getNotifications() 都被映射。

Class has two properties of the same name "notifications"
this problem is related to the following location:
at public java.util.List portal.common.ejb.LoginResult.getNotifications()
at portal.common.ejb.LoginResult
at private portal.common.ejb.LoginResult portal.common.ejb.LoginResponse.result
at portal.common.ejb.LoginResponse
this problem is related to the following location:
at private java.util.List portal.common.ejb.LoginResult.notifications
at portal.common.ejb.LoginResult

了解更多信息

我在我的博客上写了更多关于 JAXB 和访问器类型的文章:

关于java - Spring + JAXB 集成 : Class has two properties of the same name,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24366814/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com