Agregar un sobre SOAP a un XML en Groovy

Resuelto MMZSTACK asked hace 10 meses • 1 respuestas

Me gustaría agregar un sobre de jabón a un XML usando groovy y XMLParser.

este es mi codigo

    import groovy.xml.XmlParser

    def soapEnvelope = """<?xml version="1.0" encoding="UTF-8"?>
    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
        <soapenv:Header>
        </soapenv:Header>
        <soapenv:Body>
        </soapenv:Body>
    </soapenv:Envelope>"""

    def incomingRequest = """<?xml version="1.0" encoding="UTF-8"?>
    <ns1:login xmlns:ns1="urn:partner.soap.sforce.com">
        <ns1:username>DemoUser</ns1:username>
        <ns1:password>DemoPass</ns1:password>
    </ns1:login>"""

    def parsedSoapEnvelope = new XmlParser().parseText(soapEnvelope)
    def parsedIncomingRequest = new XmlParser().parseText(incomingRequest)

    // Add the content of the incoming request to the existing SOAP body

    parsedSoapEnvelope.'soapenv:Body'[0].appendNode(parsedIncomingRequest)

    // Convert the modified SOAP envelope to a string
    def newXmlString = groovy.xml.XmlUtil.serialize(parsedSoapEnvelope)

    println newXmlString

Pero obtengo el siguiente resultado:

<?xml version="1.0" encoding="UTF-8"?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
  <soapenv:Header/>
  <soapenv:Body>
    <ns1:login xmlns:ns1="urn:partner.soap.sforce.com"/>
  </soapenv:Body>
</soapenv:Envelope>

No hay hijos dentro del nodo de inicio de sesión :(

Se agradece cualquier ayuda.

¡Gracias!

Esperando:

<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
    <soapenv:Header/>
    <soapenv:Body>
        <ns1:login xmlns:ns1="urn:partner.soap.sforce.com">
            <ns1:username>DemoUser</ns1:username>
            <ns1:password>DemoPass</ns1:password>
        </ns1:login>
    </soapenv:Body>
</soapenv:Envelope>

gracias de antemano

MMZSTACK avatar Feb 15 '24 23:02 MMZSTACK
Aceptado

Utilice agregar en lugar de appendNode

cambio: parsedSoapEnvelope.'soapenv:Body'[0].append(parsedIncomingRequest)

append(groovy.util.Node) toma Node mientras appendNode(java.lang.Object) toma objeto.ingrese la descripción de la imagen aquí

Divakar avatar Feb 15 '2024 18:02 Divakar