Arpan Das
Arpan Das

Reputation: 1037

wrong SOAP request getting created

This is what my code is creating:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ws="http://example.com">
<soapenv:Header/>
    <soapenv:Body>
        <ws:isUserExists>
            <userId>10</userId>
        </ws:isUserExists>
    </soapenv:Body>
</soapenv:Envelope>

In my soapenv:Envelope || xmlns:soapenv is coming twice

xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"

Now this is what I need: here xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" is not present in the SOAP request

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/ " xmlns:ws="http://example.com"> 
<soapenv:Header/> 
    <soapenv:Body> 
        <ws:isUserExists> 
            <userId>10</userId> 
        </ws:isUserExists> 
    </soapenv:Body> 
</soapenv:Envelope> 

The java code which I am using to create the request is:

public static SOAPMessage createIsUserExistsSOAPRequest(User user) throws SOAPException
    {
        MessageFactory messageFactory =MessageFactory.newInstance();
        SOAPMessage soapMessage = messageFactory.createMessage();
        soapMessage.getSOAPHeader().setPrefix("soapenv");
        SOAPPart soapPart = soapMessage.getSOAPPart();
        // SOAP Envelope
        SOAPEnvelope envelope = soapPart.getEnvelope();
        envelope.setPrefix("soapenv");
        envelope.addNamespaceDeclaration("ws","http://example.com");

        // SOAP Body
        SOAPBody soapBody = envelope.getBody();
        soapBody.setPrefix("soapenv");
        SOAPElement ensureUserExistsElem = soapBody.addChildElement("isUserExists", "ws");
        SOAPElement userIdElem = ensureUserExistsElem.addChildElement("userId");
        userIdElem.addTextNode(user.userId);
        String authorization = new sun.misc.BASE64Encoder().encode(("[email protected]").getBytes());
        MimeHeaders hd = soapMessage.getMimeHeaders();
        hd.addHeader("Authorization", "Basic " + authorization);
        soapMessage.saveChanges();
        return soapMessage;
    }

Please help : what I am doing wrong?

Upvotes: 1

Views: 2294

Answers (1)

Deepak Bala
Deepak Bala

Reputation: 11185

In my soapenv:Envelope || xmlns:soapenv is coming twice

It does not appear twice. You're defining 2 prefixes that are bound to the same namespace.


xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"

xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"


Please help : what I am doing wrong?

Nothing. It does not matter if the namespace prefix is soapenv or SOAP-ENV or polar-bear-ninjas. As long as the prefix is bound to a namespace you are fully qualifying that XML element. Both XMLs are valid and it does not matter which prefix is used.

Upvotes: 4

Related Questions