<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def register_service( self, bundle, clazz, service, properties, send_event, factory=False, prototype=False, ):
 # type: (Bundle, Union[List[Any], type, str], object, dict, bool, bool, bool) -> ServiceRegistration """ Registers a service and calls the listeners :param bundle: The bundle registering the service :param clazz: Name(s) of the interface(s) implemented by service :param service: The service to register :param properties: Service properties :param send_event: If not, doesn't trigger a service registered event :param factory: If True, the given service is a service factory :param prototype: If True, the given service is a prototype service factory (the factory argument is considered True) :return: A ServiceRegistration object :raise BundleException: An error occurred while registering the service """

        if bundle is None or service is None or not clazz:
            raise BundleException("Invalid registration parameters")

        if not isinstance(properties, dict):
            # Be sure we have a valid dictionary
            properties = {}
        else:
            # Use a copy of the given properties
            properties = properties.copy()

        # Prepare the class specification
        if not isinstance(clazz, (list, tuple)):
            # Make a list from the single class
            clazz = [clazz]

        # Test the list content
        classes = []
        for svc_clazz in clazz:
            if inspect.isclass(svc_clazz):
                # Keep the type name
                svc_clazz = svc_clazz.__name__

            if not svc_clazz or not is_string(svc_clazz):
                # Invalid class name
                raise BundleException(
                    "Invalid class name: {0}".format(svc_clazz)
                )

            # Class OK
            classes.append(svc_clazz)

        # Make the service registration
        registration = self._registry.register(
            bundle, classes, properties, service, factory, prototype
        )

        # Update the bundle registration information
        bundle._registered_service(registration)

        if send_event:
            # Call the listeners
            event = ServiceEvent(
                ServiceEvent.REGISTERED, registration.get_reference()
            )
            self._dispatcher.fire_service_event(event)

        return registration