Tôi đang cố gắng đăng một số dữ liệu biểu mẫu bằng cách sử dụng javascript đối với Tài nguyên Jersey. Đây là javascript:Mẫu đơn đăng với Jersey MultiFormData - Null Pointer Exception
var form = document.getElementById('form');
var formdata = new FormData(form);
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("xmlTextBox").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("POST", "PostXml", true);
xmlhttp.setRequestHeader('Content-Type', 'multipart/form-data');
xmlhttp.setRequestHeader("Content-length", formdata.length);
xmlhttp.setRequestHeader("Connection", "close");
xmlhttp.send(formdata);
Các Jersey Resource trông như thế này:
@Path("/Resource")
public class MyClass {
@POST
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Produces(MediaType.TEXT_XML)
public String postXML(@FormDataParam("param1") String param1,
@FormDataParam("param2") String param2){
return "test";
}
Phiên bản thực bao gồm nhiều params và mã đầy đủ, nhưng các chú thích đều giống nhau. Điều này tạo ra ngoại lệ sau khi chạy qua tomcat:
java.lang.NullPointerException
at com.sun.jersey.multipart.impl.MultiPartReaderClientSide.unquoteMediaTypeParameters(MultiPartReaderClientSide.java:227)
at com.sun.jersey.multipart.impl.MultiPartReaderClientSide.readMultiPart(MultiPartReaderClientSide.java:154)
at com.sun.jersey.multipart.impl.MultiPartReaderServerSide.readMultiPart(MultiPartReaderServerSide.java:80)
at com.sun.jersey.multipart.impl.MultiPartReaderClientSide.readFrom(MultiPartReaderClientSide.java:144)
at com.sun.jersey.multipart.impl.MultiPartReaderClientSide.readFrom(MultiPartReaderClientSide.java:82)
at com.sun.jersey.spi.container.ContainerRequest.getEntity(ContainerRequest.java:488)
at com.sun.jersey.spi.container.ContainerRequest.getEntity(ContainerRequest.java:552)
Từ nhìn vào nguồn sản sinh ra ngoại lệ có vẻ như các param không đến qua:
224 for (final String parameterName : parameters) {
225 String parameterValue = mediaType.getParameters().get(parameterName);
226
227 if (parameterValue.startsWith("\"")) {
228 parameterValue = parameterValue.substring(1, parameterValue.length() - 1);
229 unquotedParams.put(parameterName, parameterValue);
230 }
231 }
I; đã sử dụng firebug để đặt một dấu vết trên và tên/giá trị đang đến thông qua một cách khác nhau khi sử dụng javascript so với một bài viết HTML thẳng. Trong dấu vết cho bài đăng HTML, loại nội dung được trả lại trong luồng tải lên:
Request Headers From Upload Stream
Content-Length 1756
Content-Type multipart/form-data; boundary=---------------------------1523409566516443041527622966
Nhưng javascript dường như chỉ là một bài đăng chuẩn hoặc một thứ gì đó? Bất kỳ ý tưởng làm thế nào tôi sao chép bài multiformdata trong javascript ??
Bất kỳ ý tưởng nào giống như tôi đang truyền tải thông qua OK? Tôi cũng đã thử điều này bằng cách sử dụng một bài đăng dạng HTML bình thường và nó hoạt động tốt, vì vậy phải có liên quan đến javascript.
Wow, tôi chắc chắn tôi bắt đầu mà không có những tiêu đề yêu cầu ?! Tôi có lẽ đã thay đổi một cái gì đó khác cùng một lúc. Cảm ơn rất nhiều! – thomascrabs
@thomascrabs bạn được chào đón. – Musa
@Musa Tôi đang làm việc với Android. Giải pháp của bạn cũng làm việc cho tôi. Bạn có thể cho tôi biết lý do của việc này là gì? –