如何让java Web服务使用扩展类

时间:2012-02-14 15:13:00

标签: java web-services cxf

我根据我们从客户端获得的一个大wsdl生成了一组带有apache cxf的类。它使用anyType让它包含一大堆不同类型。这是wsdl

<complexType name="PayloadBase">
    <complexContent>
        <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
        </restriction>
    </complexContent>
</complexType>

这将转换为以下java代码

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "PayloadBase")
public class PayloadBase {

    // empty as you can see

}

事实证明,任何想要使用这个类的孩子的班级都不知道如何使用它。比如说,PayloadBase的子类被添加到一个包含时间戳的包装对象中,生成以下XML

<bericht timestamp="2012-02-14T16:03:34.331+01:00"><payload/></bericht>

这是通过Web服务代码发送以下类的结果

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "BerichtDescription", propOrder = {
    "payload"
})
public class BerichtDescription {

    @XmlElement(required = true)
    protected PayloadBase payload;
    @XmlAttribute(name = "timestamp", required = true)
    @XmlSchemaType(name = "dateTime")
    protected XMLGregorianCalendar timestamp;

所使用的PayloadBase的任何实例都不会在生成的xml中显示。我已经通过调试器验证了PayloadBase实例确实填充了内容。如何让java webservices使用此设置?

1 个答案:

答案 0 :(得分:1)

我花了一些时间来弄清楚,但最后的诀窍是为每个子类的PayloadBase类添加@XmlSeeAlso注释。