मैंने एक ट्रांसफॉर्मर क्लास लिखा है जो एक HttpServletRequest लेता है और उसे दूसरे प्रकार में बदल देता है जो सर्वलेट अनुरोध से इनपुटस्ट्रीम में पॉइंटर रखता है। (विचार है कि आने वाले परिवहन प्रोटोकॉल को अनुरोध हैंडलिंग से अमूर्त करना है, इसलिए मैं एफ़टीपी से एक समान ट्रांसफार्मर भी लिख सकता हूं।)MockMultipartHttpServletRequest का उपयोग करके यूनिट परीक्षण (ItemInputStream.makeAlailable में NullPointerException फेंकता है)
अब मैं इसके लिए एक यूनिट टेस्ट लिखने की कोशिश कर रहा हूं, और मैं ' मुझे समस्या है। मैंने एक वैध मल्टीपार्ट HTTP अनुरोध (स्प्रिंग क्लासेस MockMultipartHttpServletRequest और MockMultipartFile का उपयोग करके) बनाने के लिए सही बॉयलरप्लेट को समझने में कामयाब रहा है, लेकिन अब मुझे UploadRequest
कक्षा के initialize()
विधि में एक NullPointerException मिलता है। मुझे समस्या का अनुमान है कि किसी भी तरह MockMultipartHttpServletRequest के अंदर स्ट्रीम सही ढंग से शुरू नहीं किया जा रहा है, लेकिन मुझे यह नहीं पता कि मुझे अलग-अलग क्या करना चाहिए।
कोई सुझाव आभारी रूप से स्वीकार किया जाएगा! यहाँ
public class UploadRequest {
private Map<String, String> params;
private InputStream strIn;
private Logger Log = Logger.getLogger(UploadRequest.class.getName());
public UploadRequest()
{
params = new HashMap<String, String>();
}
public void initialize(HttpServletRequest sRequest,
ServletFileUpload upload)
throws IOException, FileUploadException
{
Enumeration<String> paramNames = sRequest.getParameterNames();
while (paramNames.hasMoreElements()) {
String pName = paramNames.nextElement();
params.put(pName, sRequest.getParameter(pName));
}
params.put("request_uri", sRequest.getRequestURI());
FileItemIterator iter = upload.getItemIterator(sRequest);
while (iter.hasNext()) {
FileItemStream item = iter.next();
try {
if (!item.isFormField()) {
// Skip form fields
params.put("original_file_name", item.getName());
strIn = item.openStream();
}
} catch (IOException ex) {
Log.severe("File uploading exception: " + ex.getMessage());
throw ex;
}
}
}
और इकाई परीक्षण है::
java.lang.NullPointerException
at org.apache.commons.fileupload.MultipartStream$ItemInputStream.makeAvailable(MultipartStream.java:976)
at org.apache.commons.fileupload.MultipartStream$ItemInputStream.read(MultipartStream.java:886)
at java.io.InputStream.read(InputStream.java:82)
at org.apache.commons.fileupload.util.Streams.copy(Streams.java:96)
at org.apache.commons.fileupload.util.Streams.copy(Streams.java:66)
at org.apache.commons.fileupload.MultipartStream.readBodyData(MultipartStream.java:592)
at org.apache.commons.fileupload.MultipartStream.discardBodyData(MultipartStream.java:618)
at org.apache.commons.fileupload.MultipartStream.skipPreamble(MultipartStream.java:637)
at org.apache.commons.fileupload.FileUploadBase$FileItemIteratorImpl.findNextItem(FileUploadBase.java:984)
at org.apache.commons.fileupload.FileUploadBase$FileItemIteratorImpl.<init>(FileUploadBase.java:965)
at org.apache.commons.fileupload.FileUploadBase.getItemIterator(FileUploadBase.java:331)
at org.apache.commons.fileupload.servlet.ServletFileUpload.getItemIterator(ServletFileUpload.java:148)
at com.ooyala.UploadRequest.initialize(UploadRequest.java:51)
at com.ooyala.UploadRequestTest.testCreateFromServletRequest(UploadRequestTest.java:57)
यहाँ मेरी ट्रांसफार्मर वर्ग का एक संक्षिप्त संस्करण है:
यह स्टैक ट्रेस है
import org.springframework.mock.web.MockMultipartHttpServletRequest;
import org.springframework.mock.web.MockMultipartFile;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
// etc.... other imports
@RunWith(JMock.class)
public class UploadRequestTest {
private UploadRequest upRequest;
@Before
public void setUp()
{
context.setImposteriser(ClassImposteriser.INSTANCE);
upRequest = new UploadRequest();
}
@Test
public void testCreateFromServletRequest()
throws IOException, FileUploadException
{
String text_contents = "hello world";
MockMultipartHttpServletRequest sRequest =
new MockMultipartHttpServletRequest();
sRequest.setMethod("POST");
String boundary = generateBoundary();
String contentType = "multipart/form-data; boundary="+boundary;
sRequest.setContentType(contentType);
sRequest.setRequestURI("/foo");
sRequest.addParameter("test_param","test_value");
sRequest.addFile(
new MockMultipartFile("file1","test_upload.txt","text/plain",
text_contents.getBytes()));
ServletFileUpload upload = new ServletFileUpload();
assertTrue(upload.isMultipartContent(sRequest));
upRequest.initialize(sRequest, upload);
}
}