2

I have a Java web service to which I've linked from a Delphi 2007 app using the WSDL Importer. Setting it up has been a rocky road but I'm almost there!

I now have the situation where my arrays aren't being serialized in a way that my Java web service can consume. I've written the same app in .Net to test it out (it works fine) and the XML I'm looking to generate looks like this: -

<?xml version="1.0"?>
<SOAP-ENV:Envelope
        xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
        xmlns:xsd="http://www.w3.org/2001/XMLSchema"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/">
    <SOAP-ENV:Body xmlns:NS2="http://path.to.service">
        <NS1:addActivities xmlns:NS1="http://path.to.service/">
            <login href="#1"/>
            <project xsi:type="xsd:string">PROJ001</project>
            <activities>
                <id xsi:type="xsd:string">DELPHITEST</id>
                <name xsi:type="xsd:string">This is a test</name>
            </activities>
            <activities>
                <id xsi:type="xsd:string">DELPHITEST2</id>
                <name xsi:type="xsd:string">This is another test</name>
            </activities>
        </NS1:addActivities>
        <NS2:login id="1" xsi:type="NS2:login">
            <database xsi:type="xsd:string">My_database</database>
            <password xsi:type="xsd:string">neverUmind</password>
            <username xsi:type="xsd:string">bob</username>
        </NS2:login>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

However, the XML that Delphi generates is as follows: -

<?xml version="1.0"?>
<SOAP-ENV:Envelope 
        xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
        xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/">
    <SOAP-ENV:Body xmlns:NS2="http://path.to.service/">
        <NS1:addActivities xmlns:NS1="http://path.to.service/">
            <login href="#1"/>
            <project xsi:type="xsd:string">PROJ001</project>
            <activities xsi:type="SOAP-ENC:Array" 
                    SOAP-ENC:arrayType="NS2:activity[2]">
                <item href="#2"/>
                <item href="#3"/>
            </activities>
        </NS1:addActivities>
        <NS2:login id="1" xsi:type="NS2:login">
            <database xsi:type="xsd:string">My_database</database>
            <password xsi:type="xsd:string">neverUmind</password>
            <username xsi:type="xsd:string">bob</username>
        </NS2:login>
        <NS2:activity id="2" xsi:type="NS2:activity">
            <id xsi:type="xsd:string">DELPHITEST</id>
            <name xsi:type="xsd:string">This is a test</name>
        </NS2:activity>
        <NS2:activity id="3" xsi:type="NS2:activity">
            <id xsi:type="xsd:string">DELPHITEST2</id>
            <name xsi:type="xsd:string">This is another test</name>
        </NS2:activity>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Basically, I need Delphi to stop creating activity elements within the activities element and instead just put each ID and Name inside the an activities element (as .Net does and Java seems to expect).

I've buggered about with the InvRegistry.RegisterInvokeOptions and the RemClassRegistry.RegisterSerializeOptions but none of the combinations seem to work. To be honest I'm on the verge of writting my own XML parser for this as it's taking way to long to figure out. However, if anyone has any suggestions on how this should work I'd be very grateful.

Surely somebody out there must have consumed a Java-WS web service via Delphi 2007 before :)

TIA

Community
  • 1
  • 1
mr_urf
  • 3,303
  • 4
  • 26
  • 29
  • I'd want to know what the WSDL is referring to them as. I had interesting times with D7 and arrays, but what you are wanting to pass doesn't look terribly useful to me. I'd expect to see multiple "activity" nodes in between. – mj2008 Mar 02 '09 at 12:23
  • Oops! My bad. Forgot to surround each activity with as per what I'm getting from the .Net version. Edited now. – mr_urf Mar 02 '09 at 14:36

1 Answers1

2

It seems the XMLDocument component in Delphi 2007 is broken. I've installed the Alcinoe component instead and that works a charm. That was only a week wasted ... grrrr

mr_urf
  • 3,303
  • 4
  • 26
  • 29