public Server publish(final Endpoint endpoint, final Bus bus, final boolean cdiPresent) {
final Class<?> clazz = endpoint.getImplementationClass();
final String url = endpoint.getUrl();
Stream.of(clazz.getDeclaredFields())
.filter(f -> f.getType() == WebServiceContext.class)
.forEach(f -> injectWebServiceResource(f, clazz));
final Object targetBean = getBean(clazz, cdiPresent);
AnnotationHandlerChainBuilder builder = new AnnotationHandlerChainBuilder(bus);
InjectionHelper.injectWebServiceContext(targetBean, KumuluzWebServiceContext.getInstance());
final Invoker invoker = new KumuluzWSInvoker(clazz, targetBean);
final JaxWsServerFactoryBean fb = new JaxWsServerFactoryBean();
fb.setBlockPostConstruct(true);
fb.setAddress(url);
fb.setBus(bus);
fb.setServiceClass(clazz);
fb.setInvoker(invoker);
fb.setHandlers(builder.buildHandlerChainFromClass(clazz, fb.getEndpointName(), fb.getServiceName(), fb.getBindingId()));
if (endpoint.wsdlLocation() != null) {
fb.setWsdlLocation(endpoint.wsdlLocation());
}
Server server = fb.create();
LOG.info("Webservice endpoint published with address=" + fb.getAddress() +
", wsdlLocation=" + fb.getWsdlURL() +
", implementor=" + clazz.getName() +
", serviceName=" + endpoint.serviceName() +
", portName=" + endpoint.portName());
return server;
}