[ 
https://issues.apache.org/jira/browse/FELIX-3720?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13478943#comment-13478943
 ] 

Alexander Berger commented on FELIX-3720:
-----------------------------------------

Yes you are right OCD/name is required. I must have been looking at the wrong 
line in the XSD :-)
                
> Designate's pid attribute is optional and not mandatory
> -------------------------------------------------------
>
>                 Key: FELIX-3720
>                 URL: https://issues.apache.org/jira/browse/FELIX-3720
>             Project: Felix
>          Issue Type: Bug
>          Components: Metatype Service
>    Affects Versions: metatype-1.0.4
>            Reporter: Alexander Berger
>            Assignee: Felix Meschberger
>         Attachments: metatype.diff
>
>
> In class org.apache.felix.metatype.MetaDataReader method readDesignate the 
> "pid" attribute of a "Designate" element is read as required attribute:
>        designate.setPid( this.getRequiredAttribute( "pid" ) );  
>        designate.setFactoryPid( this.getOptionalAttribute( "factoryPid" ) );
> This is wrong as according to the Metatype Service Specification (Version 
> 1.2) the attributes "pid" and "factoryPid" are both optional but at least one 
> of these two must be present (either "pid" or "factoryPid"). Thus the code 
> should be changed to something like this:
>         final String pid = this.getOptionalAttribute( "pid" );
>         final String factoryPid = this.getOptionalAttribute( "factoryPid" );
>         if ( pid == null && factoryPid == null ) {
>               missingAttribute("pid or factoryPid");
>         }
>         designate.setPid( pid );
>         designate.setFactoryPid( factoryPid );
> Also the class MetaData should be fixed, its addDesignate member looks like 
> this:
>     public void addDesignate( Designate designate )
>     {
>         if ( designate != null )
>         {
>             if ( designates == null )
>             {
>                 designates = new HashMap();
>             }
>             designates.put( designate.getPid(), designate );
>         }
>     }
> but should be implemented something like this:
>     public void addDesignate( Designate designate )
>     {
>         if ( designate != null )
>         {
>             if ( designates == null )
>             {
>                 designates = new HashMap();
>             }
>             final String factoryPid = designate.getFactoryPid();
>             if ( factoryPid == null ) {
>               designates.put( designate.getPid(), designate );        
>             } else {
>               designates.put( factoryPid, designate );
>             }            
>         }
>     }
> Additionally the attribute OCD/name should also be treated to be optional 
> (see MetaDataReader's member readOCD).
> And last but not least MetaTypeInformationImpl's addMetaData member should be 
> changed like this:
>                 // gather pids and factory pids
>                 if (designate.getFactoryPid() != null) {
>                     this.factoryPids.add( designate.getFactoryPid() );
>                     this.addMetaTypeProvider(designate.getFactoryPid(), dmtp);
>                 } else {
>                     this.pids.add(designate.getPid());
>                     this.addMetaTypeProvider(designate.getPid(), dmtp);
>                 }

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to