Thanks for following up with them. Their hints helped me figure out where to look. I THINK I see what may be happening here on our side and I've just committed a fix. If you could test tomorrows snapshots (or checkout the source and build it) to see if that helps, that would be great.
Dan On Mon March 1 2010 11:20:28 pm PrSd wrote: > Dan, > > I approached the folks at OpenSAML. As per Scott Cantor (one of the person > heading that project), the issue is not at the SAML end, it is where DOM is > first being created. The XML Parser is creating the DOM without namespace > awareness which causes the SAML code to fail when it tries creating a > QName(localpart). The localName of the DOM attribute is null. > > Following link is a detailed exchange I had with them > https://mail.internet2.edu/wws/arc/mace-opensaml-users/2010-03/msg00025.htm > l > > > > He clearly mentioned that I need to use a DOM2 or DOM3 Level specification. > It is also possible that the CXF client or server side SOAP/SAAJ > Interceptors are altering the DOM in a certain way that is causing the > umarshalling process using the SAML to fail. > > I managed to catch hold of the stack trace on the client side. > > at > org.apache.cxf.binding.soap.saaj.SAAJInInterceptor.handleMessage(SAAJInInte > rceptor.java:154) at > org.apache.cxf.jaxws.handler.soap.SOAPMessageContextImpl.getMessage(SOAPMes > sageContextImpl.java:78) at > org.apache.cxf.jaxws.handler.soap.SOAPHandlerInterceptor.createProtocolMess > ageContext(SOAPHandlerInterceptor.java:236) at > org.apache.cxf.jaxws.handler.soap.SOAPHandlerInterceptor.handleMessageInter > nal(SOAPHandlerInterceptor.java:144) at > org.apache.cxf.jaxws.handler.soap.SOAPHandlerInterceptor.handleMessage(SOAP > HandlerInterceptor.java:119) at > org.apache.cxf.jaxws.handler.soap.SOAPHandlerInterceptor.handleMessage(SOAP > HandlerInterceptor.java:69) at > org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChai > n.java:243) at > org.apache.cxf.endpoint.ClientImpl.onMessage(ClientImpl.java:672) at > org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleRespons > eInternal(HTTPConduit.java:2210) at > org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleRespons > e(HTTPConduit.java:2087) at > org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPCon > duit.java:1985) at > org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:66) > at > org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:640) at > org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInte > rceptor.handleMessage(MessageSenderInterceptor.java:62) at > org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChai > n.java:243) at > org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:484) at > org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:310) at > org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:262) at > org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:73) at > org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:124) > at $Proxy47.findTaskListUsingLoginCreds(Unknown Source) > at > com.hsc.security.saml.soap.SpringWSClient.main(SpringWSClient.java:77) > > Q1. Does CXF uses its own DOM Parser when building the SOAPMessages? Is > there a way to turn on the namespace awareness at DOM parsing time. > Q2. If not, can we turn off the CXF interceptors on both the client and > server side and if we do are there any ripple effects. As you are already > aware I am using a JAX WS Handler to intercept the SOAP request - Will that > be sufficient or I would still need the SOAP and SAAJ interceptors? > > Eagerly waiting to hear from you > > thanks > Sid > > dkulp wrote: > > This is being thrown from down in Opensaml. I really don't know what > > would > > cause it. You would probably need to ask on their lists and give them > > the > > stack trace and the XML of the SAML assertion. > > > > Dan > > dkulp wrote: > > This is being thrown from down in Opensaml. I really don't know what > > would > > cause it. You would probably need to ask on their lists and give them > > the > > stack trace and the XML of the SAML assertion. > > > > Dan > > > > On Fri February 26 2010 7:19:15 pm PrSd wrote: > >> Daniel, > >> > >> Here is the stack trace you had requested regarding this issue. I just > >> cannot figure out a solution to this > >> > >> [2/26/10 17:16:11:596 EST] 0000001c SystemErr R > >> java.lang.IllegalArgumentException: local part cannot be "null" when > >> creating a QName > >> [2/26/10 17:16:11:612 EST] 0000001c SystemErr R at > >> javax.xml.namespace.QName.<init>(Unknown Source) > >> [2/26/10 17:16:11:612 EST] 0000001c SystemErr R at > >> javax.xml.namespace.QName.<init>(Unknown Source) > >> [2/26/10 17:16:11:612 EST] 0000001c SystemErr R at > >> org.opensaml.xml.util.XMLHelper.constructQName(XMLHelper.java:433) > >> [2/26/10 17:16:11:612 EST] 0000001c SystemErr R at > >> org.opensaml.xml.util.XMLHelper.getNodeQName(XMLHelper.java:171) > >> [2/26/10 17:16:11:612 EST] 0000001c SystemErr R at > >> org.opensaml.xml.io.AbstractXMLObjectUnmarshaller.unmarshallAttribute(Ab > >> str actXMLObjectUnmarshaller.java:215) [2/26/10 17:16:11:612 EST] > >> 0000001c SystemErr R at > >> org.opensaml.xml.io.AbstractXMLObjectUnmarshaller.unmarshall(AbstractXML > >> Obj ectUnmarshaller.java:107) [2/26/10 17:16:11:612 EST] 0000001c > >> SystemErr R at > >> com.syscom.hsc.web.soap.ServiceSAMLHandler.handleMessage(ServiceSAMLHand > >> ler .java:222) [2/26/10 17:16:11:612 EST] 0000001c SystemErr R > >> at > >> com.syscom.hsc.web.soap.ServiceSAMLHandler.handleMessage(ServiceSAMLHan > >> dler .java:1) [2/26/10 17:16:11:612 EST] 0000001c SystemErr R > >> at > >> org.apache.cxf.jaxws.handler.HandlerChainInvoker.invokeHandleMessage(Ha > >> ndle rChainInvoker.java:335) [2/26/10 17:16:11:612 EST] 0000001c > >> SystemErr R > >> > >> at > >> > >> org.apache.cxf.jaxws.handler.HandlerChainInvoker.invokeHandlerChain(Hand > >> ler ChainInvoker.java:253) [2/26/10 17:16:11:612 EST] 0000001c SystemErr > >> R > >> > >> at > >> > >> org.apache.cxf.jaxws.handler.HandlerChainInvoker.invokeProtocolHandlers( > >> Han dlerChainInvoker.java:131) [2/26/10 17:16:11:612 EST] 0000001c > >> SystemErr > >> > >> R at > >> > >> org.apache.cxf.jaxws.handler.soap.SOAPHandlerInterceptor.handleMessageIn > >> ter nal(SOAPHandlerInterceptor.java:152) [2/26/10 17:16:11:612 EST] > >> 0000001c SystemErr R at > >> org.apache.cxf.jaxws.handler.soap.SOAPHandlerInterceptor.handleMessage(S > >> OAP HandlerInterceptor.java:119) [2/26/10 17:16:11:612 EST] 0000001c > >> SystemErr > >> > >> R at > >> > >> org.apache.cxf.jaxws.handler.soap.SOAPHandlerInterceptor.handleMessage(S > >> OAP HandlerInterceptor.java:69) [2/26/10 17:16:11:612 EST] 0000001c > >> SystemErr > >> > >> R at > >> > >> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorC > >> hai n.java:243) [2/26/10 17:16:11:612 EST] 0000001c SystemErr R > >> at > >> org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiat > >> ionO bserver.java:109) [2/26/10 17:16:11:612 EST] 0000001c SystemErr > >> R at > >> org.apache.cxf.transport.servlet.ServletDestination.invoke(ServletDestin > >> ati on.java:98) [2/26/10 17:16:11:612 EST] 0000001c SystemErr R > >> at > >> org.apache.cxf.transport.servlet.ServletController.invokeDestination(Se > >> rvle tController.java:406) [2/26/10 17:16:11:612 EST] 0000001c SystemErr > >> R > >> > >> at > >> > >> org.apache.cxf.transport.servlet.ServletController.invoke(ServletControl > >> ler .java:178) [2/26/10 17:16:11:612 EST] 0000001c SystemErr R > >> at > >> org.apache.cxf.transport.servlet.AbstractCXFServlet.invoke(AbstractCXFS > >> ervl et.java:142) [2/26/10 17:16:11:612 EST] 0000001c SystemErr R > >> at > >> org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(Abst > >> ract HTTPServlet.java:179) [2/26/10 17:16:11:612 EST] 0000001c SystemErr > >> R > >> > >> at > >> > >> org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPost(AbstractHTTP > >> Ser vlet.java:103) [2/26/10 17:16:11:612 EST] 0000001c SystemErr R > >> at javax.servlet.http.HttpServlet.service(HttpServlet.java:763) > >> [2/26/10 17:16:11:612 EST] 0000001c SystemErr R at > >> org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTT > >> PSe rvlet.java:159) [2/26/10 17:16:11:612 EST] 0000001c SystemErr R > >> at > >> com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.j > >> ava: 1096) [2/26/10 17:16:11:612 EST] 0000001c SystemErr R at > >> com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWra > >> pper .java:570) [2/26/10 17:16:11:612 EST] 0000001c SystemErr R > >> at > >> com.ibm.ws.wswebcontainer.servlet.ServletWrapper.handleRequest(ServletW > >> rapp er.java:478) [2/26/10 17:16:11:612 EST] 0000001c SystemErr R > >> at > >> com.ibm.ws.webcontainer.servlet.CacheServletWrapper.handleRequest(Cache > >> Serv letWrapper.java:90) [2/26/10 17:16:11:612 EST] 0000001c SystemErr > >> R > >> > >> at > >> > >> com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:748 > >> ) [2/26/10 17:16:11:612 EST] 0000001c SystemErr R at > >> com.ibm.ws.wswebcontainer.WebContainer.handleRequest(WebContainer.java:1 > >> 466 ) [2/26/10 17:16:11:612 EST] 0000001c SystemErr R at > >> com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:1 > >> 19) [2/26/10 17:16:11:612 EST] 0000001c SystemErr R at > >> com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscriminatio > >> n(H ttpInboundLink.java:458) [2/26/10 17:16:11:612 EST] 0000001c > >> SystemErr R at > >> com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewInformatio > >> n(H ttpInboundLink.java:387) [2/26/10 17:16:11:612 EST] 0000001c > >> SystemErr R at > >> com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.ready(HttpInboundLi > >> nk. java:267) [2/26/10 17:16:11:612 EST] 0000001c SystemErr R > >> at > >> com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.sendToDisc > >> rimi nators(NewConnectionInitialReadCallback.java:214) [2/26/10 > >> 17:16:11:612 EST] 0000001c SystemErr R at > >> com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.complete(Ne > >> wCo nnectionInitialReadCallback.java:113) [2/26/10 17:16:11:612 EST] > >> 0000001c SystemErr R at > >> com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(Ai > >> oRe adCompletionListener.java:165) [2/26/10 17:16:11:612 EST] 0000001c > >> SystemErr R at > >> com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture. > >> jav a:217) [2/26/10 17:16:11:612 EST] 0000001c SystemErr R at > >> com.ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelF > >> utur e.java:161) [2/26/10 17:16:11:612 EST] 0000001c SystemErr R > >> at com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:136) > >> [2/26/10 17:16:11:612 EST] 0000001c SystemErr R at > >> com.ibm.io.async.ResultHandler.complete(ResultHandler.java:195) > >> [2/26/10 17:16:11:612 EST] 0000001c SystemErr R at > >> com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java > >> :74 3) [2/26/10 17:16:11:612 EST] 0000001c SystemErr R at > >> com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:873) > >> [2/26/10 17:16:11:612 EST] 0000001c SystemErr R at > >> com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1473) > > > > ----------- > > > >> > Here is the SAML Assertion that is being sent into the SOAP Header > >> > <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> > >> > > >> > <soap:Header> > >> > <wsse:Security > >> > >> xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wsse > >> c > >> > >> > urity-secext-1.0.xsd"> > >> > > >> > <saml2:Assertion xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" > >> > ID="123" IssueInstant="2010-02-24T19:10:32.724Z" Version="2.0"> > >> > > >> > <saml2:Issuer>http://localhost:9088</saml2:Issuer> > >> > > >> > <saml2:Subject> > >> > > >> > <saml2:NameID > >> > >> Format="urn:oasis:names:tc:SAML:1.1:nameid-format:X509SubjectName">p8adm > >> i > >> > >> > n</saml2:NameID> </saml2:Subject> > >> > > >> > <saml2:AuthnStatement > >> > > >> > AuthnInstant="2010-02-24T19:10:32.787Z"> > >> > > >> > <saml2:AuthnContext> > >> > >> <saml2:AuthnContextClassRef>urn:oasis:names:tc:SAML:2.0:ac:classes:X509< > >> / > >> > >> > saml2:AuthnContextClassRef> > >> > > >> > </saml2:AuthnContext> > >> > > >> > </saml2:AuthnStatement> > >> > > >> > <saml2:AuthzDecisionStatement Decision="Permit" Resource="DoubleIt"> > >> > > >> > <saml2:Action > >> > >> Namespace="urn:doubleit:doubleitactions">DoubleEvenNumbers</saml2:Action > >> > > >> > >> > </saml2:AuthzDecisionStatement> > >> > > >> > <saml2:AttributeStatement> > >> > > >> > <saml2:Attribute Name="degree" > >> > NameFormat="http://www.example.org/DoubleIt/Security"> > >> > > >> > <saml2:AttributeValue xmlns:xs="http://www.w3.org/2001/XMLSchema" > >> > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > >> > xsi:type="xs:string">Mathematics</saml2:AttributeValue> > >> > </saml2:Attribute></saml2:AttributeStatement> > >> > > >> > </saml2:Assertion></wsse:Security></soap:Header> > >> > > >> > <soap:Body><findTaskListUsingLoginCreds > >> > xmlns="http://web.hsc.syscom.com/"><username > >> > xmlns="http://web.hsc.syscom.com/">kpham</username><password > >> > xmlns="http://web.hsc.syscom.com/">hdfuhgdg</password><category > >> > >> xmlns="http://web.hsc.syscom.com/">GETFULLEOPINWRK</category><maxResults > >> > >> xmlns="http://web.hsc.syscom.com/">-1</maxResults></findTaskListUsingLog > >> i > >> > >> > nCreds></soap:Body></soap:Envelope> -- Daniel Kulp [email protected] http://www.dankulp.com/blog
