【问题标题】:JAX-WS: How to Exclude a "member/field" in a Response Object (WS Response) that is inherited?JAX-WS:如何在继承的响应对象(WS 响应)中排除“成员/字段”?
【发布时间】:2010-12-16 14:19:45
【问题描述】:

我有一个 WebService,它作为 Web 服务调用的结果返回一个名为“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)和所有“对象关联”,如(地址/订单/历史).. 我怎样才能做到这一点,用什么注释和程序?

非常感谢!! 一月

【问题讨论】:

    标签: jax-ws


    【解决方案1】:

    关于@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 上不可见。

    【讨论】:

    • 好地方。您的字段需要transient,吸气剂需要@XmlTransient
    • 在没有transient的情况下为我工作
    • 不适用于布尔类型。但是,如果您注释布尔字段,它就可以工作。
    【解决方案2】:

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

    【讨论】:

    • 您好KT,非常感谢您的回答。好吧,我实际上尝试了@XMLTransient,但它没有以某种方式工作。 (不过,Apache CXF 似乎至少在加载 Web 服务时“抓取”了对象图并引发了一些异常(因为我的对象图有一些同名的内部静态枚举......)。我会再试一次,并会尝试你的 XmlAccessType.NONE。坦克!
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-30
      • 2016-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多