Delphi 2007 no está generando el código XML que quiero enviar a mi servicio web Java-WS

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

  •  11-09-2019
  •  | 
  •  

Pregunta

Tengo un servicio web de Java a la que he enlazadas desde una aplicación Delphi 2007 utilizando el importador de WSDL. Su puesta en marcha ha sido un camino difícil pero 'm casi allí!

Ahora tengo la situación en la que mis matrices no están siendo serializado en una forma que mi servicio web Java puede consumir. He escrito la misma aplicación en .Net para probarlo (funciona bien) y el XML que estoy buscando para generar el aspecto siguiente: -

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

Sin embargo, el XML que genera Delphi es el siguiente: -

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

Básicamente, necesito Delphi para dejar de crear actividad elementos dentro de las actividades elemento y en su lugar sólo hay que poner cada identificador y el nombre en el interior del elemento actividades (como lo hace .Net y java parece esperar).

He enculada sobre los InvRegistry.RegisterInvokeOptions y los RemClassRegistry.RegisterSerializeOptions pero ninguna de las combinaciones parecen funcionar. Para ser honesto, estoy al borde de la escritura de mi propio analizador XML para esto, ya que está tomando forma a tiempo para averiguar. Sin embargo, si alguien tiene alguna sugerencia sobre cómo debería funcionar esto estaría muy agradecido.

Sin duda, alguien por ahí debe de haber consumido un servicio web Java-WS a través de Delphi 2007 antes:)

TIA

¿Fue útil?

Solución

Parece que el componente XMLDocument en Delphi 2007 está roto. He instalado el componente alcínoe lugar y que funciona a las mil maravillas. Eso fue sólo una semana desperdiciado ... grrrr

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top