|
[ https://issues.apache.org/jira/browse/OFBIZ-9164?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16542996#comment-16542996 ] Dennis Balkir commented on OFBIZ-9164: -------------------------------------- Hi [~jacques.le.roux], I found a mistake, which results in an Nullpointer. If you go here: https://demo-trunk.ofbiz.apache.org/catalog/control/main then open the lookup on the left for category id, click the first category (20111) and then click on search, you will be prompted with this: {{java.lang.IllegalArgumentException: Error running script at location [component://product/groovyScripts/catalog/find/KeywordSearch.groovy]: java.lang.NullPointerException}} This is the result of the changes you made here, to be specific in {{CategoryContentWrapper}} and {{ContentWorker}}. The following code is the problem: {code:java} getProductCategoryContentAsText(null, productCategory, prodCatContentTypeId, locale, mimeTypeId, delegator, dispatcher, outWriter, false);}} {code} This gives {{null}} as the value for the dispatcher, which is then used here inside of {{getProductCategoryContentAsText}}: {code:java} ContentWorker.renderContentAsText(dispatcher, categoryContent.getString("contentId"), outWriter, inContext, locale, mimeTypeId, null, null, cache); {code} The problem is, that the method {{renderContentAsText}} as a result of your changes uses the dispatcher to get the delegator: {code:java} public static void renderContentAsText(LocalDispatcher dispatcher, String contentId, Appendable out, Map<String, Object> templateContext, Locale locale, String mimeTypeId, String partyId, String roleTypeId, boolean cache) throws GeneralException, IOException { Delegator delegator = dispatcher.getDelegator(); GenericValue content = ContentWorker.findContentForRendering(delegator, contentId, locale, partyId, roleTypeId, cache); ContentWorker.renderContentAsText(dispatcher, content, out, templateContext, locale, mimeTypeId, cache, null); } {code} Because the dispatcher is a given {{null}} value at this point, this results in a nullpointer. > Refactor ContentWorkerInterface methods signatures > -------------------------------------------------- > > Key: OFBIZ-9164 > URL: https://issues.apache.org/jira/browse/OFBIZ-9164 > Project: OFBiz > Issue Type: Sub-task > Components: content, framework, lucene, order, party, product, workeffort > Affects Versions: Trunk > Reporter: Jacques Le Roux > Assignee: Jacques Le Roux > Priority: Minor > Fix For: 17.12.01 > > Attachments: OFBIZ-9164 DataResourceWorker.java.patch, OFBIZ-9164.patch > > > While working on OFBIZ-6919 which was built on R13.07 I stumbled upon an issue due to r1652852 where Adrian improved the cacheKey in FormFactory.getFormFromLocation() by adding a delegator reference (Tenants). Actually I'm not even sure it was done at r1652852 because Adrian did not maintain the FormFactory svn history. > Anyway, to make a long story short I had to introduce a DispatchContext parameter when calling FormFactory.readFormDocument() when the code from R13.07 only passed a null. > This had an impact in the hierarchy tree because FormFactory.readFormDocument() was called in DataResourceWorker class, where the new code was called from renderDataResourceAsText(). So I instead of only passing a Delegator I decided to pass only a LocalDispatcher parameter in renderDataResourceAsText(), since we can get the Delegator from the LocalDispatcher. Doing so it had an impact on the renderDataResourceAsText hierarchy tree ending in DataResourceWorkerInterface and all related. > I finally decided to apply the same ["Change Method Signature" refactoring pattern|http://refactoring.com/catalog/addParameter.html] to all cases related to ContentWorkerInterface. No need to pass a delegator when you have LocalDispatcher! > Here I attach a patch for review, I'll commit in few days -- This message was sent by Atlassian JIRA (v7.6.3#76005) |
| Free forum by Nabble | Edit this page |
