Попытка создать веб-сервис для загрузки файла - Джерси со встроенной Jetty

Я пытаюсь создать веб-сервис с помощью Maven. Я использовал DarchetypeArtifactId=maven-archetype-quickstart, и я создал экземпляры пристани в основном классе, и это работает

package com.rest.test;

import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHolder;

public class App {
    public static void main(String[] args) throws Exception {
        ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
        context.setContextPath("/");

        Server jettyServer = new Server(8080);
        jettyServer.setHandler(context);

        ServletHolder jerseyServlet = context.addServlet(
             org.glassfish.jersey.servlet.ServletContainer.class, "/*");
        jerseyServlet.setInitOrder(0);

        // Tells the Jersey Servlet which REST service/class to load.
        jerseyServlet.setInitParameter(
           "jersey.config.server.provider.classnames",
           UploadFileService.class.getCanonicalName());

        try {
            jettyServer.start();`enter code here`
            jettyServer.join();
        } finally {
            jettyServer.destroy();
        }
    }
}

проблема связана с кодом в классе UploadFileService, какой пакет класса или зависимости я должен использовать?

Я пытался с "jersey-multipart.jar", но у меня был конфликт зависимости с Jetty.
Я также пытался использовать Servlet 3.0 API, но не смог заставить его работать со встроенным причалом.

Я нашел несколько примеров:

Попытка загрузить файл на сервер JAX-RS (джерси) - отличный пример, но это для сервера джерси

http://www.codejava.net/java-ee/servlet/java-file-upload-example-with-servlet-30-api - отличный пример, но это для сервера Tomcat

http://examples.javacodegeeks.com/enterprise-java/rest/jersey/jersey-file-upload-example/ - отличный пример, но это для веб-приложения

Я действительно ценю, если кто-нибудь может оказать какую-либо помощь или любую мелочь.

Заранее спасибо!

Примечание: он был помечен как дубликат peeskillet, ЭТО НЕ ДУБЛИРОВАНО! MULTIPART_FORM_DATA: не найден источник инъекции для параметра типа public javax.ws.rs.core.Response использует tomcat, и мой вопрос касается встроенной пристани. Единственное совпадение - это имя класса UploadFileService.class


всем привет

Я изменил класс, теперь у меня есть два класса JettyServer, где я устанавливаю сервер и UploadFile, где я пытаюсь управлять POST

package com.rest.test.restprj;

import org.eclipse.jetty.server.Handler;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.handler.DefaultHandler;
import org.eclipse.jetty.server.handler.HandlerList;
import org.eclipse.jetty.server.handler.ResourceHandler;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHolder;
import org.glassfish.jersey.server.ServerProperties;

public class JettyServer
{
public static void main(String[] args) throws Exception
{

    Server jettyServer = new Server(8080);

    // Create the ResourceHandler. It is the object that will actually handle the request for a given file. It is
    // a Jetty Handler object so it is suitable for chaining with other handlers as you will see in other examples.

    ResourceHandler resource_handler = new ResourceHandler();

    // Configure the ResourceHandler. Setting the resource base indicates where the files should be served out of.
    // In this example it is the current directory but it can be configured to anything that the jvm has access to.
    resource_handler.setDirectoriesListed(true);
    resource_handler.setWelcomeFiles(new String[]{ "./html/index.html" });
    resource_handler.setResourceBase(".");

    //Jersey ServletContextHandler


    ServletContextHandler servletContextHandler = new ServletContextHandler(ServletContextHandler.SESSIONS);
    ServletHolder jerseyServlet = servletContextHandler.addServlet(org.glassfish.jersey.servlet.ServletContainer.class, "/*");
    jerseyServlet.setInitParameter(ServerProperties.PROVIDER_PACKAGES, "com.rest.test.restprj");

    // Add the ResourceHandler to the server.
    HandlerList handlers = new HandlerList();
    handlers.setHandlers(new Handler[] { resource_handler, servletContextHandler, new DefaultHandler() });
    jettyServer.setHandler(handlers);

    try {
        jettyServer.start();
        jettyServer.join();
    } finally {
        jettyServer.destroy();
    }
}
}

Кажется, все в порядке с вышеуказанным классом. Но я запутался, что мне нужно, чтобы зарегистрировать MultiPartFeature. Я получил ошибку:

SEVERE: обнаружены следующие проблемы: ПРЕДУПРЕЖДЕНИЕ: не найден источник внедрения для параметра типа public javax.ws.rs.core.Response com.rest.test.restprj.UploadFile.postMsg(java.io.InputStream,org.glassfish.jersey.media.multipart.FormDataContentDisposition) создает исключение java.lang.Exception с индексом 0.

@Path("/fileUpload")
public class UploadFile {

    @POST
    //@Consumes("multipart/form-data")
    //@Consumes("image/jpeg")
    @Produces("text/plain")
    @Consumes(MediaType.MULTIPART_FORM_DATA)
    public Response postMsg (
            @FormDataParam("file") InputStream stream,
            @FormDataParam("file") FormDataContentDisposition fileDetail) throws Exception {


        String uploadedFileLocation = "./" + fileDetail.getFileName();


        // save it
        writeToFile(stream, uploadedFileLocation);

        String output = "File uploaded to : " + uploadedFileLocation;

        final Application application = new ResourceConfig()
                .packages("org.glassfish.jersey.examples.multipart")
                .register(MultiPartFeature.class);

        return Response.status(200).entity(output).type(MediaType.TEXT_PLAIN).build();

}

    private void writeToFile(InputStream uploadedInputStream,
            String uploadedFileLocation) {

            try {
                OutputStream out = new FileOutputStream(new File(
                        uploadedFileLocation));
                int read = 0;
                byte[] bytes = new byte[1024];

                out = new FileOutputStream(new File(uploadedFileLocation));
                while ((read = uploadedInputStream.read(bytes)) != -1) {
                    out.write(bytes, 0, read);
                }
                out.flush();
                out.close();
            } catch (IOException e) {

                e.printStackTrace();
            }

        }

} 

0 ответов

Другие вопросы по тегам