I am using the following function to add UsernameToken to my security
header. But the processed envelope get some problems.
1. The Header is placed after the body. How can I insert SOAPHeader
before SOAPBody?
2. The security header defines the xmlns:xsd and xmlns:xsi again,
which have already been defined in <SOAP-ENV:Envelope>.

Could you give me some advice on how to solve the above two problems?

Attached:

1) The function used for adding username token to the envelope:

public void addUsernameTokens(UsernameToken token, final SOAPEnvelope
envelope) throws Exception {
    Document domDoc = Axis2Util.getDocumentFromSOAPEnvelope(envelope);
    WSSAddUsernameToken builder = new WSSAddUsernameToken("", false);
    if (token.isDigested()) {
        builder.setPasswordType(WSConstants.PASSWORD_DIGEST);
    } else {
        builder.setPasswordTyp(WSConstants.PASSWORD_TEXT);
    }

    builder.build(domDoc, token.getUsername(), token.getPassword());
    Element header = (Element)
(domDoc.getElementsByTagName("wsse:Security").item(0));
    OMElement headerElm = (OMElement) (Axis2Util.toOM(header));
    SOAPFactory factory = Axis2Util.getSOAPFactory(envelope);
    factory.createSOAPHeader(envelope);
    envelope.getHeader().addChild(headerElm);
}

2): The original soap envelope:

<?xml version='1.0' encoding='utf-8'?><SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://www.w3.org/2003/05/soap-envelope";
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
xmlns:xsd="http://www.w3.org/2001/XMLSchema";>
   <SOAP-ENV:Body>
      <sayHello xmlns="http://services/helloworld";>
         <value>Hello world!</value>
      </sayHello>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

3): The processed soap envelope:

<?xml version='1.0' encoding='utf-8'?><SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://www.w3.org/2003/05/soap-envelope";
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
xmlns:xsd="http://www.w3.org/2001/XMLSchema";>
   <SOAP-ENV:Body>
      <sayHello xmlns="http://services/helloworld";>
         <value>Hello world!</value>
      </sayHello>
   </SOAP-ENV:Body>
<SOAP-ENV:Header><wsse:Security
xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd";
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
xmlns:xsd="http://www.w3.org/2001/XMLSchema";>
<wsse:UsernameToken><wsse:Username>xinjun</wsse:Username><wsse:Password
Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText";>password</wsse:Password></wsse:UsernameToken></wsse:Security></SOAP-ENV:Header></SOAP-ENV:Envelope>

Reply via email to