Hi Nipuni,

You need to do two things here,

1. If you are not using the registry search feature , then need to find the
place that bundle going to include to the product.
2. You can do a null check and proceed in code.[ @Subash this is bug in
registry code please fix.]

-Ajith.



On Wed, Sep 10, 2014 at 12:47 PM, Nipuni Perera <nip...@wso2.com> wrote:

> 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>
>
>


-- 
Ajith Vitharana.
WSO2 Inc. - http://wso2.org
Email  :  aji...@wso2.com
Mobile : +94772217350
_______________________________________________
Dev mailing list
Dev@wso2.org
http://wso2.org/cgi-bin/mailman/listinfo/dev

Reply via email to