Apologies if I am not able to clearly state my problem but  I am already
using the debugger and that is why I came to realize that my model
validation is failing. I am looking forward to fix my annotation for apis
as I am repeatedly getting injection source not found error. Hence I shared
the annotated piece of my code.

Best,
Aniruddha
========

ᐧ

On Wed, May 19, 2021 at 1:50 PM Som Lima <somplastic...@gmail.com> wrote:

> If I was in your position  I would use the tools rather than staring at
> the issue. The Tool I am referring to is called a Debugger. With a debugger
> you can step through the code line by line. Observing the value changes.
> The debugger will help you identify where exactly the code is  breaking.
>
> Have you tried  using the debugger  ?
>
>
> On Wed, 19 May 2021, 21:23 Aniruddha Tekade via jersey-dev, <
> jersey-...@eclipse.org> wrote:
>
>> Hello Community,
>>
>> I have been stuck at this issue for a long time now and need help in
>> identifying what am I doing wrong.
>> I have Jetty 11 and Jersey 3.0.2 and Swagger-core 2.1.9. I am wondering
>> if any of the following are wrong in my project:
>>
>>    1. Jetty & Jersey integration
>>    2. Dependencies w.r.to Jetty and Jersey
>>    3. Annotations of API
>>
>> My control flow is as follows:
>>
>>    1. Created jetty server that has 128 queue size
>>    2. Created a jetty servlet holder
>>    3. Added Jersey servlet so intercept / scan all my API paths
>>    4. I use Jakarta namespace for this project (you can find in the
>>    bottommost gradle for the dependencies )
>>
>> But when I run the server with the above setting, I get:
>>
>>> Caused by: org.glassfish.jersey.server.model.ModelValidationException:
>>> Validation of the application resource model has failed during application
>>> initialization.
>>
>>
>> However, all my API calls are accessible without jersey or swagger
>> servlet added and I confirmed this by exercising them using python script
>> and also using postman. Now that I want to generate a swagger.json or
>> openapi.yaml for all my apis, I try to scan using jersey model as follows:
>>
>> // Setup API resources
>>> ServletHolder jersey =
>>> servletContextHandler.addServlet(ServletContainer.class, "/api/*");
>>> jersey.setInitOrder(1);
>>> jersey.setInitParameter("jersey.config.server.provider.packages",
>>> "com.cloudian.hfs.handlers;io.swagger.v3.jaxrs2.integration.resources");
>>
>>
>> Where com.cloudian.hfs.handlers contain all resource classes and apis.
>> What am I doing wrong? For detailed code:
>>
>> *Jersy and Jetty integration:*
>>
>> import com.cloudian.hfs.handlers.*;
>> import io.swagger.v3.jaxrs2.integration.OpenApiServlet;
>> import org.eclipse.jetty.server.HttpConfiguration;
>> import org.eclipse.jetty.server.HttpConnectionFactory;
>> import org.eclipse.jetty.server.Server;
>> import org.eclipse.jetty.server.ServerConnector;
>> import org.eclipse.jetty.server.handler.ContextHandler;
>> import org.eclipse.jetty.server.handler.ContextHandlerCollection;
>> import org.eclipse.jetty.util.thread.QueuedThreadPool;
>> import org.eclipse.jetty.servlet.ServletContextHandler;
>> import org.eclipse.jetty.servlet.ServletHolder;
>> import org.glassfish.jersey.servlet.ServletContainer;
>> import java.util.logging.Level;
>> import java.util.logging.Logger;
>>
>> public class StartHFS {
>>
>>     public static void main(String[] args) throws Exception {
>>         System.out.println("StartHFS");
>>
>>         // Create and configure a ThreadPool.
>>         QueuedThreadPool threadPool = new QueuedThreadPool();
>>         threadPool.setName("server");
>>
>>         // Create a Server instance.
>>         Server server = new Server(threadPool);
>>
>>         // HTTP configuration and connection factory.
>>         HttpConfiguration httpConfig = new HttpConfiguration();
>>         HttpConnectionFactory http11 = new
>> HttpConnectionFactory(httpConfig);
>>
>>         // Create a ServerConnector to accept connections from clients.
>>         ServerConnector connector = new ServerConnector(server, 1, 1,
>> http11);
>>         connector.setPort(8080);
>>         connector.setHost("0.0.0.0");
>>         connector.setAcceptQueueSize(128);
>>         server.addConnector(connector);
>>
>>         addHandlers(server);
>>
>>         // Start the Server so it starts accepting connections from
>> clients.
>>         try {
>>             server.start();
>>             server.join();
>>         } catch (Exception ex) {
>>             Logger.getLogger(StartHFS.class.getName()).log(Level.SEVERE,
>> "Fail to start HFS Server", ex);
>>         } finally {
>>             server.destroy();
>>         }
>>
>>         System.out.println("StartHFS DONE");
>>     }
>>
>> static void addHandlers(final Server server) throws Exception {
>>         ContextHandlerCollection contexts = new
>> ContextHandlerCollection();
>>         server.setHandler(contexts);
>>
>>         ContextHandler featureStoreHandler = new
>> ContextHandler("/featurestore");
>>         featureStoreHandler.setHandler(new FeatureStoreHandler());
>>         contexts.addHandler(featureStoreHandler);
>>
>>
>>         // Setup Jetty Servlet
>>         ServletContextHandler servletContextHandler = new
>> ServletContextHandler(ServletContextHandler.SESSIONS);
>>         servletContextHandler.setContextPath("/");
>>         contexts.addHandler(servletContextHandler);
>>
>>         // Setup API resources
>>         ServletHolder jersey =
>> servletContextHandler.addServlet(ServletContainer.class, "/api/*");
>>         jersey.setInitOrder(1);
>>         jersey.setInitParameter("jersey.config.server.provider.packages",
>> "com.cloudian.hfs.handlers;io.swagger.v3.jaxrs2.integration.resources");
>>
>>         // Expose API definition independently into yaml/json
>>         ServletHolder openApi =
>> servletContextHandler.addServlet(OpenApiServlet.class, "/openapi/*");
>>         openApi.setInitOrder(2);
>>
>> openApi.setInitParameter("openApi.configuration.resourcePackages",
>> "com.cloudian.handlers;io.swagger.sample.resource");
>>     }
>> }
>>
>> *Gradle Dependencies:*
>>
>> plugins {
>>     id 'java'
>>     id "io.swagger.core.v3.swagger-gradle-plugin" version "2.1.9"
>> }
>>
>> group 'com.cloudian'
>> version '1.0-SNAPSHOT'
>>
>> repositories {
>>     mavenCentral()
>> }
>>
>> dependencies {
>>     // Basic Gradle dependencies
>>     testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0'
>>     testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine'
>>
>>     // Logging dependencies
>>     runtimeOnly 'org.slf4j:slf4j-api:1.7.7'
>>     runtimeOnly 'org.slf4j:slf4j-log4j12:1.7.7'
>>
>>     // Jetty dependencies
>>     implementation 'org.eclipse.jetty:jetty-server:11.0.0'
>>     implementation 'org.eclipse.jetty:jetty-servlet:11.0.0'
>>     implementation 'org.eclipse.jetty:jetty-util:11.0.0'
>>
>>     // Jersey dependencies
>>     implementation
>> 'org.glassfish.jersey.containers:jersey-container-jetty-http:3.0.2'
>>     implementation
>> 'org.glassfish.jersey.containers:jersey-container-servlet-core:3.0.2'
>>     //    implementation 'org.glassfish.jersey.core:jersey-server:3.0.2'
>>     implementation
>> 'org.glassfish.jersey.media:jersey-media-json-binding:3.0.2'
>>     implementation 'org.glassfish.jersey.core:jersey-common:3.0.2'
>>     // Jetty and Jersey InjectionManagerFactory dependency [Required]
>>     implementation 'org.glassfish.jersey.inject:jersey-hk2:3.0.2'
>>     // Enable JAXBContext and WADL Jersey [Required]
>>     implementation 'org.glassfish.jaxb:jaxb-runtime:3.0.1'
>>
>>     // Redis & Json dependencies
>>     implementation 'org.springframework.data:spring-data-redis:2.4.3'
>>     implementation 'redis.clients:jedis:3.3.0'
>>     implementation group: 'org.json', name: 'json', version: '20201115'
>>
>>     // Swagger, Jakarta deps
>>     implementation 'org.apache.commons:commons-lang3:3.7'
>>     implementation 'io.swagger.core.v3:swagger-jaxrs2-jakarta:2.1.9'
>>     implementation 'jakarta.ws.rs:jakarta.ws.rs-api:3.0.0'
>>     implementation 'jakarta.servlet:jakarta.servlet-api:5.0.0'
>>     testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0'
>>     testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0'
>> }
>>
>> resolve {
>>     outputFileName = 'MyRestAPI'
>>     outputFormat = 'YAML'
>>     prettyPrint = 'TRUE'
>>     classpath = sourceSets.main.runtimeClasspath
>>     buildClasspath = classpath
>>     resourcePackages = ['io.test']
>>     outputDir = file('test')
>> }
>>
>> test {
>>     useJUnitPlatform()
>> }
>>
>> jar {
>>     manifest {
>>         attributes "Main-Class": "com.cloudian.hfs.StartHFS"
>>     }
>>
>>     from {
>>         configurations.compile.collect { it.isDirectory() ? it :
>> zipTree(it) }
>>     }
>> }
>>
>>
>> *Annotation of my APIs:*
>>
>> @Path("/featurestore/")
>> @Produces({"application/json", "application/xml"})
>> public class FeatureStoreHandler extends AbstractHandler {
>>
>>     // Some final CONSTANTS for api implementation
>>
>>     @Override
>>     public void handle(String target, Request jettyRequest,
>> HttpServletRequest request, HttpServletResponse response) throws
>> IOException {}
>>
>>     @POST
>>     @Path("/create")
>>     @Consumes("application/json")
>>     public void createFeatureGroup(@RequestBody Request jettyRequest,
>> @RequestBody HttpServletRequest request, HttpServletResponse response)
>> throws IOException, JSONException, JedisException {}
>>
>>     @DELETE
>>     @Path("/delete")
>>     @Consumes("application/json")
>>     public void deleteFeatureGroup(@RequestBody Request jettyRequest,
>> @RequestBody HttpServletRequest request, HttpServletResponse response)
>> throws IOException, JedisException, JSONException {}
>>
>>     @GET
>>     @Path("/describe")
>>     public void describeFeatureGroup(@RequestBody Request jettyRequest,
>> @RequestBody HttpServletRequest request, HttpServletResponse response)
>> throws IOException, JedisException, JSONException {}
>> }
>>
>>
>> Best,
>> Aniruddha
>> ========
>> ᐧ
>> _______________________________________________
>> jersey-dev mailing list
>> jersey-...@eclipse.org
>> To unsubscribe from this list, visit
>> https://www.eclipse.org/mailman/listinfo/jersey-dev
>>
>
_______________________________________________
jetty-users mailing list
jetty-users@eclipse.org
To unsubscribe from this list, visit 
https://www.eclipse.org/mailman/listinfo/jetty-users

Reply via email to