Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit7b47e96

Browse files
author
zhourenjian
committed
1. Fixing bug that SimplePipe/CompoundPipe is not stable and may generate lots of IFRAME elements.
2. Support SimpleSerializable to generate a much smaller serialized string by ignoring fields with default values.
1 parent49da8a1 commit7b47e96

File tree

5 files changed

+124
-33
lines changed

5 files changed

+124
-33
lines changed

‎sources/net.sf.j2s.ajax/ajaxrpc/net/sf/j2s/ajax/SimpleFilter.java‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,4 +36,10 @@ public interface SimpleFilter {
3636
*/
3737
publicbooleanaccept(Stringfield);
3838

39+
/**
40+
* Ignore fields with default value or not.
41+
* @return true for to enable ignoring and false to keep serializing
42+
*/
43+
publicbooleanignoreDefaultFields();
44+
3945
}

‎sources/net.sf.j2s.ajax/ajaxrpc/net/sf/j2s/ajax/SimpleRPCHttpServlet.java‎

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -101,9 +101,15 @@ protected long maxXSSRequestLatency() {
101101
*/
102102
protectedSimpleRPCRunnablegetRunnableByRequest(Stringrequest) {
103103
SimpleSerializableinstance =SimpleSerializable.parseInstance(request,newSimpleFilter() {
104+
104105
publicbooleanaccept(StringclazzName) {
105106
returnvalidateRunnable(clazzName);
106107
}
108+
109+
publicbooleanignoreDefaultFields() {
110+
returnfalse;
111+
}
112+
107113
});
108114
if (instanceinstanceofSimpleRPCRunnable) {
109115
instance.deserialize(request);
@@ -249,14 +255,17 @@ protected void doPost(HttpServletRequest req, HttpServletResponse resp)
249255
Stringserialize =runnable.serialize(newSimpleFilter() {
250256

251257
publicbooleanaccept(Stringfield) {
252-
if (diffs ==null ||diffs.length ==0)returntrue;
253258
for (inti =0;i <diffs.length;i++) {
254259
if (diffs[i].equals(field)) {
255260
returntrue;
256261
}
257262
}
258263
returnfalse;
259264
}
265+
266+
publicbooleanignoreDefaultFields() {
267+
returnfalse;
268+
}
260269

261270
});
262271

@@ -315,14 +324,17 @@ protected void doGet(HttpServletRequest req, HttpServletResponse resp)
315324
Stringserialize =runnable.serialize(newSimpleFilter() {
316325

317326
publicbooleanaccept(Stringfield) {
318-
if (diffs ==null ||diffs.length ==0)returntrue;
319327
for (inti =0;i <diffs.length;i++) {
320328
if (diffs[i].equals(field)) {
321329
returntrue;
322330
}
323331
}
324332
returnfalse;
325333
}
334+
335+
publicbooleanignoreDefaultFields() {
336+
returnfalse;
337+
}
326338

327339
});
328340

‎sources/net.sf.j2s.ajax/ajaxrpc/net/sf/j2s/ajax/SimpleRPCRequest.java‎

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -388,7 +388,8 @@ static void xssNotify(String nameID, String response, String session) {
388388
if (session != null){
389389
g.idSet["s" + nameID] = session;
390390
}
391-
var xcontent = g.idSet["x" + nameID];
391+
var k = "x" + nameID;
392+
var xcontent = g.idSet[k];
392393
if (xcontent != null) {
393394
//The following codes may be modified to send out requests one by one.
394395
if (xcontent != null) {
@@ -398,7 +399,8 @@ static void xssNotify(String nameID, String response, String session) {
398399
xcontent[i] = null;
399400
}
400401
}
401-
g.idSet["x" + nameID] = null;
402+
g.idSet[k] = null;
403+
delete g.idSet[k];
402404
}
403405
}
404406
*/ {}
@@ -408,10 +410,14 @@ static void xssNotify(String nameID, String response, String session) {
408410
/**
409411
* @j2sNative
410412
var g = net.sf.j2s.ajax.SimpleRPCRequest;
411-
runnable = g.idSet["o" + nameID];
412-
g.idSet["o" + nameID] = null;
413-
if (g.idSet["s" + nameID] != null) {
414-
g.idSet["s" + nameID] = null;
413+
var oK = "o" + nameID;
414+
runnable = g.idSet[oK];
415+
g.idSet[oK] = null;
416+
delete g.idSet[oK];
417+
var sK = "s" + nameID;
418+
if (g.idSet[sK] != null) {
419+
g.idSet[sK] = null;
420+
delete g.idSet[sK];
415421
}
416422
if (response == null && runnable != null) { // error!
417423
runnable.ajaxFail();

‎sources/net.sf.j2s.ajax/ajaxrpc/net/sf/j2s/ajax/SimpleSerializable.java‎

Lines changed: 89 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -63,19 +63,34 @@ public class SimpleSerializable implements Cloneable {
6363
if (fields == null) {
6464
fields = [];
6565
}
66+
var filter = arguments[0];
67+
var ignoring = (filter == null || filter.ignoreDefaultFields ());
6668
for (var i = 0; i < fields.length; i++) {
6769
var field = fields[i];
6870
var name = field.name;
69-
buffer[buffer.length] = String.fromCharCode (baseChar +name.length);
70-
buffer[buffer.length] = name;
71+
if (filter != null && !filter.accept (name)) continue;
72+
var nameStr = String.fromCharCode (baseChar + name.length) + name;
7173
var type = field.type;
7274
if (type == 'F' || type == 'D' || type == 'I' || type == 'L'
7375
|| type == 'S' || type == 'B' || type == 'b') {
76+
if (ignoring && this[name] == 0
77+
&& (type == 'F' || type == 'D' || type == 'I'
78+
|| type == 'L' || type == 'S' || type == 'B')) {
79+
continue;
80+
}
81+
if (ignoring && this[name] == false && type == 'b') {
82+
continue;
83+
}
84+
buffer[buffer.length] = nameStr;
7485
buffer[buffer.length] = type;
7586
var value = "" + this[name];
7687
buffer[buffer.length] = String.fromCharCode (baseChar + value.length);
7788
buffer[buffer.length] = value;
7889
} else if (type == 'C') {
90+
if (ignoring && this[name] == 0 || this[name] == '\0') {
91+
continue;
92+
}
93+
buffer[buffer.length] = nameStr;
7994
buffer[buffer.length] = type;
8095
var value = "";
8196
if (typeof this[name] == 'number') {
@@ -86,12 +101,21 @@ public class SimpleSerializable implements Cloneable {
86101
buffer[buffer.length] = String.fromCharCode (baseChar + value.length);
87102
buffer[buffer.length] = value;
88103
} else if (type == 's') {
104+
if (ignoring && this[name] == null) {
105+
continue;
106+
}
107+
buffer[buffer.length] = nameStr;
89108
this.serializeString(buffer, this[name]);
90109
} else if (type.charAt (0) == 'A') {
91-
buffer[buffer.length] = type;
92110
if (this[name] == null) {
111+
if (ignoring) {
112+
continue;
113+
}
114+
buffer[buffer.length] = nameStr;
93115
buffer[buffer.length] = String.fromCharCode (baseChar - 1);
94116
} else {
117+
buffer[buffer.length] = nameStr;
118+
buffer[buffer.length] = type;
95119
var l4 = this[name].length;
96120
if (l4 > 52) {
97121
if (l4 > 0x4000) { // 16 * 1024
@@ -180,6 +204,7 @@ public String serialize(SimpleFilter filter) {
180204
}
181205
clazz =clazz.getSuperclass();
182206
}
207+
booleanignoring = (filter ==null ||filter.ignoreDefaultFields());
183208
try {
184209
Field[]fields = (Field [])fieldSet.toArray(newField[0]);
185210
for (inti =0;i <fields.length;i++) {
@@ -190,64 +215,83 @@ public String serialize(SimpleFilter filter) {
190215
&& (modifiers &Modifier.STATIC) ==0) {
191216
Stringname =field.getName();
192217
if (filter !=null && !filter.accept(name))continue;
193-
buffer.append((char)(baseChar +name.length()));
194-
buffer.append(name);
218+
StringnameStr = (char)(baseChar +name.length()) +name;
195219
Classtype =field.getType();
196220
if (type ==float.class) {
197-
buffer.append('F');
198221
floatf =field.getFloat(this);
222+
if (f ==0.0 &&ignoring)continue;
223+
buffer.append(nameStr);
224+
buffer.append('F');
199225
Stringvalue ="" +f;
200226
buffer.append((char) (baseChar +value.length()));
201227
buffer.append(f);
202228
}elseif (type ==double.class) {
203-
buffer.append('D');
204229
doubled =field.getDouble(this);
230+
if (d ==0.0d &&ignoring)continue;
231+
buffer.append(nameStr);
232+
buffer.append('D');
205233
Stringvalue ="" +d;
206234
buffer.append((char) (baseChar +value.length()));
207235
buffer.append(d);
208236
}elseif (type ==int.class) {
209-
buffer.append('I');
210237
intn =field.getInt(this);
238+
if (n ==0 &&ignoring)continue;
239+
buffer.append(nameStr);
240+
buffer.append('I');
211241
Stringvalue ="" +n;
212242
buffer.append((char) (baseChar +value.length()));
213243
buffer.append(n);
214244
}elseif (type ==long.class) {
215-
buffer.append('L');
216245
longl =field.getLong(this);
246+
if (l ==0L &&ignoring)continue;
247+
buffer.append(nameStr);
248+
buffer.append('L');
217249
Stringvalue ="" +l;
218250
buffer.append((char) (baseChar +value.length()));
219251
buffer.append(l);
220252
}elseif (type ==short.class) {
221-
buffer.append('S');
222253
shorts =field.getShort(this);
254+
if (s ==0 &&ignoring)continue;
255+
buffer.append(nameStr);
256+
buffer.append('S');
223257
Stringvalue ="" +s;
224258
buffer.append((char) (baseChar +value.length()));
225259
buffer.append(s);
226260
}elseif (type ==byte.class) {
227-
buffer.append('B');
228261
byteb =field.getByte(this);
262+
if (b ==0 &&ignoring)continue;
263+
buffer.append(nameStr);
264+
buffer.append('B');
229265
Stringvalue ="" +b;
230266
buffer.append((char) (baseChar +value.length()));
231267
buffer.append(b);
232268
}elseif (type ==char.class) {
233-
buffer.append('C');
234269
intc =0 +field.getChar(this);
270+
if (c ==0 &&ignoring)continue;
271+
buffer.append(nameStr);
272+
buffer.append('C');
235273
Stringvalue ="" +c;
236274
buffer.append((char) (baseChar +value.length()));
237275
buffer.append(c);
238276
}elseif (type ==boolean.class) {
239-
buffer.append('b');
240277
booleanb =field.getBoolean(this);
278+
if (b ==false &&ignoring)continue;
279+
buffer.append(nameStr);
280+
buffer.append('b');
241281
Stringvalue ="" +b;
242282
buffer.append((char) (baseChar +value.length()));
243283
buffer.append(b);
244284
}elseif (type ==String.class) {
245285
Strings = (String)field.get(this);
286+
if (s ==null &&ignoring)continue;
287+
buffer.append(nameStr);
246288
serializeString(buffer,s);
247289
}else {// Array ...
248290
if (type ==float[].class) {
249-
buffer.append("AF");
250291
float[]fs = (float[])field.get(this);
292+
if (fs ==null &&ignoring)continue;
293+
buffer.append(nameStr);
294+
buffer.append("AF");
251295
if (fs ==null) {
252296
buffer.append((char) (baseChar -1));
253297
}else {
@@ -260,8 +304,10 @@ public String serialize(SimpleFilter filter) {
260304
}
261305
}
262306
}elseif (type ==double[].class) {
263-
buffer.append("AD");
264307
double []ds = (double [])field.get(this);
308+
if (ds ==null &&ignoring)continue;
309+
buffer.append(nameStr);
310+
buffer.append("AD");
265311
if (ds ==null) {
266312
buffer.append((char) (baseChar -1));
267313
}else {
@@ -274,8 +320,10 @@ public String serialize(SimpleFilter filter) {
274320
}
275321
}
276322
}elseif (type ==int[].class) {
277-
buffer.append("AI");
278323
int []ns = (int [])field.get(this);
324+
if (ns ==null &&ignoring)continue;
325+
buffer.append(nameStr);
326+
buffer.append("AI");
279327
if (ns ==null) {
280328
buffer.append((char) (baseChar -1));
281329
}else {
@@ -288,8 +336,10 @@ public String serialize(SimpleFilter filter) {
288336
}
289337
}
290338
}elseif (type ==long[].class) {
291-
buffer.append("AL");
292339
long []ls = (long [])field.get(this);
340+
if (ls ==null &&ignoring)continue;
341+
buffer.append(nameStr);
342+
buffer.append("AL");
293343
if (ls ==null) {
294344
buffer.append((char) (baseChar -1));
295345
}else {
@@ -302,8 +352,10 @@ public String serialize(SimpleFilter filter) {
302352
}
303353
}
304354
}elseif (type ==short[].class) {
305-
buffer.append("AS");
306355
short []ss = (short [])field.get(this);
356+
if (ss ==null &&ignoring)continue;
357+
buffer.append(nameStr);
358+
buffer.append("AS");
307359
if (ss ==null) {
308360
buffer.append((char) (baseChar -1));
309361
}else {
@@ -316,8 +368,10 @@ public String serialize(SimpleFilter filter) {
316368
}
317369
}
318370
}elseif (type ==byte[].class) {
319-
buffer.append("AB");
320371
byte []bs = (byte [])field.get(this);
372+
if (bs ==null &&ignoring)continue;
373+
buffer.append(nameStr);
374+
buffer.append("AB");
321375
if (bs ==null) {
322376
buffer.append((char) (baseChar -1));
323377
}else {
@@ -330,8 +384,10 @@ public String serialize(SimpleFilter filter) {
330384
}
331385
}
332386
}elseif (type ==char[].class) {
333-
buffer.append("AC");
334387
char []cs = (char [])field.get(this);
388+
if (cs ==null &&ignoring)continue;
389+
buffer.append(nameStr);
390+
buffer.append("AC");
335391
if (cs ==null) {
336392
buffer.append((char) (baseChar -1));
337393
}else {
@@ -344,8 +400,10 @@ public String serialize(SimpleFilter filter) {
344400
}
345401
}
346402
}elseif (type ==boolean[].class) {
347-
buffer.append("Ab");
348403
boolean []bs = (boolean [])field.get(this);
404+
if (bs ==null &&ignoring)continue;
405+
buffer.append(nameStr);
406+
buffer.append("Ab");
349407
if (bs ==null) {
350408
buffer.append((char) (baseChar -1));
351409
}else {
@@ -358,8 +416,10 @@ public String serialize(SimpleFilter filter) {
358416
}
359417
}
360418
}elseif (type ==String[].class) {
361-
buffer.append("AX");// special
362419
String[]ss = (String [])field.get(this);
420+
if (ss ==null &&ignoring)continue;
421+
buffer.append(nameStr);
422+
buffer.append("AX");// special
363423
if (ss ==null) {
364424
buffer.append((char) (baseChar -1));
365425
}else {
@@ -493,8 +553,10 @@ private void serializeString(StringBuffer buffer, String s) throws UnsupportedEn
493553
size = parseInt(sizeStr);
494554
} catch (e) { }
495555
}
556+
// all fields are in their default values or no fields
557+
if (size == 0) return true;
496558
index++;
497-
if (size== 0 || size> length + start - index) return false;
559+
if (size > length + start - index) return false;
498560
}
499561
500562
var fieldMap = [];
@@ -654,12 +716,14 @@ public boolean deserialize(final String str, int start) {
654716
try {
655717
size =Integer.parseInt(sizeStr);
656718
}catch (NumberFormatExceptione) {
657-
//
719+
returnfalse;
658720
}
659721
}
722+
// all fields are in their default values or no fields
723+
if (size ==0)returntrue;
660724
index++;
661725
// may be empty string or not enough string!
662-
if (size==0 ||size>length +start -index)returnfalse;
726+
if (size >length +start -index)returnfalse;
663727
}
664728

665729
MapfieldMap =newHashMap();

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp