axis-java-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Eran Chinthaka <chinth...@opensource.lk>
Subject Re: Order of SOAPHeader and SOAPBody
Date Wed, 05 Apr 2006 16:05:59 GMT
Hi Xinjun,

There was a known bug in SOAPEnvelope, which is the same pointed out
also. I fixed it and now you can add SOAPHeader now to SOAPEnvelope and
that will be added properly now.

-- Chinthaka

Xinjun Chen wrote:
> I found a walk-around.
> 
> envelope.getBody().insertSiblingBefore(headerElm);
> 
> This will add the header OMElement into the envelope. However, the
> Header added is only considered as a child element of envelope, not a
> SOAPHeader. Thus if I call envelope.getHeader(), I will get exception.
> 
> Regards,
> Xinjun
> 
> On 4/5/06, Xinjun Chen <xjchen001@gmail.com> wrote:
>> 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>
>>
> 



Mime
View raw message