Some questions about rodl

Hi,

  • In a StrucData I have some fields, but I want some of them to not appear in the enveloppe is they are not set.
    I mean instead of having something like <organizationalUnitId/> having nothing since this is optionnal.
    Is there a way to do this ?

  • I want a Struct Data to appear like this
    <referentialData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="bus:externalReferentialData">
    instead of <referentialData>
    What should I add to the Rodl file?

Thanks

xsi:type tag is generated only if xsoSendUntyped isn’t set in SerializationOptions property of SOAPMessage and IsSimpleTypeExtension attribute isn’t set in RODL. You can see specific conditions for each type in uROXMLSerializer.pas

the rest you can’t reach via editing of RODL.

Thanks Evgeny,

will try this.

Regards

Evgeny,

Both are not set but type tag is not generated…

Any idea ?

Regards

try to review how to your type is written in uROXMLSerializer.pas.

Evgeny,

there’s a strange thing xsoSendUntyped is not set on the Message Component while it it set when debuging.
Is there something that can change the property during runtime ?

xsoSendUntyped is set for sRPCLiteral / sDocumentLiteral modes and unset for sRPCEncoding soap modes.
Look like your WSDL (and RODL later) contains Use=Literal attribute so xsoSendUntyped is set automatially

Each functions have these atribute in the Rodl

                            <style Value="document" />
                            <use Value="literal" />

should I remove them or change their values by something else ?

Is there somewhere a documentation about all these attributes we can set in the Rodl ?

these (and others) attributes allows you to customize SOAP message and generate valid xml.

this means that soap importer detected that server-side allows only sDocumentLiteral mode and change these values could generate incompatible xml as a result, server won’t accept generated xml.

The problem is that the server expect the classname of object
for instance

for a field (reportField) I have to set
<instructions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="v1:reportField">

for an array of field (tableSection)
<instructions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="v1:tableSection">

If I just use <instructions> the server crash because it doesn’t know what kind of properties to read

Stupid question but isn’t there an attribute in a struct to force to add these type Tag automatically ?

you can try to replace it with

<use Value="rpc">

in this case, sRPCEncoding will be used and xsoSendUntyped will be unset

another solution is update your wsdl:

    <soap12:binding style="document" transport="..."/> //<<<<<<<<
    <wsdl:operation name="...">
      <soap12:operation soapAction="...." style="document"/> ///<<<<<<<<<<<
      <wsdl:input name="....">
        <soap12:body use="literal"/>///<<<<<<<<<<<

and remove/replace these values

This webservice is realy a nightmare, doing this doesn’t work because all the other part of the enveloppe (that worked previously) changes also.
Is there a way to have RPC not on the operation level but only in a struct level ?

message can have only one soapmode, i.e. you can’t use different modes in different places of the same message.

but you can update “ready” message manually in OnFinalizeMessage event. you can use message.*Node properties for making changes

Thanks Evgeny it works like that :slight_smile: