Search in sources :

Example 1 with ServiceInfo

use of org.apache.openejb.assembler.classic.ServiceInfo in project tomee by apache.

the class WebServiceInjectionConfigurator method createServiceInfos.

private List<ServiceInfo> createServiceInfos(final Properties properties) {
    final OpenEjbConfiguration config = SystemInstance.get().getComponent(OpenEjbConfiguration.class);
    final List<ServiceInfo> services = new ArrayList<>(config.facilities != null && config.facilities.services != null ? config.facilities.services : Collections.<ServiceInfo>emptyList());
    services.addAll(getServices(properties));
    return services;
}
Also used : ServiceInfo(org.apache.openejb.assembler.classic.ServiceInfo) ArrayList(java.util.ArrayList) OpenEjbConfiguration(org.apache.openejb.assembler.classic.OpenEjbConfiguration)

Example 2 with ServiceInfo

use of org.apache.openejb.assembler.classic.ServiceInfo in project tomee by apache.

the class WebServiceInjectionConfigurator method getServices.

private Collection<ServiceInfo> getServices(final Properties properties) {
    final ConfigurationFactory cf = SystemInstance.get().getComponent(ConfigurationFactory.class);
    if (cf == null || !ConfigurationFactory.class.isInstance(cf)) {
        return Collections.emptyList();
    }
    final Openejb openejb = new Openejb();
    ConfigurationFactory.fillOpenEjb(openejb, properties);
    final List<Service> services = openejb.getServices();
    if (services.isEmpty()) {
        return Collections.emptyList();
    }
    final Collection<ServiceInfo> info = new ArrayList<>(services.size());
    for (final Service s : services) {
        final String prefix = s.getId() + ".";
        for (final String key : properties.stringPropertyNames()) {
            if (key.startsWith(prefix)) {
                s.getProperties().put(key.substring(prefix.length()), properties.getProperty(key));
            }
        }
        try {
            info.add(cf.configureService(s, ServiceInfo.class));
        } catch (final OpenEJBException e) {
            throw new IllegalArgumentException(e);
        }
    }
    return info;
}
Also used : ServiceInfo(org.apache.openejb.assembler.classic.ServiceInfo) OpenEJBException(org.apache.openejb.OpenEJBException) ConfigurationFactory(org.apache.openejb.config.ConfigurationFactory) ArrayList(java.util.ArrayList) Service(org.apache.openejb.config.sys.Service) Openejb(org.apache.openejb.config.sys.Openejb)

Example 3 with ServiceInfo

use of org.apache.openejb.assembler.classic.ServiceInfo in project tomee by apache.

the class CxfRsHttpListener method configureFactory.

private void configureFactory(final Collection<Object> givenAdditionalProviders, final ServiceConfiguration serviceConfiguration, final JAXRSServerFactoryBean factory, final WebBeansContext ctx) {
    if (!"true".equalsIgnoreCase(SystemInstance.get().getProperty("openejb.cxf.rs.skip-provider-sorting", "false"))) {
        final Comparator<?> providerComparator = findProviderComparator(serviceConfiguration, ctx);
        if (providerComparator != null) {
            factory.setProviderComparator(providerComparator);
        }
    }
    CxfUtil.configureEndpoint(factory, serviceConfiguration, CXF_JAXRS_PREFIX);
    boolean enforceCxfBvalMapper = false;
    if (ctx == null || !ctx.getBeanManagerImpl().isInUse()) {
        // activate bval
        boolean bvalActive = Boolean.parseBoolean(SystemInstance.get().getProperty("openejb.cxf.rs.bval.active", serviceConfiguration.getProperties().getProperty(CXF_JAXRS_PREFIX + "bval.active", "true")));
        if (factory.getFeatures() == null && bvalActive) {
            factory.setFeatures(new ArrayList<Feature>());
        } else if (bvalActive) {
            // check we should activate it and user didn't configure it
            for (final Feature f : factory.getFeatures()) {
                if (BeanValidationFeature.class.isInstance(f)) {
                    bvalActive = false;
                    break;
                }
            }
            for (final Interceptor<?> i : factory.getInInterceptors()) {
                if (BeanValidationInInterceptor.class.isInstance(i)) {
                    bvalActive = false;
                    break;
                }
            }
            for (final Interceptor<?> i : factory.getOutInterceptors()) {
                if (BeanValidationOutInterceptor.class.isInstance(i)) {
                    bvalActive = false;
                    break;
                }
            }
        }
        if (bvalActive) {
            // bval doesn't need the actual instance so faking it to avoid to lookup the bean
            final BeanValidationProvider provider = new BeanValidationProvider();
            final BeanValidationInInterceptor in = new JAXRSBeanValidationInInterceptor() {

                @Override
                protected Object getServiceObject(final Message message) {
                    return CxfRsHttpListener.this.getServiceObject(message);
                }
            };
            in.setProvider(provider);
            in.setServiceObject(FAKE_SERVICE_OBJECT);
            factory.getInInterceptors().add(in);
            final BeanValidationOutInterceptor out = new JAXRSBeanValidationOutInterceptor() {

                @Override
                protected Object getServiceObject(final Message message) {
                    return CxfRsHttpListener.this.getServiceObject(message);
                }
            };
            out.setProvider(provider);
            out.setServiceObject(FAKE_SERVICE_OBJECT);
            factory.getOutInterceptors().add(out);
            // and add a mapper to get back a 400 like for bval
            enforceCxfBvalMapper = true;
        }
    }
    final Collection<ServiceInfo> services = serviceConfiguration.getAvailableServices();
    final String staticSubresourceResolution = serviceConfiguration.getProperties().getProperty(CXF_JAXRS_PREFIX + STATIC_SUB_RESOURCE_RESOLUTION_KEY);
    if (staticSubresourceResolution != null) {
        factory.setStaticSubresourceResolution("true".equalsIgnoreCase(staticSubresourceResolution));
    }
    // resource comparator
    final String resourceComparator = serviceConfiguration.getProperties().getProperty(RESOURCE_COMPARATOR_KEY);
    if (resourceComparator != null) {
        try {
            ResourceComparator instance = (ResourceComparator) ServiceInfos.resolve(services, resourceComparator);
            if (instance == null) {
                instance = (ResourceComparator) Thread.currentThread().getContextClassLoader().loadClass(resourceComparator).newInstance();
            }
            factory.setResourceComparator(instance);
        } catch (final Exception e) {
            LOGGER.error("Can't create the resource comparator " + resourceComparator, e);
        }
    }
    // static resources
    final String staticResources = serviceConfiguration.getProperties().getProperty(STATIC_RESOURCE_KEY);
    if (staticResources != null) {
        final String[] resources = staticResources.split(",");
        for (final String r : resources) {
            final String trimmed = r.trim();
            if (!trimmed.isEmpty()) {
                staticResourcesList.add(Pattern.compile(trimmed));
            }
        }
    }
    // providers
    Set<String> providersConfig = null;
    {
        final String provider = serviceConfiguration.getProperties().getProperty(PROVIDERS_KEY);
        if (provider != null) {
            providersConfig = new HashSet<>();
            for (final String p : Arrays.asList(provider.split(","))) {
                providersConfig.add(p.trim());
            }
        }
        {
            if (GLOBAL_PROVIDERS != null) {
                if (providersConfig == null) {
                    providersConfig = new HashSet<>();
                }
                providersConfig.addAll(Arrays.asList(GLOBAL_PROVIDERS.split(",")));
            }
        }
    }
    // another property to configure the scanning of providers but this one is consistent with current cxf config
    // the other one is more generic but need another file
    final String key = CXF_JAXRS_PREFIX + "skip-provider-scanning";
    final boolean ignoreAutoProviders = "true".equalsIgnoreCase(SystemInstance.get().getProperty(key, serviceConfiguration.getProperties().getProperty(key, "false")));
    final Collection<Object> additionalProviders = ignoreAutoProviders ? Collections.emptyList() : givenAdditionalProviders;
    List<Object> providers = null;
    if (providersConfig != null) {
        providers = ServiceInfos.resolve(services, providersConfig.toArray(new String[providersConfig.size()]), OpenEJBProviderFactory.INSTANCE);
        if (providers != null && additionalProviders != null && !additionalProviders.isEmpty()) {
            providers.addAll(providers(serviceConfiguration.getAvailableServices(), additionalProviders, ctx));
        }
    }
    if (providers == null) {
        providers = new ArrayList<>(4);
        if (additionalProviders != null && !additionalProviders.isEmpty()) {
            providers.addAll(providers(serviceConfiguration.getAvailableServices(), additionalProviders, ctx));
        }
    }
    if (!ignoreAutoProviders) {
        addMandatoryProviders(providers, serviceConfiguration);
        if (enforceCxfBvalMapper) {
            if (!shouldSkipProvider(CxfResponseValidationExceptionMapper.class.getName())) {
                providers.add(new CxfResponseValidationExceptionMapper());
            }
        }
    }
    SystemInstance.get().fireEvent(new ExtensionProviderRegistration(AppFinder.findAppContextOrWeb(Thread.currentThread().getContextClassLoader(), AppFinder.AppContextTransformer.INSTANCE), providers));
    if (!providers.isEmpty()) {
        factory.setProviders(providers);
    }
}
Also used : Message(org.apache.cxf.message.Message) JAXRSBeanValidationOutInterceptor(org.apache.cxf.jaxrs.validation.JAXRSBeanValidationOutInterceptor) BeanValidationFeature(org.apache.cxf.validation.BeanValidationFeature) Feature(org.apache.cxf.feature.Feature) EJBRestServiceInfo(org.apache.openejb.server.rest.EJBRestServiceInfo) ServiceInfo(org.apache.openejb.assembler.classic.ServiceInfo) JAXRSBeanValidationOutInterceptor(org.apache.cxf.jaxrs.validation.JAXRSBeanValidationOutInterceptor) Interceptor(org.apache.cxf.interceptor.Interceptor) BeanValidationInInterceptor(org.apache.cxf.validation.BeanValidationInInterceptor) JAXRSBeanValidationInInterceptor(org.apache.cxf.jaxrs.validation.JAXRSBeanValidationInInterceptor) BeanValidationOutInterceptor(org.apache.cxf.validation.BeanValidationOutInterceptor) LinkedHashSet(java.util.LinkedHashSet) HashSet(java.util.HashSet) BeanValidationFeature(org.apache.cxf.validation.BeanValidationFeature) BeanValidationInInterceptor(org.apache.cxf.validation.BeanValidationInInterceptor) JAXRSBeanValidationInInterceptor(org.apache.cxf.jaxrs.validation.JAXRSBeanValidationInInterceptor) ResourceComparator(org.apache.cxf.jaxrs.ext.ResourceComparator) JAXRSBeanValidationInInterceptor(org.apache.cxf.jaxrs.validation.JAXRSBeanValidationInInterceptor) ResponseConstraintViolationException(org.apache.cxf.validation.ResponseConstraintViolationException) IOException(java.io.IOException) EndpointException(org.apache.cxf.endpoint.EndpointException) ServletException(javax.servlet.ServletException) BusException(org.apache.cxf.BusException) BeanValidationProvider(org.apache.cxf.validation.BeanValidationProvider) JAXRSBeanValidationOutInterceptor(org.apache.cxf.jaxrs.validation.JAXRSBeanValidationOutInterceptor) BeanValidationOutInterceptor(org.apache.cxf.validation.BeanValidationOutInterceptor) ExtensionProviderRegistration(org.apache.openejb.server.cxf.rs.event.ExtensionProviderRegistration)

Example 4 with ServiceInfo

use of org.apache.openejb.assembler.classic.ServiceInfo in project tomee by apache.

the class CxfUtil method configureEndpoint.

public static void configureEndpoint(final AbstractEndpointFactory svrFactory, final ServiceConfiguration configuration, final String prefix) {
    final Properties beanConfig = configuration.getProperties();
    if (beanConfig == null || beanConfig.isEmpty()) {
        return;
    }
    final Collection<ServiceInfo> availableServices = configuration.getAvailableServices();
    // endpoint properties
    final Properties properties = ServiceInfos.serviceProperties(availableServices, beanConfig.getProperty(prefix + ENDPOINT_PROPERTIES));
    if (properties != null) {
        svrFactory.setProperties(PropertiesHelper.map(properties));
    }
    final String debugKey = prefix + DEBUG;
    if ("true".equalsIgnoreCase(beanConfig.getProperty(debugKey, SystemInstance.get().getOptions().get(debugKey, "false")))) {
        svrFactory.getProperties(true).put("faultStackTraceEnabled", "true");
    }
    // endpoint features
    final String featuresIds = beanConfig.getProperty(prefix + FEATURES);
    if (featuresIds != null) {
        final List<? extends Feature> features = createFeatures(availableServices, featuresIds);
        svrFactory.setFeatures(features);
    }
    configureInterceptors(svrFactory, prefix, availableServices, beanConfig);
    // databinding
    final String databinding = beanConfig.getProperty(prefix + DATABINDING);
    if (databinding != null && !databinding.trim().isEmpty()) {
        Object instance = ServiceInfos.resolve(availableServices, databinding);
        if (instance == null) {
            // maybe id == classname
            try {
                instance = Thread.currentThread().getContextClassLoader().loadClass(databinding).newInstance();
            } catch (Exception e) {
            // ignore
            }
        }
        if (!DataBinding.class.isInstance(instance)) {
            throw new OpenEJBRuntimeException(instance + " is not a " + DataBinding.class.getName() + ", please check configuration of service [id=" + databinding + "]");
        }
        svrFactory.setDataBinding((DataBinding) instance);
    }
    // address: easier than using openejb-jar.xml
    final String changedAddress = beanConfig.getProperty(prefix + ADDRESS);
    if (changedAddress != null && !changedAddress.trim().isEmpty()) {
        svrFactory.setAddress(changedAddress);
    }
    // published url
    final String publishedUrl = beanConfig.getProperty(prefix + PUBLISHED_URL);
    if (publishedUrl != null && !publishedUrl.trim().isEmpty()) {
        svrFactory.setPublishedEndpointUrl(publishedUrl);
    }
}
Also used : ServiceInfo(org.apache.openejb.assembler.classic.ServiceInfo) OpenEJBRuntimeException(org.apache.openejb.OpenEJBRuntimeException) DataBinding(org.apache.cxf.databinding.DataBinding) Properties(java.util.Properties) OpenEJBRuntimeException(org.apache.openejb.OpenEJBRuntimeException)

Example 5 with ServiceInfo

use of org.apache.openejb.assembler.classic.ServiceInfo in project tomee by apache.

the class CxfEndpoint method configureService.

protected static JaxWsServiceFactoryBean configureService(final JaxWsServiceFactoryBean serviceFactory, final ServiceConfiguration configuration, final String prefix) {
    final Properties beanConfig = configuration.getProperties();
    if (beanConfig == null || beanConfig.isEmpty()) {
        return serviceFactory;
    }
    final Collection<ServiceInfo> availableServices = configuration.getAvailableServices();
    // databinding
    final String databinding = beanConfig.getProperty(prefix + CxfUtil.DATABINDING);
    if (databinding != null && !databinding.trim().isEmpty()) {
        Object instance = ServiceInfos.resolve(availableServices, databinding);
        if (instance == null) {
            // maybe id == classname
            try {
                instance = Thread.currentThread().getContextClassLoader().loadClass(databinding).newInstance();
            } catch (Exception e) {
            // ignore
            }
        }
        if (!DataBinding.class.isInstance(instance)) {
            throw new OpenEJBRuntimeException(instance + " is not a " + DataBinding.class.getName() + ", please check configuration of service [id=" + databinding + "]");
        }
        serviceFactory.setDataBinding((DataBinding) instance);
    }
    final String wsFeatures = beanConfig.getProperty(prefix + "wsFeatures");
    if (wsFeatures != null) {
        final Collection<Object> instances = ServiceInfos.resolve(availableServices, wsFeatures.split(" *, *"));
        if (instances != null && !instances.isEmpty()) {
            final List<WebServiceFeature> features = new ArrayList<>(instances.size());
            for (final Object i : instances) {
                if (!WebServiceFeature.class.isInstance(i)) {
                    throw new IllegalArgumentException("Not a WebServiceFeature: " + i);
                }
                features.add(WebServiceFeature.class.cast(i));
            }
            serviceFactory.setWsFeatures(features);
        }
    }
    return serviceFactory;
}
Also used : ArrayList(java.util.ArrayList) Properties(java.util.Properties) OpenEJBRuntimeException(org.apache.openejb.OpenEJBRuntimeException) ServiceInfo(org.apache.openejb.assembler.classic.ServiceInfo) OpenEJBRuntimeException(org.apache.openejb.OpenEJBRuntimeException) DataBinding(org.apache.cxf.databinding.DataBinding) WebServiceFeature(javax.xml.ws.WebServiceFeature)

Aggregations

ServiceInfo (org.apache.openejb.assembler.classic.ServiceInfo)12 ArrayList (java.util.ArrayList)4 Properties (java.util.Properties)4 OpenEjbConfiguration (org.apache.openejb.assembler.classic.OpenEjbConfiguration)4 DataBinding (org.apache.cxf.databinding.DataBinding)2 Feature (org.apache.cxf.feature.Feature)2 OpenEJBException (org.apache.openejb.OpenEJBException)2 OpenEJBRuntimeException (org.apache.openejb.OpenEJBRuntimeException)2 SecurityServiceInfo (org.apache.openejb.assembler.classic.SecurityServiceInfo)2 TransactionServiceInfo (org.apache.openejb.assembler.classic.TransactionServiceInfo)2 Service (org.apache.openejb.config.sys.Service)2 File (java.io.File)1 IOException (java.io.IOException)1 Date (java.util.Date)1 HashSet (java.util.HashSet)1 LinkedHashSet (java.util.LinkedHashSet)1 Map (java.util.Map)1 EJBContainer (javax.ejb.embeddable.EJBContainer)1 MBeanServer (javax.management.MBeanServer)1 ServletException (javax.servlet.ServletException)1