Hi, Adding null check can avoid the NPE exception but may not solve the issue properly.
@Lasantha, I will check with GREG team and see if this can be solved with touchpoints. @Firzhan. I have gone through the discussion "[AS] Error in shutting down the server : Cannot put transports into maintenance mode : NPE from RegistryConfigLoader." earlier and your findings, will check with GREG team. Thanks, Nipuni On Wed, Sep 10, 2014 at 11:44 AM, Firzhan Naqash <firz...@wso2.com> wrote: > Hi All, > > We have already discussed this issue in the mail thread [Dev] [AS] Error > in shutting down the server : Cannot put transports into maintenance mode : > NPE from RegistryConfigLoader. > > Rather than checking the null point, I feel like we have to investigate > why the registry's search feature bundle getting included to the products > which are not using registry search feature ( BPS ). > > @Ajith:- You thoughts on this > > Regards, > Firzhan > > On Wed, Sep 10, 2014 at 11:41 AM, Lasantha Fernando <lasan...@wso2.com> > wrote: > >> Hi, >> >> >> On 10 September 2014 10:19, Nipuni Perera <nip...@wso2.com> wrote: >> >>> Hi, >>> >>> Yes. I can add a null check to indexingConfig element and continue only >>> if the value is available (But it will add the whole method execution >>> inside constructor RegistryConfigLoader() to an if block - line 75 to 150 >>> of [1]). Is this preferable? >>> >>> public RegistryConfigLoader() { >>> try { >>> FileInputStream fileInputStream = new >>> FileInputStream(getConfigFile()); >>> StAXOMBuilder builder = new StAXOMBuilder( >>> >>> CarbonUtils.replaceSystemVariablesInXml(fileInputStream)); >>> OMElement configElement = builder.getDocumentElement(); >>> OMElement indexingConfig = >>> configElement.getFirstChildWithName( >>> new QName("indexingConfiguration")); >>> if (indexingConfig != null) >>> { //newly >>> added if block >>> >>> ... >>> ... >>> } >>> } >>> } catch (FileNotFoundException e) { >>> // This virtually cannot happen as registry.xml is necessary >>> to start up the registry >>> log.error("registry.xml has not been found", e); >>> } catch (RegistryException e) { >>> log.error(e.getMessage(),e); >>> } catch (XMLStreamException e) { >>> String msg = "error building registry.xml, check for badly >>> formed xml"; >>> log.error(msg, e); >>> } catch (CarbonException e) { >>> log.error("An error occurred during system variable >>> replacement", e); >>> } >>> } >>> >>> It seems if the indexingConfig is null, no need to call this >>> constructor. RegistryConfigLoader() is called inside IndexingManager() >>> constructor. >>> >>> private IndexingManager() { >>> try { >>> registry = >>> Utils.getRegistryService().getRegistry(CarbonConstants.REGISTRY_SYSTEM_USERNAME); >>> registryConfig = new RegistryConfigLoader(); >>> // call to constructor RegistryConfigLoader() >>> indexer = new AsyncIndexer(); >>> } catch (RegistryException e) { >>> log.error("Could not initialize registry for indexing", e); >>> } >>> } >>> Can't we check indexingConfig value before calling >>> RegistryConfigLoader() ? >>> >> >> +1 to add a null check and deal with this. As to not calling >> RegistryConfigLoader if indexingConfig is not present, isn't >> RegistryConfigLoader there to read the whole registry.xml file and >> indexingConfig is only a part of that? If so, I guess we do need to call >> RegistryConfigLoader() regardless of whether indexingConfig is present or >> not. Maybe the GREG team can give better input on this. >> >> Also, this exact same code segment was discussed before in thread "[Dev] >> Missing configuration in registry.xml causes OSGi services to be >> unsatisfied" [1], but guess I forgot to raise a JIRA under that... :-). >> Can you look into that thread as well and if it is possible to add a >> touchpoint as well as suggested in that thread? >> >> [1] http://mail.wso2.org/mailarchive/dev/2014-April/029358.html >> >> Thanks, >> Lasantha >> >>> >>> [1] >>> https://github.com/Nipuni/carbon-registry/blob/master/components/registry/org.wso2.carbon.registry.indexing/src/main/java/org/wso2/carbon/registry/indexing/RegistryConfigLoader.java >>> >>> Thanks, >>> Nipuni >>> >>> >>> On Wed, Sep 10, 2014 at 8:53 AM, Kasun Gajasinghe <kas...@wso2.com> >>> wrote: >>> >>>> >>>> As a best practice, do not catch the Exception class, instead catch >>>> specific subclasses. But, you do not need to catch any exceptions in this >>>> particular case? Can't you just verify whether the indexingConfiguration >>>> element is available or not? >>>> >>>> KasunG >>>> >>>> On Wed, Sep 10, 2014 at 4:39 AM, Nipuni Perera <nip...@wso2.com> wrote: >>>> >>>>> Hi, >>>>> >>>>> I am working on issue[1]. I could find that the RegistryConfigLoader() >>>>> returns a null value. (line 73 in [2]). >>>>> >>>>> OMElement indexingConfig = configElement.getFirstChildWithName(new >>>>> QName("indexingConfiguration")); >>>>> >>>>> This value is used in several places. but NPE is thrown in line 88, >>>>> >>>>> lastAccessTimeLocation = indexingConfig.getFirstChildWithName(new >>>>> QName("lastAccessTimeLocation")).getText(); >>>>> >>>>> as the catch clause catches only >>>>> >>>>> catch (OMException e) { >>>>> ... // set default value >>>>> } >>>>> >>>>> while in other places (eg: line 78,79) it is >>>>> >>>>> catch (Exception e) { >>>>> ... // set default value >>>>> } >>>>> >>>>> This exception occurred due to a missing XML elements in registry.xml. >>>>> This missing element ( <indexingConfiguration> </indexingConfiguration> ) >>>>> will be used if the product is using registry search feature. But this NPE >>>>> should be handled for the products that does not use this feature. This >>>>> can >>>>> be fixed adding similar catch clause (catching Exception e ) in the >>>>> catch clause(line 90,91) (current implementation use catch clauses to set >>>>> default values if an exception occurs. Adding an extra catch clause to the >>>>> later try block can be used to add similar behavior). Is there a better >>>>> way to handle this? >>>>> >>>>> [1] https://wso2.org/jira/browse/CARBON-14904 >>>>> [2] >>>>> https://githubc.com/Nipuni/carbon-registry/blob/master/components/registry/org.wso2.carbon.registry.indexing/src/main/java/org/wso2/carbon/registry/indexing/RegistryConfigLoader.java >>>>> <https://github.com/Nipuni/carbon-registry/blob/master/components/registry/org.wso2.carbon.registry.indexing/src/main/java/org/wso2/carbon/registry/indexing/RegistryConfigLoader.java> >>>>> >>>>> Thanks, >>>>> Nipuni >>>>> -- >>>>> Nipuni Perera >>>>> Software Engineer; WSO2 Inc.; http://wso2.com >>>>> Email: nip...@wso2.com >>>>> Git hub profile: https://github.com/nipuni >>>>> Mobile: +94 (71) 5626680 >>>>> <http://wso2.com> >>>>> >>>>> >>>>> _______________________________________________ >>>>> Dev mailing list >>>>> Dev@wso2.org >>>>> http://wso2.org/cgi-bin/mailman/listinfo/dev >>>>> >>>>> >>>> >>>> >>>> -- >>>> >>>> *Kasun Gajasinghe*Senior Software Engineer, WSO2 Inc. >>>> email: kasung AT spamfree wso2.com >>>> linked-in: http://lk.linkedin.com/in/gajasinghe >>>> blog: http://kasunbg.org >>>> >>>> >>>> >>> >>> >>> >>> -- >>> Nipuni Perera >>> Software Engineer; WSO2 Inc.; http://wso2.com >>> Email: nip...@wso2.com >>> Git hub profile: https://github.com/nipuni >>> Mobile: +94 (71) 5626680 >>> <http://wso2.com> >>> >>> >>> _______________________________________________ >>> Dev mailing list >>> Dev@wso2.org >>> http://wso2.org/cgi-bin/mailman/listinfo/dev >>> >>> >> >> >> -- >> *Lasantha Fernando* >> Software Engineer - Data Technologies Team >> WSO2 Inc. http://wso2.com >> >> email: lasan...@wso2.com >> mobile: (+94) 71 5247551 >> >> _______________________________________________ >> Dev mailing list >> Dev@wso2.org >> http://wso2.org/cgi-bin/mailman/listinfo/dev >> >> > -- Nipuni Perera Software Engineer; WSO2 Inc.; http://wso2.com Email: nip...@wso2.com Git hub profile: https://github.com/nipuni Mobile: +94 (71) 5626680 <http://wso2.com>
_______________________________________________ Dev mailing list Dev@wso2.org http://wso2.org/cgi-bin/mailman/listinfo/dev