Delphi 2007 generiert nicht die XML, die ich an meinen Java-Ws-Webdienst senden möchte

StackOverflow https://stackoverflow.com/questions/597196

  •  11-09-2019
  •  | 
  •  

Frage

Ich habe einen Java -Webdienst, mit dem ich mit dem WSDL -Importeur aus einer Delphi 2007 -App verknüpft habe. Das Einrichten war ein steinige Straße Aber ich bin fast da!

Ich habe jetzt die Situation, in der meine Arrays nicht so serialisiert werden, wie mein Java -Webdienst konsumiert werden kann. Ich habe dieselbe App in .NET geschrieben, um es zu testen (es funktioniert gut) und die XML, die ich generieren möchte, sieht so aus: -

<?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>

Der XML, den Delphi erzeugt, lautet jedoch wie folgt: -

<?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>

Grundsätzlich brauche ich Delphi, um nicht mehr zu erstellen Aktivität Elemente innerhalb der Aktivitäten Element und stattdessen einfach jede ID und jeden Namen in das Activity -Element einfügen (wie .NET und Java scheint es zu erwarten).

Ich habe mich mit der Invregistry.registerInvokeOptions und der RemClassregistry.registerSerializeOptions und der Kombinationen zu funktionieren. Um ehrlich zu sein, bin ich kurz davor, meinen eigenen XML -Parser dafür zu schreiben, da es sich lehnt, um herauszufinden. Wenn jedoch jemand Vorschläge dazu hat, wie dies funktionieren sollte, wäre ich sehr dankbar.

Sicherlich muss jemand da draußen einen Java-Ws-Webdienst über Delphi 2007 konsumiert haben :)

Tia

War es hilfreich?

Lösung

Es scheint, dass die xmldocument -Komponente in Delphi 2007 gebrochen ist. Ich habe die installiert Alcinoe Komponente stattdessen und das funktioniert einen Zauber. Das war nur eine Woche verschwendet ... Grrrr

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top