Return-Path: X-Original-To: apmail-felix-dev-archive@www.apache.org Delivered-To: apmail-felix-dev-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id B4607D90A for ; Thu, 18 Oct 2012 12:22:05 +0000 (UTC) Received: (qmail 53785 invoked by uid 500); 18 Oct 2012 12:22:05 -0000 Delivered-To: apmail-felix-dev-archive@felix.apache.org Received: (qmail 53179 invoked by uid 500); 18 Oct 2012 12:22:04 -0000 Mailing-List: contact dev-help@felix.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@felix.apache.org Delivered-To: mailing list dev@felix.apache.org Received: (qmail 52941 invoked by uid 99); 18 Oct 2012 12:22:04 -0000 Received: from arcas.apache.org (HELO arcas.apache.org) (140.211.11.28) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 18 Oct 2012 12:22:04 +0000 Date: Thu, 18 Oct 2012 12:22:04 +0000 (UTC) From: "Alexander Berger (JIRA)" To: dev@felix.apache.org Message-ID: <1450020605.63678.1350562924221.JavaMail.jiratomcat@arcas> In-Reply-To: <1283809038.62486.1350540363022.JavaMail.jiratomcat@arcas> Subject: [jira] [Comment Edited] (FELIX-3720) Designate's pid attribute is optional and not mandatory MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-JIRA-FingerPrint: 30527f35849b9dde25b450d4833f0394 [ https://issues.apache.org/jira/browse/FELIX-3720?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13478943#comment-13478943 ] Alexander Berger edited comment on FELIX-3720 at 10/18/12 12:21 PM: -------------------------------------------------------------------- Yes you are right OCD/name is required. I must have been looking at the wrong line in the XSD :-) I just updated the patch (diff) file was (Author: alexberger): 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