Java 类javax.ws.rs.ApplicationPath 实例源码

项目:swagger-ui-integration    文件:AnnotationConfigurationReader.java   
private void applyConfigurationFromAnnotation(Map<Class<? extends Annotation>, String> annotatedClassMap, Configuration configuration, SwaggerUIConfiguration swaggerUIConfiguration) {
  configuration.setActive(swaggerUIConfiguration.active());
  configuration.setConfigurationFilename(swaggerUIConfiguration.configurationFilename());
  if (isNotEmpty(swaggerUIConfiguration.systemPropertyForExternalConfigurationFilename())) {
    configuration.setSystemPropertyForExternalConfigurationFilename(swaggerUIConfiguration.systemPropertyForExternalConfigurationFilename());
  }
  configuration.setHost(swaggerUIConfiguration.host());
  ApplicationPath applicationPath = getAnnotationFrom(annotatedClassMap, ApplicationPath.class);
  if (applicationPath != null) {
    try {
      configuration.setRestApplicationClass(classLoader.loadClass(annotatedClassMap.get(ApplicationPath.class)));
      configuration.setRestApplicationPath(applicationPath.value());
      configuration.setRestApplicationPackageAsRoot(swaggerUIConfiguration.restApplicationPackageAsRoot());
      if (configuration.isRestApplicationPackageAsRoot()) {
        configuration.setRestApplicationPackage(configuration.getRestApplicationClass().getPackage().getName());
      } else {
        configuration.setRestApplicationPackage(swaggerUIConfiguration.restApplicationPackage());
      }
    } catch (ClassNotFoundException e) {
      configuration.setRestApplicationClass(null);
    }
  }
  configuration.setApiDocPath(swaggerUIConfiguration.apiDocPath());
  configuration.setApiDocIndex(swaggerUIConfiguration.apiDocIndex());
}
项目:ozark    文件:OzarkContainerInitializer.java   
@Override
public void onStartup(Set<Class<?>> classes, ServletContext servletContext) throws ServletException {
    servletContext.setAttribute(OZARK_CONTROLLERS_FOUND, false);
    if (classes != null && !classes.isEmpty()) {
        LOG.log(Level.INFO, "Ozark version {0} started", getClass().getPackage().getImplementationVersion());
        for (Class<?> clazz : classes) {
            final ApplicationPath ap = getAnnotation(clazz, ApplicationPath.class);
            if (ap != null) {
                if (servletContext.getAttribute(APP_PATH_CONTEXT_KEY) != null) {
                    // must be a singleton
                    throw new IllegalStateException("More than one JAX-RS ApplicationPath detected!");
                }
                servletContext.setAttribute(APP_PATH_CONTEXT_KEY, ap.value());
            }
            if (hasAnnotationOnClassOrMethod(clazz, Path.class)
                    && hasAnnotationOnClassOrMethod(clazz, Controller.class)) {
                servletContext.setAttribute(OZARK_CONTROLLERS_FOUND, true);
            }
            if (servletContext.getAttribute(APP_PATH_CONTEXT_KEY) != null
                    && (Boolean) servletContext.getAttribute(OZARK_CONTROLLERS_FOUND) == true) {
                break;  // no need to loop further
            }
        }
    }
}
项目:java-restify    文件:JaxRsJavaTypeMetadata.java   
public JaxRsJavaTypeMetadata(Class<?> javaType) {
    isTrue(javaType.isInterface(), "Your type must be a Java interface.");
    isTrue(javaType.getInterfaces().length <= 1, "Only single inheritance is supported.");

    this.javaType = javaType;
    this.parent = javaType.getInterfaces().length == 1 ? new JaxRsJavaTypeMetadata(javaType.getInterfaces()[0]) : null;

    this.applicationPath = javaType.getAnnotation(ApplicationPath.class);
    this.path = javaType.getAnnotation(Path.class);

    isFalse(applicationPath != null && path != null,
            "Invalid use of the @Path and @ApplicationPath annotations at the top of the interface. Use only one.");

    this.consumes = javaType.getAnnotation(Consumes.class);
    this.produces = javaType.getAnnotation(Produces.class);
}
项目:tool.swagger.docgen    文件:SwaggerAnnotationsScanner.java   
private String getURLMappingFromApplication(Class<?> appClass) {
    ApplicationPath apath = appClass.getAnnotation(ApplicationPath.class);
    if (apath != null) {
        String urlMapping = apath.value();
        if (urlMapping == null || urlMapping.isEmpty() || urlMapping.equals("/")) {
            return "";
        }
        if (urlMapping != null && !urlMapping.startsWith("/")) {
            urlMapping = "/" + urlMapping;
        }
        return urlMapping;
    } 
    else {
        logger.finest("Didn't find @ApplicationPath in Application classs " + appClass.getName());
    }
    return null;
}
项目:jax-rs-linker    文件:ApplicationNameVisitor.java   
@Override
public Optional<String> visitType(TypeElement element, Void aVoid) {
    String servletName = element.getAnnotation(ExposedApplication.class).servletName();
    ApplicationPath applicationPath = element.getAnnotation(ApplicationPath.class);
    String applicationName = String.valueOf(element.getQualifiedName());
    if (!(applicationPath != null ^ !servletName.isEmpty())) {
        messager.printMessage(ERROR, INCONSISTENT_APPLICATION_MAPPING.format(applicationName), element);
        return absent();
    }

    if (applicationPath != null) {
        return Optional.of(applicationName);
    }

    return Optional.of(servletName);
}
项目:testee.fi    文件:RestServerImpl.java   
private ServletContextHandler createJerseyHandler(final HandlerCollection handlerCollection) {
    // http://nikgrozev.com/2014/10/16/rest-with-embedded-jetty-and-jersey-in-a-single-jar-step-by-step/
    final Set<Class<?>> managedClasses = collectAnnotated(JAX_RS_MANAGED_CLASSES);
    final ServletContextHandler context = initContext("/rest", managedClasses);
    handlerCollection.addHandler(context);
    final ResourceConfig config = initConfig(managedClasses);
    annotationScanner.scanFor(ApplicationPath.class).forEach(appClass -> {
        final String path = appClass.getAnnotation(ApplicationPath.class).value();
        final String pathSpec = (path.startsWith("/") ? "" : "/") + path + "/*";
        LOG.debug("Mapping rest application {} to {}", appClass.getName(), pathSpec);
        context.addServlet(new ServletHolder(new JerseyServlet(config)), pathSpec);
    });
    return context;
}
项目:apm-client    文件:HelloMain.java   
private String getPathSpec(Class<? extends Application> appClass) {
  ApplicationPath applicationPath = appClass.getAnnotation(ApplicationPath.class);
  StringBuilder pathSpec = new StringBuilder(applicationPath.value());
  if(pathSpec.length()==0 || pathSpec.charAt(pathSpec.length()-1)!='/') {
    pathSpec.append('/');
  }
  pathSpec.append('*');
  return pathSpec.toString();
}
项目:app-ms    文件:JaxRsRouter.java   
/**
 * Register the routes.
 *
 * @param applicationClass
 *            application class to get the root
 * @param router
 *            router to apply the changes to
 * @param pathsProvider
 *            provides a list of Path classes
 * @param jaxRsHandler
 *            route handler
 */
public void register(final Class<? extends Application> applicationClass,
    final Router router,
    final PathsProvider pathsProvider,
    final Handler<RoutingContext> jaxRsHandler) {

    final String rootPath = Optional.ofNullable(applicationClass.getAnnotation(ApplicationPath.class)).map(ApplicationPath::value).orElse("");

    final SortedSet<JaxRsPath> paths = new TreeSet<>();
    pathsProvider.getPathAnnotatedClasses().forEach(clazz -> {
        final String classPath = Optional.ofNullable(clazz.getAnnotation(Path.class)).map(Path::value).orElse("");
        stream(clazz.getMethods()).filter(m -> m.getAnnotation(GET.class) != null
            || m.getAnnotation(POST.class) != null
            || m.getAnnotation(PUT.class) != null
            || m.getAnnotation(DELETE.class) != null).forEach(m -> {
                final String path = Optional.ofNullable(m.getAnnotation(Path.class)).map(Path::value).orElse("");
                final String[] consumes = Optional.ofNullable(m.getAnnotation(Consumes.class)).map(Consumes::value).orElse(new String[0]);
                final String[] produces = Optional.ofNullable(m.getAnnotation(Produces.class)).map(Produces::value).orElse(new String[0]);

                paths.add(new JaxRsPath(UriBuilder.fromPath(rootPath).path(classPath).path(path).toTemplate(), consumes, produces, getHttpMethod(m)));

            });
    });
    paths.forEach(p -> {
        p.apply(router, jaxRsHandler, failureHandler);
        LOG.debug("route={}", p);
    });

}
项目:app-ms    文件:SwaggerHandler.java   
public SwaggerHandler(
    final Class<? extends Application> applicationClass) {

    final ApplicationPath annotation = applicationClass.getAnnotation(ApplicationPath.class);
    if (annotation != null) {
        baseUri = URI.create(annotation.value()).normalize();
    } else {
        baseUri = URI.create("/");
    }

    Application application;
    try {
        application = applicationClass.newInstance();
    } catch (InstantiationException
        | IllegalAccessException e) {
        throw new ExceptionInInitializerError(e);
    }

    swagger = new ClonableSwagger();
    final Reader swaggerReader = new Reader(swagger);
    final Set<Class<?>> resourceClasses = application.getClasses();
    if (resourceClasses.isEmpty()) {
        final String packageName = applicationClass.getPackage().getName();
        final Reflections reflections = new Reflections(packageName);
        reflections.getTypesAnnotatedWith(Api.class).forEach(swaggerReader::read);
        reflections.getTypesAnnotatedWith(SwaggerDefinition.class).forEach(swaggerReader::read);
    } else {
        swaggerReader.read(applicationClass);
        resourceClasses.forEach(swaggerReader::read);
    }

}
项目:holon-jaxrs    文件:ResteasyAutoConfiguration.java   
private void resolveApplicationPath() {
    if (StringUtils.hasLength(this.resteasy.getApplicationPath())) {
        this.path = parseApplicationPath(this.resteasy.getApplicationPath());
    } else {
        this.path = findApplicationPath(
                AnnotationUtils.findAnnotation(this.config.getClass(), ApplicationPath.class));
    }
}
项目:swagger-ui-integration    文件:AnnotationConfigurationReader.java   
@Override
protected Configuration readConfigurationFrom(Configuration configuration, ServletContext servletContext) {
  @SuppressWarnings("unchecked") Map<Class<? extends Annotation>, String> annotatedClassMap = new ByteCodeAnnotationScanner(servletContext, SwaggerUIConfiguration.class, ApplicationPath.class).get();
  if (annotatedClassMap.size() > 0) {
    classLoader = getClassLoader();
    return readConfiguration(annotatedClassMap, configuration);
  }
  return configuration;
}
项目:java-restify    文件:JaxRsJavaTypeMetadata.java   
private String[] allApplicationPaths() {
    ArrayList<String> applicationPaths = new ArrayList<>();

    Optional.ofNullable(parent)
        .map(p -> p.allApplicationPaths())
            .ifPresent(array -> Collections.addAll(applicationPaths, array));

    Optional.ofNullable(applicationPath).map(ApplicationPath::value)
        .ifPresent(p -> applicationPaths.add(p));

    return applicationPaths.toArray(new String[0]);
}
项目:https-github.com-g0t4-jenkins2-course-spring-boot    文件:JerseyAutoConfiguration.java   
private void resolveApplicationPath() {
    if (StringUtils.hasLength(this.jersey.getApplicationPath())) {
        this.path = parseApplicationPath(this.jersey.getApplicationPath());
    }
    else {
        this.path = findApplicationPath(AnnotationUtils
                .findAnnotation(this.config.getClass(), ApplicationPath.class));
    }
}
项目:https-github.com-g0t4-jenkins2-course-spring-boot    文件:JerseyAutoConfiguration.java   
private static String findApplicationPath(ApplicationPath annotation) {
    // Jersey doesn't like to be the default servlet, so map to /* as a fallback
    if (annotation == null) {
        return "/*";
    }
    return parseApplicationPath(annotation.value());
}
项目:jrestless    文件:ApplicationPathFilter.java   
private static String getApplicationPath(Application applicationConfig) {
    if (applicationConfig == null) {
        return null;
    }
    ApplicationPath ap = applicationConfig.getClass().getAnnotation(ApplicationPath.class);
    if (ap == null) {
        return null;
    }
    String applicationPath = ap.value();
    if (isBlank(applicationPath)) {
        return null;
    }
    while (applicationPath.startsWith("/")) {
        applicationPath = applicationPath.substring(1);
    }
    // support Servlet configs
    if (applicationPath.endsWith("/*")) {
        applicationPath = applicationPath.substring(0, applicationPath.length() - 2);
    }
    while (applicationPath.endsWith("/")) {
        applicationPath = applicationPath.substring(0, applicationPath.length() - 1);
    }
    if (isBlank(applicationPath)) {
        return null;
    }
    return applicationPath;
}
项目:zanata-mt    文件:MTApplicationTest.java   
@Test
public void testApplicationPath() {
    Class clazz = MTApplication.getClass();
    assertThat(clazz.isAnnotationPresent(ApplicationPath.class)).isTrue();

    ApplicationPath annotation =
            (ApplicationPath) clazz.getAnnotation(ApplicationPath.class);
    assertThat(annotation.value()).isEqualTo("api");
}
项目:spring-boot-concourse    文件:JerseyAutoConfiguration.java   
private void resolveApplicationPath() {
    if (StringUtils.hasLength(this.jersey.getApplicationPath())) {
        this.path = parseApplicationPath(this.jersey.getApplicationPath());
    }
    else {
        this.path = findApplicationPath(AnnotationUtils
                .findAnnotation(this.config.getClass(), ApplicationPath.class));
    }
}
项目:spring-boot-concourse    文件:JerseyAutoConfiguration.java   
private static String findApplicationPath(ApplicationPath annotation) {
    // Jersey doesn't like to be the default servlet, so map to /* as a fallback
    if (annotation == null) {
        return "/*";
    }
    return parseApplicationPath(annotation.value());
}
项目:sample.consulservicediscovery    文件:RestModule.java   
public RestModule(String host, int port, String contextRoot, WebAnnotations webAnnotations) {
    try {
        InfoStore infoStore = webAnnotations.getInfoStore();

        webAnnotations.openInfoStore();

        // Ignore all complexities like @Parent annotations for the moment,
        // and also inheritance.

        AnnotationTargets_Targets annotationTargets = webAnnotations.getAnnotationTargets();

        String applicationPath = "";
        Set<String> classesWithApplicationPath = annotationTargets
                .getAnnotatedClasses(ApplicationPath.class.getName(), POLICY_SEED);
        if (classesWithApplicationPath.size() == 0) {
            System.err.println("The REST application path must be set using annotations. ");
        } else if (classesWithApplicationPath.size() > 1) {
            System.err.println("There should only be one REST application path per application.");
        } else {
            applicationPath = getValue(infoStore, ApplicationPath.class,
                    classesWithApplicationPath.iterator().next());
        }

        // Scan annotation for @Provider, @Path
        processAnnotations(host, port, contextRoot, infoStore, annotationTargets, Provider.class, applicationPath);
        processAnnotations(host, port, contextRoot, infoStore, annotationTargets, Path.class, applicationPath);

    } catch (Exception e) {
        e.printStackTrace();
    }
}
项目:contestparser    文件:JerseyAutoConfiguration.java   
@PostConstruct
public void path() {
    if (StringUtils.hasLength(this.jersey.getApplicationPath())) {
        this.path = parseApplicationPath(this.jersey.getApplicationPath());
    }
    else {
        this.path = findApplicationPath(AnnotationUtils
                .findAnnotation(this.config.getClass(), ApplicationPath.class));
    }
}
项目:contestparser    文件:JerseyAutoConfiguration.java   
private static String findApplicationPath(ApplicationPath annotation) {
    // Jersey doesn't like to be the default servlet, so map to /* as a fallback
    if (annotation == null) {
        return "/*";
    }
    return parseApplicationPath(annotation.value());
}
项目:resteasy-spring-boot    文件:ResteasyEmbeddedServletInitializer.java   
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
    logger.debug("Post process bean factory has been called");

    findJaxrsApplications(beanFactory);

    // This is done by finding their related Spring beans
    findJaxrsResourcesAndProviderClasses(beanFactory);

    if (allResources.size() == 0) {
        logger.warn("No JAX-RS resource Spring beans have been found");
    }
    if (applications.size() == 0) {
        logger.info("No JAX-RS Application classes have been found. A default, one mapped to '/', will be registered.");
        registerDefaultJaxrsApp(beanFactory);
        return;
    }

    BeanDefinitionRegistry registry = (BeanDefinitionRegistry) beanFactory;

    for (Class<? extends Application> applicationClass : applications) {
        ApplicationPath path = AnnotationUtils.findAnnotation(applicationClass, ApplicationPath.class);
        if (path == null) {
            logger.warn("JAX-RS Application class {} has no ApplicationPath annotation, so it will not be registered", applicationClass.getName());
            continue;
        }

        logger.debug("registering JAX-RS application class " + applicationClass.getName());

        GenericBeanDefinition applicationServletBean = createApplicationServlet(applicationClass, path.value());
        registry.registerBeanDefinition(applicationClass.getName(), applicationServletBean);
    }

}
项目:typescript-generator    文件:JaxrsApplicationParser.java   
public Result tryParse(SourceType<?> sourceType) {
    if (!(sourceType.type instanceof Class<?>)) {
        return null;
    }
    final Class<?> cls = (Class<?>) sourceType.type;

    // application
    if (Application.class.isAssignableFrom(cls)) {
        final ApplicationPath applicationPathAnnotation = cls.getAnnotation(ApplicationPath.class);
        if (applicationPathAnnotation != null) {
            model.setApplicationPath(applicationPathAnnotation.value());
        }
        model.setApplicationName(cls.getSimpleName());
        final List<SourceType<Type>> discoveredTypes = JaxrsApplicationScanner.scanJaxrsApplication(cls, isClassNameExcluded);
        return new Result(discoveredTypes);
    }

    // resource
    final Path path = cls.getAnnotation(Path.class);
    if (path != null) {
        System.out.println("Parsing JAX-RS resource: " + cls.getName());
        final Result result = new Result();
        parseResource(result, new ResourceContext(cls, path.value()), cls);
        return result;
    }

    return null;
}
项目:jaxrs-unit    文件:JaxrsServer.java   
private static String getApplicationPath(Application application) {
    ApplicationPath applicationPath = application.getClass().getAnnotation(ApplicationPath.class);
    if (applicationPath == null) {
        throw new RuntimeException(application.getClass() + " must have an ApplicationPath annotation");
    }
    return "/" + applicationPath.value();
}
项目:hammock    文件:JerseyContainerConfigurator.java   
@Produces
public ServletDescriptor jerseyServlet() {
    String urlPattern = restServerConfiguration.getRestServletMapping();
    if (!applicationInstance.isUnsatisfied() && !applicationInstance.isAmbiguous()) {
        ApplicationPath annotation = ClassUtils.getAnnotation(applicationInstance.get().getClass(), ApplicationPath.class);
        if(annotation != null) {
            String path = annotation.value();
            urlPattern = path.endsWith("/") ? path + "*" : path + "/*";
        }
    }
    return new ServletDescriptor(SERVLET_NAME, null, new String[] { urlPattern }, 1, null, true, ServletContainer.class);
}
项目:hammock    文件:ResteasyServletContextAttributeProvider.java   
@Produces
public ServletDescriptor resteasyServlet() {
    String path = restServerConfiguration.getRestServerUri();
    if( !(applicationInstance.isUnsatisfied() || applicationInstance.isAmbiguous())) {
        ApplicationPath appPath = ClassUtils.getAnnotation(applicationInstance.get().getClass(), ApplicationPath.class);
        if(appPath != null) {
            path = appPath.value();
        }
    }
    String pattern = path.endsWith("/") ? path + "*" : path + "/*";
    WebInitParam param = new WebParam("resteasy.servlet.mapping.prefix", path);
    return new ServletDescriptor("ResteasyServlet",new String[]{pattern}, new String[]{pattern},
            1,new WebInitParam[]{param},true,HttpServlet30Dispatcher.class);
}
项目:restapidoc    文件:ClassPathScannerTest.java   
@Test
public void shouldFindApplicationPathAnnotatedClassInPackage() {
  ClassPathScanner scanner = new ClassPathScanner(PACKAGE_RESTAPIDOC_TEST);
  Set<Class<?>> classes = scanner.getClassesWithAnnotation(ApplicationPath.class);

  assertEquals(1, classes.size());

  for (Class<?> clazz : classes) {
    ApplicationPath annotation = clazz.getAnnotation(ApplicationPath.class);
    System.out.println(clazz + " path: " + annotation.value());
  }
}
项目:vest    文件:UriPathUtil.java   
/**
 * Retrieve the context from the provided {@link Application}'s {@link ApplicationPath}.
 *
 * @param application with a {@link ApplicationPath} annotation.
 * @return String of the path.
 */
public static String getApplicationContext(Application application) {

    final Class<?> clazz = application.getClass();
    final ApplicationPath applicationPath = clazz.getAnnotation(ApplicationPath.class);

    String path = (applicationPath == null) ? "/" :
        applicationPath.value();

    if(path.length() < 1) {
        return "/";
    } else {
        return path.charAt(0) == '/' ? path : "/" + path;
    }
}
项目:holon-jaxrs    文件:ResteasyAutoConfiguration.java   
private static String findApplicationPath(ApplicationPath annotation) {
    if (annotation == null) {
        return "/*";
    }
    return parseApplicationPath(annotation.value());
}
项目:eclipselink-example    文件:SampleResourceIT.java   
@Test
public void UnitOfWork_StateUnderTest_ExpectedBehavior0() throws Exception { // TODO should change method name
    if (log.isTraceEnabled()) {
        log.trace(String.format("url=%s", url.toString()));
    }
    String applicationPath = Application.class.getAnnotation(ApplicationPath.class).value().trim().replaceFirst("^/", "");
    if (log.isTraceEnabled()) {
        log.trace(String.format("applicationPath=%s", applicationPath));
    }
    try {
        // 1st request.
        ClientBuilder.newClient()
                .target(this.url.toURI())
                .path(applicationPath).path("samples")
                //.request(MediaType.APPLICATION_JSON)
                .request()
                .post(Entity.json(
                        Json.createObjectBuilder()
                                .add("id", 1L)
                                //.add("version", 0L)
                                .add("name", UUID.randomUUID().toString())
                                .build()
                ));
        JsonArray jsonArray1
                = ClientBuilder.newClient()
                        .target(this.url.toURI())
                        .path(applicationPath).path("samples")
                        //.request(MediaType.APPLICATION_JSON)
                        .request()
                        .accept(MediaType.APPLICATION_JSON)
                        .get(JsonArray.class);
        if (log.isTraceEnabled()) {
            log.trace(String.format("jsonArray1=%s", jsonArray1.toString()));
        }
        assertThat("", jsonArray1.size(), equalTo(1));
        // 2nd request.
        ClientBuilder.newClient()
                .target(this.url.toURI())
                .path(applicationPath).path("samples")
                //.request(MediaType.APPLICATION_JSON)
                .request()
                .post(Entity.json(
                        Json.createObjectBuilder()
                                .add("id", 2L)
                                //.add("version", 0L)
                                .add("name", UUID.randomUUID().toString())
                                .build()
                ));
        JsonArray jsonArray2
                = ClientBuilder.newClient()
                        .target(this.url.toURI())
                        .path(applicationPath).path("samples")
                        //.request(MediaType.APPLICATION_JSON)
                        .request()
                        .accept(MediaType.APPLICATION_JSON)
                        .get(JsonArray.class);
        if (log.isTraceEnabled()) {
            log.trace(String.format("jsonArray2=%s", jsonArray2.toString()));
        }
        assertThat("", jsonArray2.size(), equalTo(2));
    } catch (URISyntaxException cause) {
        throw new RuntimeException(cause);
    }
}
项目:jaxrs-analyzer    文件:ProjectAnalyzer.java   
private boolean isJAXRSRootResource(String className) {
    final Class<?> clazz = JavaUtils.loadClassFromName(className);
    return clazz != null && (isAnnotationPresent(clazz, javax.ws.rs.Path.class) || isAnnotationPresent(clazz, ApplicationPath.class));
}
项目:tomee    文件:RESTService.java   
private static String appPrefix(final WebAppInfo info, final Class<?> appClazz) {
    StringBuilder builder = null;

    // no annotation, try servlets
    for (final ServletInfo s : info.servlets) {
        if (s.mappings.isEmpty()) {
            continue;
        }

        String mapping = null;

        final String name = appClazz.getName();
        if (name.equals(s.servletClass) || name.equals(s.servletName) || "javax.ws.rs.core.Application ".equals(s.servletName)) {
            mapping = s.mappings.iterator().next();
        } else {
            for (final ParamValueInfo pvi : s.initParams) {
                if ("javax.ws.rs.Application".equals(pvi.name) || Application.class.getName().equals(pvi.name)) {
                    mapping = s.mappings.iterator().next();
                    break;
                }
            }
        }

        if (mapping != null) {
            if (mapping.endsWith("/*")) {
                mapping = mapping.substring(0, mapping.length() - 2);
            }
            if (mapping.startsWith("/")) {
                mapping = mapping.substring(1);
            }

            builder = new StringBuilder();
            builder.append(mapping);
            break;
        }
    }
    if (builder != null) { // https://issues.apache.org/jira/browse/CXF-5702
        return builder.toString();
    }

    // annotation
    final ApplicationPath path = appClazz.getAnnotation(ApplicationPath.class);
    if (path != null) {
        String appPath = path.value();
        if (appPath.endsWith("*")) {
            appPath = appPath.substring(0, appPath.length() - 1);
        }

        builder = new StringBuilder();
        if (appPath.startsWith("/")) {
            builder.append(appPath.substring(1));
        } else {
            builder.append(appPath);
        }
    }

    if (builder == null) {
        return null;
    }
    return builder.toString();
}