1
1
/*
2
- * Copyright 2002-2013 the original author or authors.
2
+ * Copyright 2002-2014 the original author or authors.
3
3
*
4
4
* Licensed under the Apache License, Version 2.0 (the "License");
5
5
* you may not use this file except in compliance with the License.
17
17
package org .springframework .web .servlet .view .document ;
18
18
19
19
import java .io .ByteArrayInputStream ;
20
+ import java .lang .reflect .Field ;
20
21
import java .util .HashMap ;
21
22
import java .util .Locale ;
22
23
import java .util .Map ;
23
24
import javax .servlet .http .HttpServletRequest ;
24
25
import javax .servlet .http .HttpServletResponse ;
25
26
26
- import junit .framework .TestCase ;
27
27
import jxl .Cell ;
28
28
import jxl .Sheet ;
29
29
import jxl .Workbook ;
30
+ import jxl .WorkbookSettings ;
31
+ import jxl .read .biff .WorkbookParser ;
30
32
import jxl .write .Label ;
31
33
import jxl .write .WritableSheet ;
32
34
import jxl .write .WritableWorkbook ;
35
37
import org .apache .poi .hssf .usermodel .HSSFSheet ;
36
38
import org .apache .poi .hssf .usermodel .HSSFWorkbook ;
37
39
import org .apache .poi .poifs .filesystem .POIFSFileSystem ;
40
+ import org .junit .Before ;
41
+ import org .junit .Test ;
38
42
39
43
import org .springframework .mock .web .test .MockHttpServletRequest ;
40
44
import org .springframework .mock .web .test .MockHttpServletResponse ;
41
45
import org .springframework .mock .web .test .MockServletContext ;
46
+ import org .springframework .util .ReflectionUtils ;
42
47
import org .springframework .web .context .support .StaticWebApplicationContext ;
43
48
import org .springframework .web .servlet .DispatcherServlet ;
44
49
import org .springframework .web .servlet .LocaleResolver ;
45
50
51
+ import static org .junit .Assert .*;
52
+
46
53
/**
47
54
* Tests for the AbstractExcelView and the AbstractJExcelView classes.
48
55
*
49
56
* @author Alef Arendsen
50
57
* @author Bram Smeets
51
58
*/
52
- public class ExcelViewTests extends TestCase {
59
+ public class ExcelViewTests {
53
60
54
61
private MockServletContext servletCtx ;
62
+
55
63
private MockHttpServletRequest request ;
64
+
56
65
private MockHttpServletResponse response ;
66
+
57
67
private StaticWebApplicationContext webAppCtx ;
58
68
59
- @ Override
69
+
70
+ @ Before
60
71
public void setUp () {
61
72
servletCtx = new MockServletContext ("org/springframework/web/servlet/view/document" );
62
73
request = new MockHttpServletRequest (servletCtx );
@@ -65,6 +76,8 @@ public void setUp() {
65
76
webAppCtx .setServletContext (servletCtx );
66
77
}
67
78
79
+
80
+ @ Test
68
81
public void testExcel () throws Exception {
69
82
AbstractExcelView excelView = new AbstractExcelView () {
70
83
@ Override
@@ -94,6 +107,7 @@ protected void buildExcelDocument(Map<String, Object> model, HSSFWorkbook wb,
94
107
assertEquals ("Test Value" , cell .getStringCellValue ());
95
108
}
96
109
110
+ @ Test
97
111
public void testExcelWithTemplateNoLoc () throws Exception {
98
112
request .setAttribute (DispatcherServlet .LOCALE_RESOLVER_ATTRIBUTE ,
99
113
newDummyLocaleResolver ("nl" , "nl" ));
@@ -127,6 +141,7 @@ protected void buildExcelDocument(Map<String, Object> model, HSSFWorkbook wb,
127
141
assertEquals ("Test Template" , cell .getStringCellValue ());
128
142
}
129
143
144
+ @ Test
130
145
public void testExcelWithTemplateAndCountryAndLanguage () throws Exception {
131
146
request .setAttribute (DispatcherServlet .LOCALE_RESOLVER_ATTRIBUTE ,
132
147
newDummyLocaleResolver ("en" , "US" ));
@@ -160,6 +175,7 @@ protected void buildExcelDocument(Map<String, Object> model, HSSFWorkbook wb,
160
175
assertEquals ("Test Template American English" , cell .getStringCellValue ());
161
176
}
162
177
178
+ @ Test
163
179
public void testExcelWithTemplateAndLanguage () throws Exception {
164
180
request .setAttribute (DispatcherServlet .LOCALE_RESOLVER_ATTRIBUTE ,
165
181
newDummyLocaleResolver ("de" , "" ));
@@ -193,8 +209,9 @@ protected void buildExcelDocument(Map<String, Object> model, HSSFWorkbook wb,
193
209
assertEquals ("Test Template auf Deutsch" , cell .getStringCellValue ());
194
210
}
195
211
212
+ @ Test
196
213
public void testJExcel () throws Exception {
197
- AbstractJExcelView excelView = new AbstractJExcelView () {
214
+ AbstractJExcelView excelView = new UnixSafeAbstractJExcelView () {
198
215
@ Override
199
216
protected void buildExcelDocument (Map <String , Object > model , WritableWorkbook wb ,
200
217
HttpServletRequest request , HttpServletResponse response ) throws Exception {
@@ -216,11 +233,12 @@ protected void buildExcelDocument(Map<String, Object> model, WritableWorkbook wb
216
233
assertEquals ("Test Value" , cell .getContents ());
217
234
}
218
235
236
+ @ Test
219
237
public void testJExcelWithTemplateNoLoc () throws Exception {
220
238
request .setAttribute (DispatcherServlet .LOCALE_RESOLVER_ATTRIBUTE ,
221
239
newDummyLocaleResolver ("nl" , "nl" ));
222
240
223
- AbstractJExcelView excelView = new AbstractJExcelView () {
241
+ AbstractJExcelView excelView = new UnixSafeAbstractJExcelView () {
224
242
@ Override
225
243
protected void buildExcelDocument (Map <String , Object > model , WritableWorkbook wb ,
226
244
HttpServletRequest request , HttpServletResponse response ) throws Exception {
@@ -243,11 +261,12 @@ protected void buildExcelDocument(Map<String, Object> model, WritableWorkbook wb
243
261
assertEquals ("Test Template" , cell .getContents ());
244
262
}
245
263
264
+ @ Test
246
265
public void testJExcelWithTemplateAndCountryAndLanguage () throws Exception {
247
266
request .setAttribute (DispatcherServlet .LOCALE_RESOLVER_ATTRIBUTE ,
248
267
newDummyLocaleResolver ("en" , "US" ));
249
268
250
- AbstractJExcelView excelView = new AbstractJExcelView () {
269
+ AbstractJExcelView excelView = new UnixSafeAbstractJExcelView () {
251
270
@ Override
252
271
protected void buildExcelDocument (Map <String , Object > model , WritableWorkbook wb ,
253
272
HttpServletRequest request , HttpServletResponse response ) throws Exception {
@@ -270,11 +289,12 @@ protected void buildExcelDocument(Map<String, Object> model, WritableWorkbook wb
270
289
assertEquals ("Test Template American English" , cell .getContents ());
271
290
}
272
291
292
+ @ Test
273
293
public void testJExcelWithTemplateAndLanguage () throws Exception {
274
294
request .setAttribute (DispatcherServlet .LOCALE_RESOLVER_ATTRIBUTE ,
275
295
newDummyLocaleResolver ("de" , "" ));
276
296
277
- AbstractJExcelView excelView = new AbstractJExcelView () {
297
+ AbstractJExcelView excelView = new UnixSafeAbstractJExcelView () {
278
298
@ Override
279
299
protected void buildExcelDocument (Map <String , Object > model , WritableWorkbook wb ,
280
300
HttpServletRequest request , HttpServletResponse response ) throws Exception {
@@ -297,6 +317,7 @@ protected void buildExcelDocument(Map<String, Object> model, WritableWorkbook wb
297
317
assertEquals ("Test Template auf Deutsch" , cell .getContents ());
298
318
}
299
319
320
+
300
321
private LocaleResolver newDummyLocaleResolver (final String lang , final String country ) {
301
322
return new LocaleResolver () {
302
323
@ Override
@@ -310,4 +331,25 @@ public void setLocale(HttpServletRequest request, HttpServletResponse response,
310
331
};
311
332
}
312
333
334
+
335
+ /**
336
+ * Workaround JXL bug that causes ArrayIndexOutOfBounds exceptions when running in
337
+ * *nix machines. Same bug as reported at http://jira.pentaho.com/browse/PDI-5031.
338
+ * <p>We want to use the latest JXL code because it doesn't include log4j config files
339
+ * inside the jar. Since the project appears to be abandoned, AbstractJExcelView will
340
+ * eventually get deprecated.
341
+ */
342
+ private static abstract class UnixSafeAbstractJExcelView extends AbstractJExcelView {
343
+
344
+ @ Override
345
+ protected Workbook getTemplateSource (String url , HttpServletRequest request ) throws Exception {
346
+ Workbook workbook = super .getTemplateSource (url , request );
347
+ Field field = WorkbookParser .class .getDeclaredField ("settings" );
348
+ field .setAccessible (true );
349
+ WorkbookSettings settings = (WorkbookSettings ) ReflectionUtils .getField (field , workbook );
350
+ settings .setWriteAccess (null );
351
+ return workbook ;
352
+ }
353
+ }
354
+
313
355
}
0 commit comments