Skip to content

Commit 5e03b04

Browse files
hansonrhansonr
authored andcommitted
JAXB marshalling by JavaScript successfully unmarshalled in Java
JalviewJS session save JAXB; Jalview (Java app) drag drop.
1 parent 3dde6e2 commit 5e03b04

File tree

14 files changed

+53
-153
lines changed

14 files changed

+53
-153
lines changed
5.6 KB
Binary file not shown.
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
20181104122354
1+
20181105193243
5.6 KB
Binary file not shown.
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
20181104122354
1+
20181105193243

sources/net.sf.j2s.core/src/net/sf/j2s/core/Java2ScriptVisitor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6348,7 +6348,7 @@ public static void addClassAnnotations(int accessType, List<ClassAnnotation> cla
63486348
}
63496349

63506350
private static String annotationNameValue(String name, Object value) {
6351-
System.out.println(">>>value " + value + " " + value.getClass().getName() + " = " + value.toString());
6351+
//System.out.println(">>>value " + value + " " + value.getClass().getName() + " = " + value.toString());
63526352
String str = (name == null ? "" : name + "=");
63536353
if (value instanceof TypeLiteral) {
63546354
str += "\"" + ((TypeLiteral) value).getType().resolveBinding().getQualifiedName() + ".class\"";
5.6 KB
Binary file not shown.

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

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -122,9 +122,10 @@ private static void getDefaultNamespaceFromPackageInfo(Class<?> javaClass) {
122122
this.javaClass = javaClass;
123123
isInnerClass = /** @j2sNative !!javaClass.$clazz$.__CLASS_NAME$__ || */false;
124124
this.javaObject = javaObject;
125-
this.qname = qname; // from JAXBElement constructor
126125
checkC$__ANN__(this, javaClass, javaObject != null || javaClass.isEnum(), isXmlIDREF);
127126
this.isXmlIDREF = isXmlIDREF;
127+
if (qname != null)
128+
setQName(qname); // from JAXBElement constructor
128129
}
129130

130131
/**
@@ -170,22 +171,22 @@ JSJAXBClass addTypeData(Object[][][] jsdata, Object clazz, boolean haveJavaObjec
170171
boolean isSuperclass = (fields.size() > 0);
171172
String lastClassName = null;
172173
for (int i = 0; i < n; i++) {
174+
// if (i == 0) {
175+
// if (isSuperclass) {
176+
// // TODO -- append to the first all missing superclass flags?
177+
// // looking specifically for accessortype. Only if not present already.
178+
// continue;
179+
// } else {
180+
// // specify accessor type
181+
// }
182+
// }
173183
Object[][] adata = jsdata[i];
174-
if (i == 0) {
175-
if (isSuperclass) {
176-
// TODO -- append to the first all missing superclass flags?
177-
// looking specifically for accessortype. Only if not present already.
178-
continue;
179-
} else {
180-
// specify accessor type
181-
}
182-
}
183184
if (adata[0][1].equals("."))
184185
adata[0][1] = lastClassName;
185186
else
186187
lastClassName = (String) adata[0][1];
187188
JSJAXBField field = new JSJAXBField(this, adata, clazz, fields.size(), propOrder);
188-
if (i == 0 || field.javaName != null)
189+
if (i == 0 && !isSuperclass || field.javaName != null)
189190
addField(field);
190191
}
191192
// if (isMarshaller)
@@ -251,7 +252,7 @@ String getUnmarshallerDefaultNamespace() {
251252
}
252253

253254
void setQName(QName qualifiedName) {
254-
if (qname != null && qname.getPrefix().length() > 0)
255+
if (qname.getPrefix().length() > 0)
255256
return;
256257
qname = qualifiedName;
257258
}
@@ -308,5 +309,11 @@ private String getDefaultNamespace() {
308309
return (isInnerClass && qualifiedTypeName != null ? qualifiedTypeName.getNamespaceURI() : packageNamespace);
309310
}
310311

312+
public QName getQName() {
313+
314+
// TODO Auto-generated method stub
315+
return null;
316+
}
317+
311318

312319
}

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

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -198,13 +198,25 @@ void setNode(DOMNode node) {
198198
qualifiedWrapName = jaxbClass.finalizeFieldQName(qualifiedWrapName, null);
199199
}
200200
if (index == 0) {
201+
if (qualifiedTypeName == null)
202+
qualifiedTypeName = new QName("##default", "##default", "");
203+
boolean haveTypeNS = (!qualifiedTypeName.getNamespaceURI().equals("##default"));
201204
qualifiedName = jaxbClass.finalizeFieldQName(qualifiedName, javaClassName);
202-
jaxbClass.setQName(qualifiedName);
205+
if (!haveTypeNS)
206+
qualifiedTypeName = new QName(qualifiedName.getNamespaceURI(), qualifiedTypeName.getLocalPart(), "");
203207
jaxbClass.qualifiedTypeName = jaxbClass.finalizeFieldQName(qualifiedTypeName, javaClassName);
204208
jaxbClass.isAnonymous = (jaxbClass.qualifiedTypeName.getLocalPart().length() == 0);
209+
jaxbClass.setQName(jaxbClass.qualifiedTypeName);
205210
} else {
206-
if (javaName != null)
211+
if (javaName != null) {
212+
if (qualifiedName == null)
213+
qualifiedName = new QName("##default", "##default", "");
214+
boolean isDefaultNS = (qualifiedName.getNamespaceURI().equals("##default"));
207215
qualifiedName = jaxbClass.finalizeFieldQName(qualifiedName, javaName);
216+
if (isDefaultNS)
217+
qualifiedName = new QName(isAttribute ? "" : jaxbClass.qname.getNamespaceURI(),
218+
qualifiedName.getLocalPart(), this.isAttribute ? "" : jaxbClass.qname.getPrefix());
219+
}
208220
}
209221
}
210222

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

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,7 @@ private static String escapeString(String str, boolean isAttribute) {
190190
/////////// output methods //////////////
191191

192192
private void writeXML(JSJAXBClass jaxbClass, boolean isRoot, boolean addXsiType) throws JAXBException {
193-
QName qname = (jaxbClass.tagField == null ? jaxbClass.qname : jaxbClass.tagField.qualifiedName);
193+
QName qname = (jaxbClass.tagField == null ? jaxbClass.getQName() : jaxbClass.tagField.qualifiedName);
194194
if (isRoot) {
195195
outputHeader();
196196
}
@@ -237,7 +237,7 @@ private static boolean hasElements(List<JSJAXBField> fields) {
237237
private final static QName xs = new QName("http://www.w3.org/2001/XMLSchema", "_", "xs");
238238

239239
private void addAllNameSpaces(JSJAXBClass jaxbClass) throws JAXBException {
240-
addNameSpaceIfNeeded(jaxbClass.qname, true);
240+
addNameSpaceIfNeeded(jaxbClass.getQName(), true);
241241
for (int i = 0, n = jaxbClass.fields.size(); i < n; i++) {
242242
// JSJAXBField f = ;
243243
addNameSpaceIfNeeded(jaxbClass.fields.get(i).qualifiedName, false);
@@ -275,16 +275,14 @@ private void addFieldListable(JSJAXBField field, Object value, boolean addXsiTyp
275275
writeField(field, null, addXsiType);
276276
return;
277277
}
278-
if (!field.isAttribute && JSJAXBClass.hasAnnotations(value)) {
279-
doMarshal(value.getClass(), value, null, this.javaObject, field, addXsiType);
280-
return;
281-
}
282278
if (value instanceof List) {
283279
writeFieldList(field, (List<?>) value);
284280
} else if (value instanceof Map) {
285281
writeFieldMap(field, (Map<?, ?>) value);
286282
} else if (isArray(value)) {
287283
writeFieldArray(field, value);
284+
} else if (!field.isAttribute && JSJAXBClass.hasAnnotations(value)) {
285+
doMarshal(value.getClass(), value, null, this.javaObject, field, addXsiType);
288286
} else {
289287
writeField(field, value, addXsiType);
290288
}
@@ -606,7 +604,12 @@ private void outputInstanceType(String type) throws JAXBException {
606604
*/
607605
private void output(String s) throws JAXBException {
608606
try {
607+
/** @j2sNative console.log(s) */
609608
if (writer != null) {
609+
610+
611+
System.out.println((s.startsWith("<") ? "\n" : "") + s);
612+
610613
writer.write(s);
611614
} else if (outputStream != null) {
612615
outputStream.write(s.getBytes());

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ private Class<?> findClassForNode(DOMNode doc, Class<?>[] classes) {
125125
String nodeName = (String) DOMNode.getAttr(node, "localName");
126126
for (int i = 0; i < classes.length; i++) {
127127
JSJAXBClass jaxbClass = new JSJAXBClass(classes[i], null, false, false, null);
128-
String name = jaxbClass.qname.getLocalPart();
128+
String name = jaxbClass.getQName().getLocalPart();
129129
if (nodeName.equals(name))
130130
return classes[i];
131131
}
@@ -194,7 +194,7 @@ private Object doUnmarshal(DOMNode node, Class<?> javaClass, int mode) {
194194
if (jaxbClass.isEnum)
195195
javaObject = getEnumValue(jaxbClass, javaClass, JSSAXParser.getSimpleInnerText(node));
196196

197-
QName qname = jaxbClass.qname;
197+
QName qname = jaxbClass.getQName();
198198

199199
jaxbClass = oldJaxbClass;
200200
doc = oldDoc;

0 commit comments

Comments
 (0)