2013-05-13 10 views
6

Javascript kullanarak Jersey Formuna karşı bazı form verilerini göndermeye çalışıyorum.Javascript Form Yazısı Jersey MultiFormData - Boş İşaretçi İstisnası

  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); 

Jersey Kaynak şuna benzer: İşte javascript

@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"; 

} 

gerçek versiyonu daha params ve tam kodu içerir, ancak ek açıklamaları aynıdır.

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; için kundakçı kullandım: tomcat üzerinden çalışan, bu aşağıdaki özel durum üretir: o param benziyor istisna üretti kaynağında bakarak

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) 

içinden gelmiyor Bir izleme koydu ve düz bir HTML gönderisiyle karşılaştırıldığında javascript kullanırken, ad/değerler farklı şekilde geliyor. HTML için izlemesinde içerik türü bir yükleme akışında döndürülür, post:

Request Headers From Upload Stream 
Content-Length 1756 
Content-Type multipart/form-data; boundary=---------------------------1523409566516443041527622966 

Ama javascript sadece standart bir mesaj ya da bir şey gibi görünüyor? Javascript multiformdata yazıyı nasıl çoğaltırım herhangi bir fikir ??

Göründüğü gibi herhangi bir fikir, her şeyi yoldan geçiriyorum. Bunu normal bir HTML form postası kullanarak da denedim ve iyi çalışıyor, bu yüzden javascript ile ilgili olmalıdır.

cevap

6

kaldır olanlar çalışma setRequestHeader

var form = document.getElementById('form'); 
var formdata = new FormData(form); 

var xmlhttp=new XMLHttpRequest(); 
    } 
xmlhttp.onreadystatechange=function() 
    { 
    if (xmlhttp.readyState==4 && xmlhttp.status==200) 
    { 
     document.getElementById("xmlTextBox").innerHTML=xmlhttp.responseText; 
    } 
    } 
xmlhttp.open("POST", "PostXml", true); 
xmlhttp.send(formdata); 

http://jsfiddle.net/8NWB7/ çalışmıyor
http://jsfiddle.net/8NWB7/1/

+0

Vay, ben o istek başlıkları olmadan başladı eminim ?! Muhtemelen aynı anda başka bir şey değiştirdim. Çok teşekkürler! – thomascrabs

+0

@thomascrabs Hoş Geldiniz. – Musa

+1

@Musa Android ile çalışıyorum. Çözümünüz benim için de çalıştı. Bunun sebebinin ne olduğunu söyleyebilir misin? –