Skip to content

Commit 8cd9407

Browse files
hansonrhansonr
authored andcommitted
JAXB unmarshaller fix for field.unmarshallingClassName bug
1 parent a50eb59 commit 8cd9407

9 files changed

Lines changed: 31 additions & 24 deletions

File tree

-560 Bytes
Binary file not shown.
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
20181106221821
1+
20181107115918
-560 Bytes
Binary file not shown.
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
20181106221821
1+
20181107115918
-560 Bytes
Binary file not shown.

sources/net.sf.j2s.java.core/src/swingjs/xml/JSJAXBField.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@ class JSJAXBField implements Cloneable {
3939
DOMNode boundNode;
4040
List<Object> boundListNodes;
4141
QName qualifiedTypeName;
42-
String unmarshallingClassName;
4342

4443
String xmlCharacterData = "";
4544
String xmlAttributeData;

sources/net.sf.j2s.java.core/src/swingjs/xml/JSJAXBUnmarshaller.java

Lines changed: 23 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -133,14 +133,10 @@ private Class<?> findClassForNode(DOMNode doc, Class<?>[] classes) {
133133
return null;
134134
}
135135

136-
private Object unmarshalField(JSJAXBField field, DOMNode node) {
136+
private Object unmarshalField(JSJAXBField field, DOMNode node, String className) {
137137
if (field != null)
138138
try {
139-
String className = field.unmarshallingClassName;
140-
if (className == null)
141-
className = field.javaClassName;
142-
field.unmarshallingClassName = null;
143-
return doUnmarshal(node, Class.forName(className), MODE_CONTINUE);
139+
return doUnmarshal(node, Class.forName(className == null ? field.javaClassName :className), MODE_CONTINUE);
144140
} catch (ClassNotFoundException e) {
145141
e.printStackTrace();
146142
}
@@ -268,8 +264,14 @@ private void processMaps() {
268264
: field.mapClassNameKey);
269265
String valueType = ((field.holdsObjects & JSJAXBField.MAP_VALUE_OBJECT) != 0 ? null
270266
: field.mapClassNameValue);
271-
JSJAXBField keyFieldToUnmarshal = (needsUnmarshalling(field, keyType) ? field : null);
272-
JSJAXBField valueFieldToUnmarshal = (needsUnmarshalling(field, valueType) ? field : null);
267+
String className = needsUnmarshalling(field, keyType);
268+
if (className != null)
269+
keyType = className;
270+
JSJAXBField keyFieldToUnmarshal = (className == null ? null : field);
271+
className = needsUnmarshalling(field, valueType);
272+
if (className != null)
273+
valueType = className;
274+
JSJAXBField valueFieldToUnmarshal = (className == null ? null : field);
273275
for (int i = 1, n = nodes.size(); i < n;) {
274276
Object key = getNodeObject(keyFieldToUnmarshal, (DOMNode) nodes.get(i++), keyType, null, true);
275277
Object value = getNodeObject(valueFieldToUnmarshal, (DOMNode) nodes.get(i++), valueType, null, true);
@@ -316,16 +318,19 @@ private Object[] fillArrayData(JSJAXBField field, DOMNode node, Object[] data, S
316318
if (!haveData)
317319
data = a; // nulls
318320
// TODO: what if arrayType is Object?
319-
JSJAXBField fieldToUnmarshal = (needsUnmarshalling(field, arrayType) ? field : null);
321+
String className = needsUnmarshalling(field, arrayType);
322+
JSJAXBField fieldToUnmarshal = (className == null ? null : field);
323+
if (className != null)
324+
arrayType = className;
320325
for (int i = 0; i < n; i++)
321-
a[i] = getNodeObject(fieldToUnmarshal, (node == null ? (DOMNode) field.boundListNodes.get(i) : node), field.unmarshallingClassName, data[i],
326+
a[i] = getNodeObject(fieldToUnmarshal, (node == null ? (DOMNode) field.boundListNodes.get(i) : node), arrayType, data[i],
322327
asObject);
323328
return a;
324329
}
325330

326331
private Object getNodeObject(JSJAXBField fieldToUnmarshal, DOMNode node, String type, Object data, boolean asObject) {
327332
if (fieldToUnmarshal != null) {
328-
return unmarshalField(fieldToUnmarshal, node);
333+
return unmarshalField(fieldToUnmarshal, node, type);
329334
}
330335
if (node == null)
331336
return null;
@@ -339,7 +344,7 @@ private Object getNodeObject(JSJAXBField fieldToUnmarshal, DOMNode node, String
339344
// this is a SeeAlso entry
340345
QName qname = getQnameForAttribute(null, null, type);
341346
JSJAXBField field = getFieldFromQName(qname);
342-
return unmarshalField(field, node);
347+
return unmarshalField(field, node, null);
343348
}
344349
}
345350
return convertFromType(null, data, type, asObject);
@@ -428,25 +433,23 @@ static JSJAXBClass newUnmarshalledInstance(Class<?> javaClass, Object javaObject
428433
return jjc.clone();
429434
}
430435

431-
public static boolean needsUnmarshalling(JSJAXBField field, String javaClassName) {
436+
public static String needsUnmarshalling(JSJAXBField field, String javaClassName) {
432437
if (field.isSimpleType(javaClassName))
433-
return false;
438+
return null;
434439
boolean isMarshalled = false;
435440
if (javaClassName == null)
436441
javaClassName = field.javaClassName;
437442
try {
438443
isMarshalled = (knownJavaClasses.containsKey(javaClassName)
439444
? knownJavaClasses.get(javaClassName).booleanValue()
440445
: JSJAXBClass.checkC$__ANN__(null, Class.forName(javaClassName), false, false));
441-
if (isMarshalled)
442-
field.unmarshallingClassName = javaClassName;
443446
} catch (ClassNotFoundException e) {
444447
System.out.println("JSJAXBClass: class was not found: " + javaClassName);
445448
e.printStackTrace();
446449
} finally {
447450
knownJavaClasses.put(javaClassName, Boolean.valueOf(isMarshalled));
448451
}
449-
return isMarshalled;
452+
return (isMarshalled ? javaClassName : null);
450453
}
451454

452455
void prepareForUnmarshalling(String defaultNamespace) {
@@ -518,8 +521,9 @@ private void setFieldValue(JSJAXBField field) {
518521

519522
// complex object -- unmarshal directly
520523

521-
if (needsUnmarshalling(field, null)) {
522-
field.setValue(unmarshalField(field, field.boundNode), javaObject);
524+
String className = needsUnmarshalling(field, null);
525+
if (className != null) {
526+
field.setValue(unmarshalField(field, field.boundNode, className), javaObject);
523527
return;
524528
}
525529

sources/net.sf.j2s.java.core/srcjs/js/j2sClazz.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
// Google closure compiler cannot handle Clazz.new or Clazz.super
99

10+
// BH 11/6/2018 3.2.4.03 adds TypeError.prototype.printStackTrace$java_io_PrintStream
1011
// BH 11/4/2018 3.2.4.02 fixes problem with new Date("10/20/2018") and missing date.equals()
1112
// BH 10/1/2018 3.2.4.01 fixes problem with AWT mouseXxx(Event) not activating in children of Applet
1213
// BH 9/29/2018 3.2.4.00 adds JAXB support
@@ -5277,7 +5278,8 @@ if(lineNum>=0){
52775278

52785279

52795280
TypeError.prototype.getMessage$ || (TypeError.prototype.getMessage$ = function(){ return (this.stack ? this.stack : this.message || this.toString()) + (this.getStackTrace ? this.getStackTrace$() : Clazz._getStackTrace())});
5280-
TypeError.prototype.printStackTrace$ = function(){System.out.println(this + "\n" + this.stack)}
5281+
TypeError.prototype.printStackTrace$ = function(){System.out.println(this + "\n" + this.stack)};
5282+
TypeError.prototype.printStackTrace$java_io_PrintStream = function(stream){stream.println$S(e + "\n" + e.stack);};
52815283

52825284
Clazz.Error = Error;
52835285

sources/net.sf.j2s.java.core/srcjs/swingjs2.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13543,6 +13543,7 @@ if (!J2S._version)
1354313543

1354413544
// Google closure compiler cannot handle Clazz.new or Clazz.super
1354513545

13546+
// BH 11/6/2018 3.2.4.03 adds TypeError.prototype.printStackTrace$java_io_PrintStream
1354613547
// BH 11/4/2018 3.2.4.02 fixes problem with new Date("10/20/2018") and missing date.equals()
1354713548
// BH 10/1/2018 3.2.4.01 fixes problem with AWT mouseXxx(Event) not activating in children of Applet
1354813549
// BH 9/29/2018 3.2.4.00 adds JAXB support
@@ -18813,7 +18814,8 @@ if(lineNum>=0){
1881318814

1881418815

1881518816
TypeError.prototype.getMessage$ || (TypeError.prototype.getMessage$ = function(){ return (this.stack ? this.stack : this.message || this.toString()) + (this.getStackTrace ? this.getStackTrace$() : Clazz._getStackTrace())});
18816-
TypeError.prototype.printStackTrace$ = function(){System.out.println(this + "\n" + this.stack)}
18817+
TypeError.prototype.printStackTrace$ = function(){System.out.println(this + "\n" + this.stack)};
18818+
TypeError.prototype.printStackTrace$java_io_PrintStream = function(stream){stream.println$S(e + "\n" + e.stack);};
1881718819

1881818820
Clazz.Error = Error;
1881918821

0 commit comments

Comments
 (0)