public void bind(ExtensionPointRegistry registry, EndpointRegistry endpointRegistry) {
if (compositeContext == null) {
compositeContext = new CompositeContext(registry, endpointRegistry);
}
this.registry = registry;
UtilityExtensionPoint utilities = registry.getExtensionPoint(UtilityExtensionPoint.class);
this.interfaceContractMapper = utilities.getUtility(InterfaceContractMapper.class);
this.workScheduler = utilities.getUtility(WorkScheduler.class);
this.wireProcessor =
new ExtensibleWireProcessor(registry.getExtensionPoint(RuntimeWireProcessorExtensionPoint.class));
this.messageFactory = registry.getExtensionPoint(FactoryExtensionPoint.class).getFactory(MessageFactory.class);
this.invoker = new RuntimeInvoker(this.messageFactory, this);
this.phaseManager = utilities.getUtility(PhaseManager.class);
this.serializer = utilities.getUtility(EndpointSerializer.class);
this.providerFactories = registry.getExtensionPoint(ProviderFactoryExtensionPoint.class);
this.builders = registry.getExtensionPoint(BuilderExtensionPoint.class);
this.contractBuilder = builders.getContractBuilder();
}