private <T> boolean listenForServiceType( final ServiceReference serviceReference, final int eventType, final Class<T> claz, final OSGIServiceRegistration<T> registration) { // Make sure we can retrieve the plugin name final String serviceName = (String) serviceReference.getProperty(OSGIPluginProperties.PLUGIN_NAME_PROP); if (serviceName == null || !checkSanityPluginRegistrationName(serviceName)) { // Quite common for non Killbill bundles logger.debug( "Ignoring registered OSGI service {} with no {} property", claz.getName(), OSGIPluginProperties.PLUGIN_NAME_PROP); return true; } final Object theServiceObject = context.getService(serviceReference); // Is that for us? We look for a subclass here for greater flexibility (e.g. HttpServlet for a // Servlet service) if (theServiceObject == null || !claz.isAssignableFrom(theServiceObject.getClass())) { return false; } final T theService = (T) theServiceObject; final OSGIServiceDescriptor desc = new DefaultOSGIServiceDescriptor( serviceReference.getBundle().getSymbolicName(), bundleRegistry.getPluginName(serviceReference.getBundle()), serviceName); switch (eventType) { case ServiceEvent.REGISTERED: final T wrappedService = ContextClassLoaderHelper.getWrappedServiceWithCorrectContextClassLoader( theService, registration.getServiceType(), serviceName, metricsRegistry); registration.registerService(desc, wrappedService); bundleRegistry.registerService(desc, registration.getServiceType().getName()); break; case ServiceEvent.UNREGISTERING: registration.unregisterService(desc.getRegistrationName()); bundleRegistry.unregisterService(desc, registration.getServiceType().getName()); break; default: break; } return true; }
@BeforeClass(groups = "slow") public void beforeClass() throws Exception { super.beforeClass(); this.testInvoicePluginApi = new TestInvoicePluginApi(); pluginRegistry.registerService( new OSGIServiceDescriptor() { @Override public String getPluginSymbolicName() { return "TaxInvoicePluginApi"; } @Override public String getRegistrationName() { return "TaxInvoicePluginApi"; } }, testInvoicePluginApi); }
@BeforeMethod(groups = "fast") public void beforeMethod() throws Exception { super.beforeMethod(); account = testHelper.createTestAccount("*****@*****.**", true); paymentOptions = new PaymentOptions() { @Override public boolean isExternalPayment() { return false; } @Override public List<String> getPaymentControlPluginNames() { return ImmutableList.of( TestPaymentGatewayApiControlPlugin.PLUGIN_NAME, TestPaymentGatewayApiValidationPlugin.VALIDATION_PLUGIN_NAME); } }; plugin = new TestPaymentGatewayApiControlPlugin(); controlPluginRegistry.registerService( new OSGIServiceDescriptor() { @Override public String getPluginSymbolicName() { return null; } @Override public String getPluginName() { return TestPaymentGatewayApiControlPlugin.PLUGIN_NAME; } @Override public String getRegistrationName() { return TestPaymentGatewayApiControlPlugin.PLUGIN_NAME; } }, plugin); validationPlugin = new TestPaymentGatewayApiValidationPlugin(); controlPluginRegistry.registerService( new OSGIServiceDescriptor() { @Override public String getPluginSymbolicName() { return null; } @Override public String getPluginName() { return TestPaymentGatewayApiValidationPlugin.VALIDATION_PLUGIN_NAME; } @Override public String getRegistrationName() { return TestPaymentGatewayApiValidationPlugin.VALIDATION_PLUGIN_NAME; } }, validationPlugin); }