public Server publish() throws Exception { jndiContext = new InitialContext(); Object obj = jndiContext.lookup(config.getJNDIName()); ejbHome = (EJBHome) PortableRemoteObject.narrow(obj, EJBHome.class); Class<?> interfaceClass = Class.forName(getServiceClassName()); boolean isJaxws = isJaxWsServiceInterface(interfaceClass); ServerFactoryBean factory = isJaxws ? new JaxWsServerFactoryBean() : new ServerFactoryBean(); factory.setServiceClass(interfaceClass); if (config.getWsdlURL() != null) { factory.getServiceFactory().setWsdlURL(config.getWsdlURL()); } factory.setInvoker(new EJBInvoker(ejbHome)); String baseAddress = isNotNull(getEjbServantBaseURL()) ? getEjbServantBaseURL() : getDefaultEJBServantBaseURL(); String address = baseAddress + "/" + config.getJNDIName(); factory.setAddress(address); if (address.length() >= 5 && HTTPS_PREFIX.equalsIgnoreCase(address.substring(0, 5))) { throw new UnsupportedOperationException("EJBEndpoint creation by https protocol is unsupported"); } if (getWorkManager() != null) { setWorkManagerThreadPoolToJetty(factory.getBus(), baseAddress); } Server server = factory.create(); LOG.info("Published EJB Endpoint of [" + config.getJNDIName() + "] at [" + address + "]"); return server; }
factory.setInvoker(invoker);
sfb.setInvoker(createInvoker(processor));
protected Server createServer() throws Exception { ServerFactoryBean svrBean = cxfEndpoint.createServerFactoryBean(); svrBean.setInvoker(new CxfConsumerInvoker(cxfEndpoint)); Server server = svrBean.create(); // Apply the server configurer if it is possible if (cxfEndpoint.getCxfEndpointConfigurer() != null) { cxfEndpoint.getCxfEndpointConfigurer().configureServer(server); } server.getEndpoint().getEndpointInfo().setProperty("serviceClass", cxfEndpoint.getServiceClass()); if (ObjectHelper.isNotEmpty(cxfEndpoint.getPublishedEndpointUrl())) { server.getEndpoint().getEndpointInfo().setProperty("publishedEndpointUrl", cxfEndpoint.getPublishedEndpointUrl()); } final MessageObserver originalOutFaultObserver = server.getEndpoint().getOutFaultObserver(); server.getEndpoint().setOutFaultObserver(message -> { originalOutFaultObserver.onMessage(message); CxfUtils.closeCamelUnitOfWork(message); }); // setup the UnitOfWorkCloserInterceptor for OneWayMessageProcessor server.getEndpoint().getInInterceptors().add(new UnitOfWorkCloserInterceptor(Phase.POST_INVOKE, true)); // close the UnitOfWork normally server.getEndpoint().getOutInterceptors().add(new UnitOfWorkCloserInterceptor()); return server; }