Uploaded image for project: 'Crowd Data Center'
  1. Crowd Data Center
  2. CWD-1798

Regression: Crowd 2 throws NPE if sent an uninitialised SOAPProperty

    XMLWordPrintable

Details

    • Bug
    • Resolution: Won't Fix
    • Medium
    • None
    • 2.0.3
    • None

    Description

      WAC admin contain(ed) the following code:

                  // set the attributes of the principal
                  SOAPAttribute[] soapAttributes = new SOAPAttribute[4];
      
                  soapAttributes[0] = buildAttribute(RemotePrincipalConstants.EMAIL, email);
                  soapAttributes[1] = buildAttribute(RemotePrincipalConstants.FIRSTNAME, firstName);
                  soapAttributes[2] = buildAttribute(RemotePrincipalConstants.LASTNAME, lastName);
      
                  principal.setAttributes(soapAttributes);
      

      As you can see, at some point an attribute was removed but the array length not reduced. This results in the following SOAP envelope from the 1.4.3 client:

      <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
         <soap:Body>
            <ns1:addPrincipal xmlns:ns1="urn:SecurityServer">
      	 <ns1:in0>
      	    <name xmlns="http://authentication.integration.crowd.atlassian.com">website</name>
      	    <token xmlns="http://authentication.integration.crowd.atlassian.com">HsWhzgaKmGencnVSJrleGw00</token>
      	 </ns1:in0>
      	 <ns1:in1>
      	    <ID xmlns="http://soap.integration.crowd.atlassian.com">-1</ID>
      	    <active xmlns="http://soap.integration.crowd.atlassian.com">true</active>
      	    <attributes xmlns="http://soap.integration.crowd.atlassian.com">
      	       <SOAPAttribute>
      		  <name>mail</name>
      		  <values>
      		     <ns1:string>ssmith@atlassianwerw.com</ns1:string>
      		  </values>
      	       </SOAPAttribute>
      	       <SOAPAttribute>
      		  <name>givenName</name>
      		  <values>
      		     <ns1:string>wibble</ns1:string>
      		  </values>
      	       </SOAPAttribute>
      	       <SOAPAttribute>
      		  <name>sn</name>
      		  <values>
      		     <ns1:string>wibble</ns1:string>
      		  </values>
      	       </SOAPAttribute>
      	       <SOAPAttribute xsi:nil="true" />
      	    </attributes>
      	    <description xmlns="http://soap.integration.crowd.atlassian.com" xsi:nil="true" />
      	    <directoryID xmlns="http://soap.integration.crowd.atlassian.com">0</directoryID>
      	    <name xmlns="http://soap.integration.crowd.atlassian.com">ssmith@atlassianwerw.com</name>
      	 </ns1:in1>
      	 <ns1:in2>
      	    <credential xmlns="http://authentication.integration.crowd.atlassian.com">wibble</credential>
      	    <encryptedCredential xmlns="http://authentication.integration.crowd.atlassian.com">false</encryptedCredential>
      	 </ns1:in2>
            </ns1:addPrincipal>
         </soap:Body>
      </soap:Envelope>
      

      This results i the following on the server:

      2010-01-13 22:10:06,951 http-j2ee.crowd.atlassian.com%2F127.0.0.102-8080-Processor21 ERROR [codehaus.xfire.handler.DefaultFaultHandler] Fault occurred!
      java.lang.NullPointerException
      	at com.atlassian.crowd.integration.util.SOAPPrincipalHelper.getAttribute(SOAPPrincipalHelper.java:51)
      	at com.atlassian.crowd.integration.util.SOAPPrincipalHelper.getFirstAttributeValue(SOAPPrincipalHelper.java:32)
      	at com.atlassian.crowd.integration.util.SOAPPrincipalHelper.getFullName(SOAPPrincipalHelper.java:71)
      	at com.atlassian.crowd.integration.service.soap.ObjectTranslator.processUser(ObjectTranslator.java:215)
      	at com.atlassian.crowd.service.soap.SecurityServerGeneric.addPrincipal(SecurityServerGeneric.java:1058)
      	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
      	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
      	at java.lang.reflect.Method.invoke(Method.java:597)
      	at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:310)
      	at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
      	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
      	at com.atlassian.spring.interceptors.SpringProfilingInterceptor.invoke(SpringProfilingInterceptor.java:20)
      	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
      	at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106)
      	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
      	at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
      	at $Proxy14.addPrincipal(Unknown Source)
      	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
      	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
      	at java.lang.reflect.Method.invoke(Method.java:597)
      	at org.codehaus.xfire.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:59)
      	at org.codehaus.xfire.service.binding.ServiceInvocationHandler.sendMessage(ServiceInvocationHandler.java:320)
      	at org.codehaus.xfire.service.binding.ServiceInvocationHandler$1.run(ServiceInvocationHandler.java:86)
      	at org.codehaus.xfire.service.binding.ServiceInvocationHandler.execute(ServiceInvocationHandler.java:134)
      	at org.codehaus.xfire.service.binding.ServiceInvocationHandler.invoke(ServiceInvocationHandler.java:109)
      	at org.codehaus.xfire.handler.HandlerPipeline.invoke(HandlerPipeline.java:131)
      	at org.codehaus.xfire.transport.DefaultEndpoint.onReceive(DefaultEndpoint.java:64)
      	at org.codehaus.xfire.transport.AbstractChannel.receive(AbstractChannel.java:38)
      	at org.codehaus.xfire.transport.http.XFireServletController.invoke(XFireServletController.java:304)
      	at org.codehaus.xfire.transport.http.XFireServletController.doService(XFireServletController.java:129)
      	at org.codehaus.xfire.transport.http.XFireServlet.doPost(XFireServlet.java:116)
      	at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
      	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
      	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
      	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
      	at com.atlassian.plugin.servlet.filter.IteratingFilterChain.doFilter(IteratingFilterChain.java:46)
      	at com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:55)
      	at com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:41)
      	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
      	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
      	at com.atlassian.plugin.servlet.filter.IteratingFilterChain.doFilter(IteratingFilterChain.java:46)
      	at com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:55)
      	at com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:41)
      	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
      	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
      	at com.atlassian.plugin.servlet.filter.IteratingFilterChain.doFilter(IteratingFilterChain.java:46)
      	at com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:55)
      	at com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:41)
      	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
      	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
      	at com.atlassian.johnson.filters.AbstractJohnsonFilter.doFilter(AbstractJohnsonFilter.java:71)
      	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
      	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
      	at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
      	at com.atlassian.crowd.console.filter.CrowdOpenSessionInViewFilter.doFilterInternal(CrowdOpenSessionInViewFilter.java:26)
      	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:75)
      	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
      	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
      	at com.atlassian.gzipfilter.GzipFilter.doFilterInternal(GzipFilter.java:75)
      	at com.atlassian.gzipfilter.GzipFilter.doFilter(GzipFilter.java:51)
      	at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:183)
      	at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:138)
      	at com.atlassian.crowd.console.filter.CrowdDelegatingFilterProxy.doFilter(CrowdDelegatingFilterProxy.java:38)
      	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
      	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
      	at com.atlassian.plugin.servlet.filter.IteratingFilterChain.doFilter(IteratingFilterChain.java:46)
      	at com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:55)
      	at com.atlassian.plugin.servlet.filter.ServletFilterModuleContainerFilter.doFilter(ServletFilterModuleContainerFilter.java:41)
      	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
      	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
      	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
      	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
      	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
      	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
      	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
      	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
      	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:874)
      	at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
      	at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
      	at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
      	at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
      	at java.lang.Thread.run(Thread.java:619)
      

      Note this was did not occur in the 1.4.3 server.

      Ideally this situation should be caught in the client as well as the server and raise a warning, hopefully resulting in a fix the the client app.

      Attachments

        Activity

          People

            Unassigned Unassigned
            ssmith Steve Smith (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: