Jörg Hoh created SLING-8263:
-------------------------------

             Summary: Osgi Mocks cannot handle r7 property names with $_$ in 
annotation config classes
                 Key: SLING-8263
                 URL: https://issues.apache.org/jira/browse/SLING-8263
             Project: Sling
          Issue Type: Improvement
          Components: Testing
    Affects Versions: Testing OSGi Mock 2.4.2
            Reporter: Jörg Hoh


I try to unittest osgi components which use r7 property names containing the 
"$_$" style to embed the "-" character according to OSGI r7 (chapter 105.15.2, 
metatypes). I also use the annotation-style configuration approach.

{code:title=HealthCheckStatusEmail.java}

@Designate(ocd=HealthcheckService.Config)
public class HealthCheckService, {

@AttributeDefinnition(...)
public @interface Config {
  @AttributeDefinition()
  String recipients_email$_$addresses;
}

@Activate
protected void activate (Config conf) {
  String recipient = conf.recipients_email$_$addresses;
}

{code}

{code:title=HealthCheckStatusEmailTest.java}

   healthcheckService = new HealthCheckService();

   @Before
    public void setUp() throws Exception {
        configuration.put("recipients.email-addresses", "[email protected]");
  }
  @Test
  public void test () {
    context.registerInjectActivateService(healthcheckService, configuration);
    // test code
  }
{code}

But debugging showed, that this value {{[email protected]}} was never written 
into the field {{recipient}} of the HealthCheckService component.

I tracked it down into the OsgiMocks library, where in the shaded class 
"osgimock.org.apache.felix.scr.impl.inject.Annotations" the method 
{{toObject}}, where the the method "fixup" is called with the value 
{{recipients.email$_$addresses}}; it returns {{recipients.email.addresses}}, 
but I expect {{recipients.email.addresses}}.

To me the problem seems to be that the shaded Felix SCR library does not 
support OSGI r7 here (and therefor not this specific mapping introduced in r7).

The only workaround I see right now is to use a different signature for the 
activate() method to avoid this incorrect translation for these property names.




--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to