Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix NPE on missing currency conversion #10196

Conversation

teosarca
Copy link
Member

@teosarca teosarca commented Nov 9, 2020

Avoid NPE in case of missing currency conversion. Instead throw a much more understandable exception.

The triggering exception was:

de.metas.acct.doc.PostingException: NullPointerException
 Buchungsstatus: Verbuchungs-Fehler (Error)
 Belegnummer: MMatchPO[1004524,Qty=26.00000,C_OrderLine_ID=1042334,M_InOutLine_ID=1030499,C_InvoiceLine_ID=0]
 Preserve Posted status: false
Additional parameters:
 issueCategory: ACCOUNTING
 recordRef: TableRecordReference{tableName=M_MatchPO, recordId=1004524}
	at org.compiere.acct.Doc.newPostingException(Doc.java:1844)
	at org.compiere.acct.Doc$1.doCatch(Doc.java:376)
	at org.adempiere.ad.trx.api.impl.TrxCallableWrappers$3.doCatch(TrxCallableWrappers.java:160)
	at org.adempiere.ad.trx.api.impl.AbstractTrxManager.call0(AbstractTrxManager.java:786)
	at org.adempiere.ad.trx.api.impl.AbstractTrxManager.call(AbstractTrxManager.java:666)
	at org.adempiere.ad.trx.api.impl.AbstractTrxManager.call(AbstractTrxManager.java:567)
	at org.adempiere.ad.trx.api.impl.AbstractTrxManager.call(AbstractTrxManager.java:498)
	at org.adempiere.ad.trx.api.impl.AbstractTrxManager.run(AbstractTrxManager.java:484)
	at org.adempiere.ad.trx.api.ITrxManager.runInThreadInheritedTrx(ITrxManager.java:218)
	at de.metas.acct.doc.AcctDocRequiredServicesFacade.runInThreadInheritedTrx(AcctDocRequiredServicesFacade.java:147)
	at org.compiere.acct.Doc.post(Doc.java:363)
	at de.metas.acct.api.impl.PostingRequestBuilder.postIt_Directly(PostingRequestBuilder.java:178)
	at de.metas.acct.api.impl.PostingRequestBuilder.invokeRunnable(PostingRequestBuilder.java:398)
	at de.metas.acct.api.impl.PostingRequestBuilder.lambda$postAfterTrxCommit$0(PostingRequestBuilder.java:391)
	at org.adempiere.ad.trx.api.impl.AutoCommitTrxListenerManager.execute(AutoCommitTrxListenerManager.java:72)
	at org.adempiere.ad.trx.api.impl.AutoCommitTrxListenerManager.registerListener(AutoCommitTrxListenerManager.java:48)
	at org.adempiere.ad.trx.api.ITrxListenerManager$RegisterListenerRequest.registerHandlingMethod(ITrxListenerManager.java:140)
	at de.metas.acct.api.impl.PostingRequestBuilder.postAfterTrxCommit(PostingRequestBuilder.java:391)
	at de.metas.acct.api.impl.PostingRequestBuilder.postIt(PostingRequestBuilder.java:127)
	at de.metas.acct.posting.server.AccountingService.handleRequest(AccountingService.java:64)
	at de.metas.acct.posting.DocumentPostingBusService$DocumentPostRequestHandlerAsEventListener.handleRequest(DocumentPostingBusService.java:154)
	at de.metas.acct.posting.DocumentPostingBusService$DocumentPostRequestHandlerAsEventListener.lambda$onEvent$0(DocumentPostingBusService.java:147)
	at de.metas.event.log.EventLogUserService.invokeHandlerAndLog(EventLogUserService.java:164)
	at de.metas.acct.posting.DocumentPostingBusService$DocumentPostRequestHandlerAsEventListener.onEvent(DocumentPostingBusService.java:145)
	at de.metas.event.impl.EventBus.invokeEventListenerWithLogging(EventBus.java:329)
	at de.metas.event.impl.EventBus.invokeEventListener(EventBus.java:315)
	at de.metas.event.impl.EventBus.access$200(EventBus.java:58)
	at de.metas.event.impl.EventBus$GuavaEventListenerAdapter.onEvent(EventBus.java:304)
	at sun.reflect.GeneratedMethodAccessor142.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at reflect.Method.invoke(Method.java:498)
	at com.google.common.eventbus.Subscriber.invokeSubscriberMethod(Subscriber.java:91)
	at com.google.common.eventbus.Subscriber$SynchronizedSubscriber.invokeSubscriberMethod(Subscriber.java:150)
	at com.google.common.eventbus.Subscriber$1.run(Subscriber.java:76)
	at com.google.common.util.concurrent.MoreExecutors$DirectExecutor.execute(MoreExecutors.java:399)
	at com.google.common.eventbus.Subscriber.dispatchEvent(Subscriber.java:71)
	at com.google.common.eventbus.Dispatcher$PerThreadQueuedDispatcher.dispatch(Dispatcher.java:116)
	at com.google.common.eventbus.EventBus.post(EventBus.java:217)
	at de.metas.event.impl.EventBus.postEvent(EventBus.java:250)
	at de.metas.acct.posting.DocumentPostingBusService.postRequest(DocumentPostingBusService.java:75)
	at de.metas.acct.api.impl.PostingRequestBuilder.postIt_Enqueue(PostingRequestBuilder.java:148)
	at de.metas.acct.api.impl.PostingRequestBuilder.invokeRunnable(PostingRequestBuilder.java:398)
	at de.metas.acct.api.impl.PostingRequestBuilder.lambda$postAfterTrxCommit$0(PostingRequestBuilder.java:391)
	at org.adempiere.ad.trx.api.impl.AutoCommitTrxListenerManager.execute(AutoCommitTrxListenerManager.java:72)
	at org.adempiere.ad.trx.api.impl.AutoCommitTrxListenerManager.registerListener(AutoCommitTrxListenerManager.java:48)
	at org.adempiere.ad.trx.api.ITrxListenerManager$RegisterListenerRequest.registerHandlingMethod(ITrxListenerManager.java:140)
	at de.metas.acct.api.impl.PostingRequestBuilder.postAfterTrxCommit(PostingRequestBuilder.java:391)
	at de.metas.acct.api.impl.PostingRequestBuilder.postIt(PostingRequestBuilder.java:116)
	at de.metas.acct.posting.server.accouting_docs_to_repost_db_table.AccoutingDocsToRepostDBTableWatcher.enqueueForReposting(AccoutingDocsToRepostDBTableWatcher.java:125)
	at de.metas.acct.posting.server.accouting_docs_to_repost_db_table.AccoutingDocsToRepostDBTableWatcher.enqueueAllForReposting(AccoutingDocsToRepostDBTableWatcher.java:104)
	at de.metas.acct.posting.server.accouting_docs_to_repost_db_table.AccoutingDocsToRepostDBTableWatcher.run(AccoutingDocsToRepostDBTableWatcher.java:79)
	at Thread.run(Thread.java:748)
Caused by: NullPointerException
	at de.metas.costing.impl.CostingService.convertToAcctSchemaCurrency(CostingService.java:219)
	at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
	at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)
	at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
	at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
	at java.util.stream.Streams$StreamBuilderImpl.forEachRemaining(Streams.java:419)
	at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:482)
	at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:472)
	at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
	at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
	at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
	at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:485)
	at java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:272)
	at java.util.stream.Streams$StreamBuilderImpl.forEachRemaining(Streams.java:419)
	at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:482)
	at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:472)
	at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
	at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
	at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:566)
	at de.metas.costing.impl.CostingService.createCostDetail(CostingService.java:138)
	at de.metas.acct.doc.AcctDocRequiredServicesFacade.createCostDetail(AcctDocRequiredServicesFacade.java:295)
	at org.compiere.acct.DocLine_MatchPO.createCostDetails(DocLine_MatchPO.java:141)
	at org.compiere.acct.Doc_MatchPO.createFacts(Doc_MatchPO.java:110)
	at org.compiere.acct.Doc.postLogic(Doc.java:566)
	at org.compiere.acct.Doc.post0(Doc.java:477)
	at org.compiere.acct.Doc.access$000(Doc.java:158)
	at org.compiere.acct.Doc$1.run(Doc.java:370)
	at org.adempiere.ad.trx.api.impl.TrxCallableWrappers$3.call(TrxCallableWrappers.java:147)
	at org.adempiere.ad.trx.api.impl.TrxCallableWrappers$3.call(TrxCallableWrappers.java:137)
	at org.adempiere.ad.trx.api.impl.AbstractTrxManager.call0(AbstractTrxManager.java:753)
	... 48 more

@teosarca teosarca merged commit ee83d07 into happy_flower_uat Nov 10, 2020
@teosarca teosarca deleted the happy_flower_uat_fix_npe_on_missing_currency_conversion branch November 10, 2020 08:35
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants