java - 如何让 java webservices 使用扩展类

标签 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>

这是通过webservice代码发送以下类的结果

@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 使用此设置?

最佳答案

我花了一段时间才弄清楚,但最终的窍门是为每个子类的 PayloadBase 类添加 @XmlSeeAlso 注释。

关于java - 如何让 java webservices 使用扩展类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9279337/

相关文章:

java - Android:收到对方的拨号号码

c# - WCF RESTFul 服务 - 404 端点未找到 2 个服务

.net - 为什么我无法在 Visual Studio 中从此 WSDL 文件生成客户端代码?

xml - 在 Marshaller 上设置 CharacterEscapeHandler 变量在 CXF 中无法按预期工作

java - JaxWsDynamicClientfactory + java.lang.RuntimeException : Cannot create a secure XMLInputFactory

java - 迭代 HIDDEN channel 中的 token

JAVA:在一组边中查找多边形

java - 如何在Java中设置Email客户端?

web-services - 使用Groovy从wsdl创建SOAP Web服务

java - 使用 CXF 调用 Microsoft CRM 2011 本地 Web 服务