2016-06-06 125 views
0

ist falsch, ich bin ein Web-Service-Client zu entwickeln und ich hace einen Code wie diesen zu generieren:Erstellen von SOAP-Nachricht: NAMESPACE_ERR Es wird versucht, zu erstellen oder ein Objekt in einer Weise zu ändern, die im Hinblick auf die Namensräume

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:env="Envio_ConsultaSecuencia"> 
    <soapenv:Header/> 
     <soapenv:Body> 
     <env:envio> 
      <env:cabecera> 
       <env:idMensaje>ABCDEFG<env:idMensaje>    
       <env:tipoMensaje>ABCDEFG</env:tipoMensaje> 
      </env:cabecera> 
     </env:envio> 
    </soapenv:Body> 
</soapenv:Envelope> 

Also, mein Problem ist, wenn ich versuche, das Präfix "env" bei Cabecera einzufügen. Dies ist der Code Ich verwende:

MessageFactory factory = MessageFactory.newInstance(); 
    SOAPMessage message = factory.createMessage(); 
    SOAPPart soapPart = message.getSOAPPart(); 
    SOAPEnvelope envelope = soapPart.getEnvelope(); 
    SOAPHeader header = envelope.getHeader(); 
    SOAPBody body = envelope.getBody(); 


    SOAPElement envio = body.addChildElement("envio"); 
    envio.setPrefix("env"); 


     SOAPElement cabecera = envio.addChildElement("cabecera"); 
     cabecera.setPrefix("env"); 
     (...) 

Ich verstehe nicht, warum ich das Präfix „env“ in dem Soapelement namens einstellen „envío“ und wenn ich versuche, das gleiche mit „cabecera zu tun "Ich habe diesen Fehler:

org.w3c.dom.DOMException: NAMESPACE_ERR: An attempt is made to create or change an object in a way which is incorrect with regard to namespaces. 

Ich werde Ihre Hilfe apreciete. Danke im Voraus.

EDIT:

ich die Lösung in Oracle Web gefunden https://docs.oracle.com/cd/E19340-01/820-6767/aeqfx/index.html

Der richtige Weg jedes Kind zu schaffen ist:

Name bodyName = envelope.createName("GetLastTradePrice", "m", 
             "http://eztrade.com") 
SOAPBodyElement gltp = body.addBodyElement(bodyName); 

Und das Präfix wird ohne Probleme eingesetzt.

Das ist alles!

+0

Lösung gefunden. Ich bearbeite den Beitrag. –

Antwort

1

Versuchen Sie, Namespace-Deklaration zu SOAPElement envio OR zum SOAPEnvelope hinzuzufügen.

 SOAPMessage message = factory.createMessage(); 
     SOAPPart soapPart = message.getSOAPPart(); 
     SOAPEnvelope envelope = soapPart.getEnvelope(); 
     //add declaration here 
     envelope.addNamespaceDeclaration("env", "http://som.org"); 
     SOAPHeader header = envelope.getHeader(); 
     SOAPBody body = envelope.getBody(); 


     SOAPElement envio = body.addChildElement("envio"); 
     envio.setPrefix("env"); 
     //explicit declare it here for this element 
     envio.addNamespaceDeclaration("env", "http://som.org"); 
     SOAPElement cabecera = envio.addChildElement("cabecera","env");