4 votes

Comment ajouter un en-tête SOAP en utilisant Java JAX-RPC ?

J'ai une demande SOAP comme celle-ci :

    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ch="urn://mfots.com/xmlmessaging/CH" xmlns:oas="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<soapenv:Header>
<ch:MFprofileMnt>
<ch:myID>1458</ch:myID>
<ch:bigID>raptool</ch:bigID>
<ch:matID>5689</ch:matID>
</ch:MFprofileMnt>

Maintenant j'ai créé la requête en java comme ceci :

        Name headerContextName = soapEnvelope.createName("MFprofileMnt", "ch","");
        SOAPHeaderElement soapHeaderElement = soapHeader.addHeaderElement(headerContextName);
        // mustUnderstand attribute is used to indicate
        // whether the header entry is mandatory or optional for the
        // recipient to process.
        soapHeaderElement.setMustUnderstand(true);
        //Now set the attribute children
        // create the first child element and set the value
        SOAPElement element1 = soapHeaderElement.addChildElement("myID", "ch");
        element1.setValue("1458");
        //create the second child element and set the value
        SOAPElement element2 = soapHeaderElement.addChildElement("bigID", "ch");
        element2.setValue("raptool");
        //create the third child element and set the value
        SOAPElement element3 = soapHeaderElement.addChildElement("matID", "ch");
        element3.setValue("5689");

Cependant, lorsque j'exécute le programme, je continue à obtenir ces erreurs :

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.
faultActor: null
faultDetail:

Je suis vraiment coincé ici. S'il vous plaît, que quelqu'un m'aide.

3voto

The Dark Knight Points 1900

J'ai fait beaucoup de recherches à ce sujet et j'ai découvert mon erreur. Je ne passais pas l'URL de l'espace de nom Security. Donc au lieu de :

Name headerContextName = soapEnvelope.createName("MFprofileMnt", "ch","");

Je l'ai donné comme :

Name headerContextName = soapEnvelope.createName("MFprofileMnt", "ch",SOAP_Security_Namespace_URL);

Et voilà, cela a commencé à fonctionner et il n'y avait pas d'erreur d'espace de nom. J'espère que cela aidera d'autres personnes qui rencontrent des problèmes similaires.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X