JAVA, JERSY POST-ING файлы на сервер и GET-ING файлы с сервера. Использование multiPart - PullRequest
0 голосов
/ 27 апреля 2020

Код:

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;

import javax.ws.rs.client.Entity;
import javax.ws.rs.core.MediaType;

import org.glassfish.jersey.client.ClientResponse;
import org.glassfish.jersey.media.multipart.MultiPart;
import org.glassfish.jersey.media.multipart.file.FileDataBodyPart;

import com.itz.passport.authentication.Int3DPassport;
import com.sun.jersey.api.client.*;
import com.sun.jersey.api.client.config.ClientConfig;
import com.sun.jersey.api.client.config.DefaultClientConfig;
import com.sun.jersey.multipart.impl.MultiPartWriter;

public class UploadFileRestClient {
    private WebResource webResource;
    private Client client;
    private String url = "http://development/server/resources/FileService";

    public UploadFileRestClient() {
        try {
            this.client = Client.create(new DefaultClientConfig());
            this.webResource = client.resource(url).path("/file");

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public ClientResponse upload() {
        try {
            Int3DPassport passportAut = new InPassport();
            String host = "http://development/server";
            String userName = "admin";
            String password = "xxxxx";
            String ticket = IntPassport.getTicket(host, userName, password);
            System.out.println("ticket:::::" + ticket);

            WebResource resource = this.webResource;
            MultiPart multiPart = new MultiPart();
            multiPart.setMediaType(MediaType.MULTIPART_FORM_DATA_TYPE);
            FileDataBodyPart fileDataBodyPart = new FileDataBodyPart("photo", new File("D://Documents//Test.txt"));
            multiPart.bodyPart(fileDataBodyPart);

            // here Iam getting error, return statement.
            return resource.path("upload"+ticket).type(MediaType.MULTIPART_FORM_DATA).post(ClientResponse.class, multiPart);

        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

}

Я получаю исключение при загрузке () в операторе возврата. таким образом, это собирается поймать и дать исключение нулевого указателя. Я погуглил на эту ошибку com.sun.jersey.api.client.ClientHandlerException и ничего не помогло решить мою ошибку. Я добавил mimepull.jar и jeresey-multipart.jar. Тем не менее проблема не решена.

com.sun.jersey.api.client.ClientHandlerException: com.sun.jersey.api.client.ClientHandlerException: A message body writer for Java type, class org.glassfish.jersey.media.multipart.MultiPart, and MIME media type, multipart/form-data, was not found
    at com.sun.jersey.client.urlconnection.URLConnectionClientHandler.handle(URLConnectionClientHandler.java:155)
    at com.sun.jersey.api.client.Client.handle(Client.java:652)
    at com.sun.jersey.api.client.WebResource.handle(WebResource.java:682)
    at com.sun.jersey.api.client.WebResource.access$200(WebResource.java:74)
    at com.sun.jersey.api.client.WebResource$Builder.post(WebResource.java:570)
    at Test.main.UploadFileRestClient.upload(UploadFileRestClient.java:66)
    at Test.main.Main.main(Main.java:38)
Caused by: com.sun.jersey.api.client.ClientHandlerException: A message body writer for Java type, class org.glassfish.jersey.media.multipart.MultiPart, and MIME media type, multipart/form-data, was not found
    at com.sun.jersey.api.client.RequestWriter.writeRequestEntity(RequestWriter.java:288)
    at com.sun.jersey.client.urlconnection.URLConnectionClientHandler._invoke(URLConnectionClientHandler.java:217)
    at com.sun.jersey.client.urlconnection.URLConnectionClientHandler.handle(URLConnectionClientHandler.java:153)
    ... 6 more
Exception in thread "main" java.lang.NullPointerException
    at Test.main.Main.main(Main.java:40)

Спасибо за помощь и предложения.

1 Ответ

0 голосов
/ 28 апреля 2020

в вашем сообщении об ошибке есть проблема, хотя если вы новичок в майке, может показаться немного крипти c. Ваш клиент в настоящее время не знает, как отобразить многочастные запросы.

Caused by: com.sun.jersey.api.client.ClientHandlerException: A message body writer for Java type, class org.glassfish.jersey.media.multipart.MultiPart, and MIME media type, multipart/form-data, was not found

Мне пришлось зарегистрировать материал mutipart в моем определении сервера ApplicationConfig, чтобы заставить его работать, например;

@Override
public Set<Class<?>> getClasses() 
{
    Set<Class<?>> resources = new java.util.HashSet<>();
    addRestResourceClasses(resources);
    resources.add(MultiPartFeature.class);
    return resources;
}

Чтение этого должно помочь вам решить вашу проблему.

, поэтому, возможно, посмотрите на

this.client = Client.create(new DefaultClientConfig());

и поэкспериментируйте с;

final Client client = ClientBuilder.newBuilder().register(MultiPartFeature.class).build();
...