#java #web-services #rest #servlets #jboss
#java #веб-службы #rest #сервлеты #jboss
Вопрос:
У меня есть сервер и клиент, где я пытаюсь загрузить файл с клиента на сервер, и я получаю следующую ошибку: Response: Internal Server Error
Ниже приведен мой код
public static void main(String[] args) throws FileNotFoundException{
try{
ClientConfig config = new DefaultClientConfig();
config.getClasses().add(MultiPartWriter.class);
Client client = Client.create(config);
WebResource resource = client.resource("http://localhost:8080/de.ServerReceiver/rest/upload");
File f = new File("C:/1.txt");
FileInputStream fs = new FileInputStream(f);
byte[] con = new byte[(int)f.length()];
fs.read(con);
FormDataMultiPart form1 = new FormDataMultiPart();
FormDataBodyPart fdp = new FormDataBodyPart("content", MediaType.MULTIPART_FORM_DATA);
form1.bodyPart(fdp);
String response = resource.type(MediaType.MULTIPART_FORM_DATA).post(String.class, form1);
}
catch (Exception e) { e.printStackTrace();
}
}
}
Сервер:
@Path("/upload")
public class Server {
private static final String SERVER_UPLOAD_LOCATION_FOLDER = "C://";
@POST
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response uploadFile(
@FormDataParam("file") InputStream fileInputStream,
@FormDataParam("file") FormDataContentDisposition contentDispositionHeader) {
String filePath = "C://" contentDispositionHeader.getFileName();
// save the file to the server
saveFile(fileInputStream, filePath);
String output = "File saved to server location : " filePath;
return Response.status(200).entity(output).build();
}
// save uploaded file to a defined location on the server
private void saveFile(InputStream uploadedInputStream, String serverLocation) {
try {
OutputStream outpuStream = new FileOutputStream(new File(serverLocation));
int read = 0;
byte[] bytes = new byte[1024];
outpuStream = new FileOutputStream(new File(serverLocation));
while ((read = uploadedInputStream.read(bytes)) != -1) {
outpuStream.write(bytes, 0, read);
}
outpuStream.flush();
outpuStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Вот web.xml , как вы можете видеть, я установил URL-шаблон в /rest/*
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>de.ServerReceiver</display-name>
<servlet>
<servlet-name>Jersey REST Service</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>de.ServerReceiver</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Jersey REST Service</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
</web-app>
Клиент пытается подключиться к серверу, используя следующий uri: 'http://localhost:8080/de.ServerReceiver/rest/upload'
Я получаю следующую ошибку :
sdadacom.sun.jersey.api.client.UniformInterfaceException: POST http://localhost:8080/de.ServerReceiver/rest/upload returned a response status of 500 Internal Server Error
at com.sun.jersey.api.client.WebResource.handle(WebResource.java:688)
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 de.ClientSide.ClientSide.main(ClientSide.java:82)
Пожалуйста, помогите мне.
Спасибо
Комментарии:
1. Проверьте журнал. Причина ошибки сервера регистрируется там.
Ответ №1:
Если вы сделаете это:
outpuStream = new FileOutputStream(new File("C://"));
Это означает, что вы хотите сохранить полученный файл как «C: //», что не имеет смысла, потому что «C: //» — это каталог, а не файл.
Комментарии:
1. Вы правы в этом, я исправил это, но проблема все еще остается. Я не могу подключиться к серверу
2. Пожалуйста, обновите вопрос новой ошибкой, которую вы видите. Есть ли у вас трассировка стека исключений на стороне сервера?
3. Ошибка та же. В клиентской части, если вы проверяете, у меня есть это: System.out.println(«Ответ: » clientResp.getClientResponseStatus()); … Выводится следующее: Ответ: внутренняя ошибка сервера… Я не могу подключиться к серверу.
4. Можно ли распечатать содержимое переменной
serverLocation
вsaveFile
методе?5. Поскольку это строка, да, я делал это много раз. Я изменил часть клиента и обновил сообщение с ошибкой. Ошибка находится в конце