[jboss-user] [JBossWS] - Username token: Problem accessing the soap message. Empty he

kaymayus do-not-reply at jboss.com
Wed Jul 29 13:09:46 EDT 2009


Hi All,

on using username profile with the POJO endpoint i realized that the saop header in the POJO was empty (no child elements). 
I could confirm this on debugging the SOAPMessage in the POJO.
I need the username within the POJO for further authorization checks.
The simple HelloWorld WebService as well as authentication and authorisation (JAAS) are working fine, but as i said, no child elements in the soap header.

I used:
JBoss 4.2.3.GA
jbossws-native-3.1.1.GA

And 

JBoss 5.1.0.GA
jbossws-native-3.1.2.GA

No success!

The sent mesage from the client using soapui is:


  | <env:Envelope xmlns:env='http://schemas.xmlsoap.org/soap/envelope/'>
  |  <env:Header>
  |   <wsse:Security env:mustUnderstand='1' xmlns:wsse='http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd' xmlns:wsu='http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd'>
  |    <wsse:UsernameToken wsu:Id='token-1-1248789148312-14111765'>
  |     <wsse:Username>kermit</wsse:Username>
  |     <wsse:Password Type='http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText'>thefrog</wsse:Password>
  |    </wsse:UsernameToken>
  |   </wsse:Security>
  |  </env:Header>
  |  <env:Body>
  |   <ns1:sayHello xmlns:ns1='org.jbia.ws'>
  |    <arg0>World</arg0>
  |   </ns1:sayHello>
  |  </env:Body>
  | </env:Envelope>
  | 

This is the same message that has been traced in the server log. So, the message ist ok. Furthermore authorisation and authentication are working. 

I tried to get the header child elements in the following ways:

1)

  |     	SOAPMessageContext soapMessageContext = (SOAPMessageContext)wsCtx.getMessageContext();
  |     	SOAPMessage message  = soapMessageContext.getMessage();
  |     	try {
  | 			Iterator it = message.getSOAPHeader().getChildElements();
  | 			while(it.hasNext()){
  | 				System.out.println("The child: " + it.next().toString());    		
  | 			}
  | 		} catch (SOAPException e) {
  | 			// TODO Auto-generated catch block
  | 			e.printStackTrace();
  | 		}
  | 

2)

  |     	CommonMessageContext msgContext = MessageContextAssociation.peekMessageContext(); 
  |     	try {
  | 			SOAPHeader header = msgContext.getSOAPMessage().getSOAPHeader();
  | 			Iterator it = header.getChildElements();
  | 			while(it.hasNext()){
  | 				System.out.println("The child: " + it.next().toString());    		
  | 			}
  | 		} catch (SOAPException e) {
  | 			// TODO Auto-generated catch block
  | 			e.printStackTrace();
  | 		}
  | 

3)

  |     	SOAPEnvelope envelope;
  | 		try {
  | 			envelope = soapMessageContext.getMessage().getSOAPPart().getEnvelope();
  | 	        SOAPHeader soapHeader = envelope.getHeader();
  | 	        Iterator it = soapHeader.getChildElements();
  | 	        while(it.hasNext()){
  | 	        	Object o = it.next();
  | 	        	System.out.println("The Child: " + o.toString());
  | 	        }
  | 		} catch (SOAPException e) {
  | 			// TODO Auto-generated catch block
  | 			e.printStackTrace();
  | 		}
  | 

I even tried to get the principal:


  |     	Principal principal = wsCtx.getUserPrincipal();
  |     	if (principal==null){
  |     		System.out.println("There is no principal name");
  |     	} else {
  |     		System.out.println("The principal name is " + principal.getName());
  |     	}
  | 

But no success!

Am i missing something? is there another way to handel this issue? is there any workarround for this? wrong version of jboss and jbossws-native?

I apreciate very gratefully any suggestion.

Thank's

View the original post : http://www.jboss.org/index.html?module=bb&op=viewtopic&p=4246764#4246764

Reply to the post : http://www.jboss.org/index.html?module=bb&op=posting&mode=reply&p=4246764



More information about the jboss-user mailing list