Closed GoogleCodeExporter closed 9 years ago
Child type is serialized as parent because reference to parent object(that goes
from operation) is passed to serializing function.
I assume this is right behavior, because there is no method to detect what type
comes on receiver's side.
When you need to serialize inherited types you should use
dynamic(staff::Abstract) types.
Original comment by loentar
on 22 Sep 2012 at 8:40
Ok, I'll use staff::Abstract
What shall I put in the wsdl so staff creates the method with staff::Abstract
types?
The wsdl I have right now is similiar to the one I've sent you, and I would
like to only modify slightly wsdl (without making it incompatible with the
previous syntax) or changing the parameters to staff_codegen.. (I would like to
avoid as much as posible modifying the staff generated code, because of coding
standard validation issues) is this posible?
Original comment by alexmantaut
on 25 Sep 2012 at 2:01
Just add abstract="true" attribute to you base complexType like that:
http://www.w3.org/TR/2001/REC-xmlschema-0-20010502/#abstract
Original comment by loentar
on 25 Sep 2012 at 5:52
I added the the abstract="true" to MyType1 (Base type) but the generated
interface does not use staff::Abstract...
Actually by looking at my original wsdl it had abstract="true" for the base
type, but it didn't serialized the base types...
Is there anything else I should do in order to use staff::Abstract?
Original comment by alexmantaut
on 25 Sep 2012 at 6:15
Please see example in attach.
This is a WSDL generated by abstract service example located at
`staff/samples/abstract/component`.
Original comment by loentar
on 25 Sep 2012 at 6:28
Attachments:
I've compared your wsdl to mine and I've managed to make the codegen use
staff::Abstract, but still I have several issues.
On the example attached you can see that if createMyType1Request/Response uses
an element the codegen sets the method to correctly use Abstract (foo.wsdl
lines 56 to 71) but if I use the type1 directly it sets the method to use an
instance of the base class (which should be Abstract instead)
Another problem arises with foo.wsdl lines 19 and 20... If I uncomment line 19
and regenerate the code, the codegen issues a warning, and the created class
doesn't have the attribute...
If I uncomment line 20 the codegen creates the code, but when I call method
createMyType1() it crashes with segfault...
Am I doing something wrong in the wsdl?
Original comment by alexmantaut
on 1 Oct 2012 at 3:36
Attachments:
Your wsdl looks right.
1. Type as message part: Accepted.
2. Codegen does right because "complexType" can't have "element" child, only
under "sequence" element.
When I uncomment line with "attribute", generated request was right, but there
is a bug while parsing response (Invalid response element name, when message
part set as "type").
Also seems like there is a bug with SoapUI, it doesn't generate xsi:type
attribute.
Original comment by loentar
on 2 Oct 2012 at 2:05
Original comment by loentar
on 4 Oct 2012 at 7:48
This issue was closed by revision r715.
Original comment by loentar
on 4 Oct 2012 at 8:02
Hi, I've tried the fix and it worked on the example I've originally sent you,
but when I tried the original wsdl it still fails... It turns out that there is
a bug if the type definition is in a separate xsd file...
If I generate the source files with :
staff_codegen -pwsdl -tclient_all inheritance_issue.wsdl
(wsdls attached to the comment)
the generated code doesn't use staff::Abstract, so I can't use it with
inheritance.
I'm using r715
Original comment by alexmantaut
on 12 Oct 2012 at 7:48
Attachments:
Sorry, didn't see last message earlier.
Now it should be fixed in r717.
Original comment by loentar
on 6 Nov 2012 at 6:31
Original issue reported on code.google.com by
alexmantaut
on 21 Sep 2012 at 4:09Attachments: