CXF:如何在通过SOAP发送对象时排除某些属性?

时间:2011-10-10 11:16:09

标签: java cxf

我使用Apache CXF 2.4.2,当我从数据库向用户返回一些对象时,我想要排除一些属性(例如,密码)。我如何才能而不创建临时类?有注释吗?

2 个答案:

答案 0 :(得分:10)

根据@ tomasz-nurkiewicz评论,我应该使用@XmlTransient注释。但正如文档中所述

  

默认情况下,如果某个类上没有@XmlAccessorType,并且没有使用@XmlAccessorType注释其超类,则假定该类具有以下默认值:

     

@XmlAccessorType(XmlAccessType.PUBLIC_MEMBER)

XmlAccessType.PUBLIC_MEMBER表示:

  

每个公共getter / setter对和每个公共字段都将自动绑定到XML,除非由XmlTransient注释。私有,受保护或默认为仅包访问的字段或getter / setter对仅在由适当的JAXB注释显式注释时才绑定到XML。

所以这就是为什么私有字段的@XmlTransient在Tomasz Nurkiewicz的示例中不起作用的原因。有两种方法可以解决这个问题:

1)向公共getter添加注释:

private String password;

@XmlTransient
public String getPassword() {
    return password;
}

2)将@XmlAccessorType添加到课程:

@XmlAccessorType(XmlAccessType.FIELD)
public User {

    @XmlTransient
    private String password;

}

发现于:http://old.nabble.com/@XmlTransient-ignored-td7406659.html

答案 1 :(得分:4)

我假设您正在使用JAXB进行对象XML映射。在这种情况下,只需使用@XmlTransient注释要在数据库实体中跳过的字段。

@XmlTransient
private String password;

但请注意,有一天您会发现确实需要一个临时课程主要是为了将您的CXF Web服务与后端分离。毕竟你不想记住在数据库中添加一个列会立即破坏SOAP接口......