Hi, I finally managed to make it work with OMElement (solution 1).
I could not find out what I did wrong with using AXIOMXPath . Regards, H. On Wed, Jul 28, 2010 at 5:47 AM, Deepal Jayasinghe <[email protected]>wrote: > In your case document element become the SOAP envelop, so you need to > get the soap header child element and from that you can get the > elements you want. > > Deepal > > On Tue, Jul 27, 2010 at 9:53 AM, hideki tihiri <[email protected]> > wrote: > > Hi Deepal, > > Thx for the feedback. > > I rewrite the code below as I was referring always to root, which I think > is > > wrong, so I reprint the code: > > (I also attached the java class if this is more convenient to try for > > yourself). > > The XML STRING: > > public final static String XML_STRING2 = "" + > > "<?xml version=\"1.0\" encoding='UTF-8'?> "+ > > "<soapenv:Envelope > > xmlns:soapenv=\"http://www.w3.org/2003/05/soap-envelope\"> "+ > > " <soapenv:Header xmlns:wsa=\"http://www.w3.org/2005/08/addressing\"> > "+ > > " <wsse:Security > > xmlns:wsse=\" > http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd\ > " > > soapenv:mustUnderstand=\"true\"> "+ > > " <wsse:UsernameToken > > xmlns:wsu=\" > http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd\ > " > > wsu:Id=\"UsernameToken-20656006\"> "+ > > " <wsse:Username>test</wsse:Username> "+ > > " <wsse:Password > > Type=\" > http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText\ > ">TEST</wsse:Password> > > "+ > > " </wsse:UsernameToken> "+ > > " </wsse:Security> "+ > > " > > <wsa:To> > http://localhost:8080/server/services/Remove.RemoveHttpSoap12Endpoint/ > </wsa:To> > > "+ > > " > <wsa:MessageID>urn:uuid:463523964E8A11FEB11280155268837</wsa:MessageID> > > "+ > > " <wsa:Action>urn:request</wsa:Action> "+ > > " </soapenv:Header> "+ > > " <soapenv:Body> "+ > > " <ns1:request xmlns:ns1=\"http://services.betrust.be\"> "+ > > " > > > > <ns1:documentUUID>urn:uuid:100009-DFF4E3F5-95F5-7FA7-E73A-FE1F5D3C88F2</ns1:documentUUID> > > "+ > > " </ns1:request> "+ > > " </soapenv:Body> "+ > > "</soapenv:Envelope> "; > > > > 1) Via get the header element first, and then UsernameToken element > > and finally username element. > > Node that in the code below I now 'drill-down' from om1 to om2 to om3 and > so > > on (I suppose this is the way it should work) ? > > OMElement om1 = root.getFirstChildWithName(new > > QName("http://www.w3.org/2003/05/soap-envelope", "Envelope")); > > OMElement om2 = om1.getFirstChildWithName(new > > QName("http://www.w3.org/2003/05/soap-envelope", "Header")); > > OMElement om3 = om2.getFirstChildWithName(new > > QName(" > http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd > ", > > "Security")); > > OMElement om4 = om3.getFirstChildWithName(new > > QName(" > http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd > ", > > "UserNameToken")); > > OMElement om5 = om4.getFirstChildWithName(new > > QName(" > http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd > ", > > "UserName")); > > System.out.println("wsse-username:" + om5.getText()); > > ==> Problem is that om1 is null ! > > 2) XPath: > > AXIOMXPath xpath = new > > AXIOMXPath("/Envelope/Header/wsse:Security/wsse:Username"); > > OMElement node = (OMElement) xpath.selectSingleNode(null); > > System.out.println("wsse-username:" + node.getText()); > > ==> The node is null ? > > > > Regards, > > H. > > > > > > On Tue, Jul 27, 2010 at 2:55 PM, Deepal Jayasinghe <[email protected]> > > wrote: > >> > >> On Tue, Jul 27, 2010 at 6:06 AM, hideki tihiri <[email protected] > > > >> wrote: > >> > Hi Deepal, > >> > > >> > thx for the reply. > >> > I tried in 2 different ways but I don't succeed in reading the > username: > >> > 1) Via get the header element first, and then UsernameToken element > and > >> > finally username element. > >> > ByteArrayInputStream xmlStream = new > >> > ByteArrayInputStream(XML_STRING2.getBytes()); > >> > //Create a builder > >> > StAXBuilder builder = new StAXOMBuilder(xmlStream); > >> > // Get root element > >> > OMElement root = builder.getDocumentElement(); > >> > OMElement headerElem = root.getFirstChildWithName(new > >> > QName("http://www.w3.org/2003/05/soap-envelope", > "soapenv:Envelope")); > >> > >> This has to be > >> OMElement headerElem = root.getFirstChildWithName(new > >> QName("http://www.w3.org/2003/05/soap-envelope", "Envelope")); > >> > >> > headerElem = root.getFirstChildWithName(new > >> > QName("http://www.w3.org/2003/05/soap-envelope", "Header")); > >> > headerElem = root.getFirstChildWithName(new > >> > > >> > QName(" > http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd > ", > >> > "Security")); > >> > headerElem = root.getFirstChildWithName(new > >> > > >> > QName(" > http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd > ", > >> > "UserNameToken")); > >> > headerElem = root.getFirstChildWithName(new > >> > > >> > QName(" > http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd > ", > >> > "UserName")); > >> > System.out.println("wsse-username:" + headerElem.getText()); > >> > ==> Returns Exception in thread "main" java.lang.NullPointerException > >> > 2) XPath > >> > AXIOMXPath xpath = new > >> > > >> > > AXIOMXPath("/soapenv:Envelope/soapenv:Header/wsse:Security/wsse:Username"); > >> This has to be > >> > AXIOMXPath("/Envelope/Header/wsse:Security/wsse:Username"); > >> > >> > >> > xpath.addNamespace("soapenv", > >> > "http://www.w3.org/2003/05/soap-envelope"); > >> > xpath.addNamespace("wsse", > >> > > >> > " > http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd > "); > >> > OMElement node = (OMElement) xpath.selectSingleNode(root); > >> > System.out.println("wsse-username:" + node.getText()); > >> > ==> Returns Exception in thread "main" java.lang.NullPointerException > >> > Can you please help ? > >> > H. > >> > > >> > On Mon, Jul 26, 2010 at 11:07 PM, Deepal Jayasinghe < > [email protected]> > >> > wrote: > >> >> > >> >> Here, you can use two mechanisms, first you can use Xpath based > >> >> navigation to get the element you need, or else you can get the > header > >> >> element first, and then UsernameToken element and finally username > >> >> element. > >> >> > >> >> Deepal > >> >> > >> >> On Mon, Jul 26, 2010 at 3:05 PM, hideki tihiri > >> >> <[email protected]> > >> >> wrote: > >> >> > Hi, > >> >> > I am unable to solve following problem, although it should be > fairly > >> >> > simple: > >> >> > I have folloing SOAP header: > >> >> > <soapenv:Header > >> >> > xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope" > >> >> > xmlns:wsa="http://www.w3.org/2005/08/addressing"> > >> >> > <wsse:Security > >> >> > > >> >> > > >> >> > xmlns:wsse=" > http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd > " > >> >> > soapenv:mustUnderstand="true"> > >> >> > <wsse:UsernameToken > >> >> > > >> >> > > >> >> > xmlns:wsu=" > http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd > " > >> >> > wsu:Id="UsernameToken-12592762"> > >> >> > <wsse:Username>testr</wsse:Username> > >> >> > <wsse:Password > >> >> > > >> >> > > >> >> > Type=" > http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText > ">TEST</wsse:Password> > >> >> > </wsse:UsernameToken> > >> >> > </wsse:Security> > >> >> > > >> >> > > >> >> > <wsa:To> > http://localhost:8080/server/services/Remove.RemoveHttpSoap12Endpoint/ > </wsa:To> > >> >> > > >> >> > > >> >> > > <wsa:MessageID>urn:uuid:40A03A83C5E5358B181280163771513</wsa:MessageID> > >> >> > <wsa:Action>urn:request</wsa:Action> > >> >> > </soapenv:Header> > >> >> > I need to check the username . > >> >> > I have following code: > >> >> > MessageContext mc = MessageContext.getCurrentMessageContext(); > >> >> > SOAPHeader header = mct.getEnvelope().getHeader(); > >> >> > OMElement headerElem = header.getFirstChildWithName(new > >> >> > > >> >> > > >> >> > QName(" > http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd > ", > >> >> > "Username")); > >> >> > LOGGER.info("wsse-username:" + headerElem.toString()); > >> >> > > >> >> > The problem is that a 'null' is logged. > >> >> > Where do I go wrong ? > >> >> > Regards, > >> >> > H. > >> >> > >> >> > >> >> > >> >> -- > >> >> http://blogs.deepal.org > >> >> > >> >> --------------------------------------------------------------------- > >> >> To unsubscribe, e-mail: [email protected] > >> >> For additional commands, e-mail: [email protected] > >> >> > >> > > >> > > >> > >> > >> > >> -- > >> http://blogs.deepal.org > >> > >> --------------------------------------------------------------------- > >> To unsubscribe, e-mail: [email protected] > >> For additional commands, e-mail: [email protected] > >> > > > > > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: [email protected] > > For additional commands, e-mail: [email protected] > > > > > > -- > http://blogs.deepal.org > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [email protected] > For additional commands, e-mail: [email protected] > >
