Clarity: Object Instance XOG errors out with java.lang.NullPointerException.
search cancel

Clarity: Object Instance XOG errors out with java.lang.NullPointerException.

book

Article ID: 51766

calendar_today

Updated On:

Products

Clarity PPM SaaS Clarity PPM On Premise

Issue/Introduction

Description:

Details:

Object instance XOG in 12.x fails with the following error or similar in the XOG output file:

<XOGOutput xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/status.xsd">
<Object type="project"/>
<Status state="FAILURE"/>
<Statistics failureRecords="1" insertedRecords="0" totalNumberOfRecords="1" updatedRecords="0"/>
<Records>
<Record>
<KeyInformation>
<column name="ID">5565982</column>
<column name="name">NCAL RIO S ~ D Fresno</column>
<column name="UNIQUE_NAME">11431</column>
</KeyInformation>
<ErrorInformation>
<Severity>FATAL</Severity>
<Description>Project Object update failed</Description>
<Exception><![CDATA[
java.lang.NullPointerException
at com.niku.odf.lookup.LookupControllerImpl.getDynamicConvertedLookupValue(Lookup ControllerImpl.java:813)
at com.niku.odf.object.xbl.XOGCustomObjectInstanceHandler.getObjectInstance(XOGCustomObjectInstanceHandler.java:935)
at com.niku.odf.object.xbl.XOGCustomObjectInstanceHandler.importCustomObjectInstance(XOGCustomObjectInstanceHandler.java:621)
at com.niku.odf.object.xbl.XOGCustomAttributesWriteHandler.postProcess(XOGCustomAttributesWriteHandler.java:152)
at com.niku.xql2.XQLVisitor.postProcess(XQLVisitor.java:1355)
at com.niku.union.xml.dom.DOMWalker.postProcess(DOMWalker.java:210)
at com.niku.union.xml.dom.DOMWalker.traverseIntern(DOMWalker.java:94)
at com.niku.union.xml.dom.DOMWalker.traverseIntern(DOMWalker.java:92)
at com.niku.union.xml.dom.DOMWalker.traverse(DOMWalker.java:51)
at com.niku.xql2.handlers.TryHandler.preProcess(TryHandler.java:50)
at com.niku.xql2.XQLVisitor.preProcess(XQLVisitor.java:1342)
at com.niku.union.xml.dom.DOMWalker.preProcess(DOMWalker.java:194)
at com.niku.union.xml.dom.DOMWalker.traverseIntern(DOMWalker.java:74)
at com.niku.union.xml.dom.DOMWalker.traverse(DOMWalker.java:51)
at com.niku.xql2.handlers.LoopHandler.processObject(LoopHandler.java:161)
at com.niku.xql2.handlers.LoopHandler.preProcess(LoopHandler.java:91)
at com.niku.xql2.XQLVisitor.preProcess(XQLVisitor.java:1342)
at com.niku.union.xml.dom.DOMWalker.preProcess(DOMWalker.java:194)
at com.niku.union.xml.dom.DOMWalker.traverseIntern(DOMWalker.java:74)
at com.niku.union.xml.dom.DOMWalker.traverse(DOMWalker.java:51)
at com.niku.xql2.handlers.LoopHandler.processObject(LoopHandler.java:161)
at com.niku.xql2.handlers.LoopHandler.preProcess(LoopHandler.java:91)
at com.niku.xql2.XQLVisitor.preProcess(XQLVisitor.java:1342)
at com.niku.union.xml.dom.DOMWalker.preProcess(DOMWalker.java:194)
at com.niku.union.xml.dom.DOMWalker.traverseIntern(DOMWalker.java:74)
at com.niku.union.xml.dom.DOMWalker.traverse(DOMWalker.java:51)
at com.niku.xql2.handlers.LoopHandler.processObject(LoopHandler.java:161)
at com.niku.xql2.handlers.LoopHandler.preProcess(LoopHandler.java:91)
at com.niku.xql2.XQLVisitor.preProcess(XQLVisitor.java:1342)
at com.niku.union.xml.dom.DOMWalker.preProcess(DOMWalker.java:194)
at com.niku.union.xml.dom.DOMWalker.traverseIntern(DOMWalker.java:74)
at com.niku.union.xml.dom.DOMWalker.traverseIntern(DOMWalker.java:92)
at com.niku.union.xml.dom.DOMWalker.traverseIntern(DOMWalker.java:92)
at com.niku.union.xml.dom.DOMWalker.traverse(DOMWalker.java:36)
at com.niku.xog.service.XOGXBLHandler.processXBL(XOGXBLHandler.java:245)
at com.niku.xog.service.XOGXBLHandler.process(XOGXBLHandler.java:151)
at com.niku.xog.service.ObjectHandler.processRequest(ObjectHandler.java:167)
at com.niku.xog.service.ObjectHandler.process(ObjectHandler.java:90)
at com.niku.xog.service.XOGDispatch.processMessage(XOGDispatch.java:114)
at com.niku.xog.service.XOGSOAPServlet.processMessage(XOGSOAPServlet.java:266)
at com.niku.xog.service.XOGSOAPServlet.doPost(XOGSOAPServlet.java:88)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at com.niku.union.web.filter.CharsetFilter.doFilter(CharsetFilter.java:29)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.valves.FastCommonAccessLogValve.invoke(FastCommonAccessLogValve.java:495)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWork erThread.java:80)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java: 684)
at java.lang.Thread.run(Thread.java:595) ]]></Exception>
</ErrorInformation>
</Record>
</Records>
</XOGOutput>

Steps to Recreate:

  1. Create a user defined lookup (static list, hidden key = enum, add some values).

  2. Create a custom lookup attribute using the lookup defined in step 1 on the project object.

  3. Delete the user-defined lookup.

  4. Go to Home->Projects.

  5. Click on Build Power Filter.

  6. Build a power filter on project name = 'proj1'.

  7. Submit. You're back on the project list with the project list filtered for projects who's name='proj1'.

  8. Click Show All to get the entire project list again.

  9. Enter 'proj1' in the Project Name field and Click Filter.

Expected Results: The project list is filtered for projects who's name='proj1'

Actual Results: All projects are shown. The project filter doesn't work again, except for power filters.

Solution:

Workaround:

If you know the lookup-type or have a single orphaned attribute, run the following query:

SELECT INTERNAL_NAME FROM ODF_CUSTOM_ATTRIBUTES WHERE LOOKUP_TYPE='my_lookup' AND OBJECT_NAME='my_object'

To determine if multiple attributes are orphaned as well as their names and ids, run the following query:

select O.ID, O.INTERNAL_NAME, O.OBJECT_NAME, CAP.NAME
FROM ODF_CUSTOM_ATTRIBUTES O       
INNER JOIN CMN_CAPTIONS_NLS CAP ON (O.ID=CAP.PK_ID AND       
CAP.TABLE_NAME='ODF_CUSTOM_ATTRIBUTES' AND CAP.LANGUAGE_CODE='en')       
WHERE O.LOOKUP_TYPE IS NOT NULL AND O.LOOKUP_TYPE NOT IN (SELECT LOOKUP_TYPE       
FROM CMN_LOOKUP_TYPES)  

Once you have located the attribute(s), go to the list of attributes for the object identified by your query and delete the attribute(s).

NOTE: Don't forget to check inactive attributes

Status/Resolution:

CAUSE: CLRT-20166 which was fixed in 8.1.2 and 12.0.1. When you delete a lookup, there is no check done for attributes pointing to that lookup on the object. Even though the problem was fixed, attributes orphaned by deleting the lookup that are still in the database can cause this issue.

KEYWORDS : CLARITYKB, XOG, CLRT-20166, java.lang.nullpointerexception, orphan, lookup, clarity12resolved, clarity1201resolved

Environment

Release:
Component: STUDIO