cancel
Showing results for 
Search instead for 
Did you mean: 

DefaultItemResolver is throwing nullpointerexception when there is no canonical item available in Datahub

Former Member
0 Kudos

Hi,

I am using DataHub 6.2 and using resolve method in target.xml. Resolve method looks like this :resolve('CanonicalAssemblyItemNumberMapObject','SAPORDER_INBOUND_POOL','integrationKey=ZREP')?.tdLineValue.

Resolve method is throwing "MissingReferenceException" when CanonicalItem with Integration key = ZREP is not available. Actually Exception is coming from DataHub OOTB datahub-service-6.2.0.2-RC13 jar. Java class name is DefaultItemResolver.

Please find the attached Exception log.

Thanks in advance

link text

Accepted Solutions (1)

Accepted Solutions (1)

Former Member
0 Kudos

Please follow below steps:

a. Make a sub class of com.hybris.datahub.service.spel.impl.DefaultItemResolver and override resolve method

 @Override
 public Object resolve(EvaluationContext ctx, BaseDataItem ctxItem, String type, DataHubPool pool, String... conditions) {
     try{
             return super.resolve(ctx, ctxItem, type,pool, conditions);
     }catch(MissingReferenceException exception){
             LOG.warn("Missing reference: "+exception.getMessage());
             return null;
     }
 }

b. Register the resolver in the spring

 <alias name="customItemResolver" alias="defaultItemResolver" />    
 <bean name="customItemResolver" class="<your custom item resolver class>">
     <property name="itemService" ref="canonicalItemService" />
     <property name="integrationKeyGenerator" ref="integrationKeyGenerator" />
 </bean>

c. Now resolve method will return null instead of throwing MissingReferenceException. Null check can be handled simply by using safe navigation operator ? in Spring expression (logs shows that you are already using)

Former Member
0 Kudos

I followed the similar way and it works fine .

Thanks for your input

Answers (1)

Answers (1)

Former Member
0 Kudos

We also faced similar issue in our Data Hub project. We resolved it by overriding resolve method in DefaultItemResolver that handles the MissingReferenceException

Former Member
0 Kudos

Hi Vinod,

Thanks for your input. Could you please explain in details how you are overriding DefaultItemResolver class?

Thanks in advance

Former Member
0 Kudos

Posting my answer below as reply does not allow more than 600 characters.