我有一个WebService,它作为Web服务Invokation的结果返回一个名为“CustomerResponse
”的ResponseObject。当我从头开始实现这个对象时,一切正常:在这种情况下,我的实现只包含所有需要的“简单类型”,如字符串,整数,但没有对象引用/关联。
然而,我想要做的是,“重用”现有的对象。我在我的域模型中有一个“Customer
”对象,它在应用程序本身中使用。而不是愚蠢地或多或少地将Customer
克隆到“CustomerReponse”对象中(通过再次手动键入所有成员/字段),我希望将CutomerResponse
对象基于Customer
对象通过扩展:
class CustomerResponse extends Customer
==>问题是现在CustomerResponse
包含一些“内部”字段,这些字段继承自Customer
对象(如DatabaseID,Security-Stuff),我不希望通过Web服务公开这些字段。此外(那是当前主要问题“)Customer
还包含很多”对象引用/关联“到我做的其他对象,如Address
,Orders
,History
不希望通过Web服务公开。(似乎Apache CXF“评估”整个Objectgraph并尝试将它们包含在ResponseObject中......)
==>是否有可能基于现有对象“扩展”WebService响应对象,并以某种方式排除某些扩展超类的“成员/字段”? (所以我想排除一些成员(如DatabseID)和所有“对象关联”,如(Address / Orders / Histroy).. 我怎样才能用注释和程序来完成这个?
非常感谢!! 扬
答案 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。