JAX-WS:如何排除继承的响应对象(WS响应)中的“成员/字段”?

时间:2009-11-14 13:45:28

标签: jax-ws

我有一个WebService,它作为Web服务Invokation的结果返回一个名为“CustomerResponse”的ResponseObject。当我从头开始实现这个对象时,一切正常:在这种情况下,我的实现只包含所有需要的“简单类型”,如字符串,整数,但没有对象引用/关联。

然而,我想要做的是,“重用”现有的对象。我在我的域模型中有一个“Customer”对象,它在应用程序本身中使用。而不是愚蠢地或多或少地将Customer克隆到“CustomerReponse”对象中(通过再次手动键入所有成员/字段),我希望将CutomerResponse对象基于Customer对象通过扩展:

class CustomerResponse extends Customer

==>问题是现在CustomerResponse包含一些“内部”字段,这些字段继承自Customer对象(如DatabaseID,Security-Stuff),我不希望通过Web服务公开这些字段。此外(那是当前主要问题“)Customer还包含很多”对象引用/关联“到我做的其他对象,如AddressOrdersHistory不希望通过Web服务公开。(似乎Apache CXF“评估”整个Objectgraph并尝试将它们包含在ResponseObject中......)

==>是否有可能基于现有对象“扩展”WebService响应对象,并以某种方式排除某些扩展超类的“成员/字段”? (所以我想排除一些成员(如DatabseID)和所有“对象关联”,如(Address / Orders / Histroy).. 我怎样才能用注释和程序来完成这个?

非常感谢!! 扬

3 个答案:

答案 0 :(得分:10)

关于@XmlTransient注释,我发现你需要将它放在要隐藏的字段的getter方法上。

public class InputBean
{
    private String fieldShow;
    private transient String fieldHide;

    public String getFieldShow() {
        return fieldShow;
    }

    public void setFieldShow(String fieldShow) {

        this.fieldShow = fieldShow;
    }

    @XmlTransient
    public String getFieldHide() {
        return fieldHide;
    }

    public void setFieldHide(String fieldHide) {
        this.fieldHide = fieldHide;
    }
}

在示例中,“fieldHide”在服务xsd上不可见。

答案 1 :(得分:6)

@XmlTransient注释用于隐藏您不想显示的成员。您应该能够注释这些成员,并且它们不会受到约束。或者,将@XmlAccessorType更改为XmlAccessType.NONE,只有特定注释的方法才会绑定到XML。

答案 2 :(得分:-8)

C#解决了部分类的问题。我不知道如何使用jax-ws。