2009-08-05 7 views
0

Ich verwende das Framework xFire, um einen Webservice in meiner Webanwendung zu veröffentlichen. In diesem Service verwende ich abstrakte Rückgabetypen in den Operationen wie Liste < Globaltype>. Die konkreten Rückgabewerte der Operationen sind ArrayList < SpecialType>.Abstrakte Typen in Webservice-Definition (WSDL)

Die konkrete Klasse SpecialType erweitert die abstrakte Klasse GlobaleType. Im generierten WSDL-Dokument wird nur GlobeType angegeben, mit der zusätzlichen Definition abstract = "true". Ein generierter Client (mit Hilfe der Apache-Achse) erstellt nur eine abstrakte Klasse GlobeType, die nicht zur Instanziierung verwendet werden kann.

Hat jemand eine Idee, warum der WSDL-Vertrag falsch ist?

Antwort

1

Wenn ich Sie richtig verstehe, Ihre Web-Methode Signatur:

public List<GlobaleType> doSomething(args) 

Dann wird Ihr Wsdl korrekt erzeugt wird. Solange die Apache-Achse weiß, dass der SpecialType den GlobalType erweitert, kann der letzte Typ über den Webservice gesendet werden und der Polymorphismus wird vom Web-Service zum Client übertragen.

Verwenden Sie einen JAX-WS-Webdienst? Stellen Sie dann sicher, dass Sie die Annotation @XmlSeeAlso für Ihren Basistyp verwenden.

Verwandte Themen