2009-02-28 4 views
2

J'ai un service Web Java auquel j'ai lié une application Delphi 2007 à l'aide de l'importateur WSDL. La mise en place a été un rocky road mais je suis presque là!Delphi 2007 ne génère pas le code XML que je souhaite envoyer à mon service Web Java-WS

J'ai maintenant la situation où mes tableaux ne sont pas en cours de sérialisation d'une manière que mon service Web Java peut consommer. J'ai écrit la même application en .Net pour le tester (il fonctionne très bien) et le XML Je cherche à générer ressemble à ceci: -

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

Cependant, le XML Delphi génère est la suivante : -

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

Fondamentalement, j'ai besoin Delphi pour cesser de créer une activité éléments dans les activités élément et au lieu simplement mettre chaque ID et nom dans l'élément une des activités (comme .Net fait et Java semble attendre).

Je me suis fait enculer avec les InvRegistry.RegisterInvokeOptions et les RemClassRegistry.RegisterSerializeOptions mais aucune des combinaisons ne semble fonctionner. Pour être honnête, je suis sur le point d'écrire mon propre analyseur XML pour cela car il prend beaucoup de temps à comprendre. Cependant, si quelqu'un a des suggestions sur la façon dont cela devrait fonctionner, je serais très reconnaissant.

Sûrement quelqu'un là-bas doit avoir consommé un service Web Java-WS via Delphi 2007 avant :)

TIA

+0

Je voudrais savoir ce que le WSDL fait référence à eux. J'ai eu des moments intéressants avec D7 et les tableaux, mais ce que vous voulez transmettre ne me semble pas très utile. Je m'attendrais à voir plusieurs nœuds "d'activité" entre les deux. – mj2008

+0

Oups! Ma faute. J'ai oublié d'entourer chaque activité avec selon ce que je reçois de la version .Net. Édité maintenant. –

Répondre

2

Il semble que le composant XMLDocument en Delphi 2007 est cassé. J'ai installé le composant Alcinoe à la place et cela fonctionne un charme. Ce n'était qu'une semaine gaspillée ... grrrr

Questions connexes