Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
6033b9c
removing debug lines in BigInteger
Oct 15, 2018
fa83f71
JAXB annotation marshaller first-pass complete
Oct 15, 2018
729b117
JAXB marshaller working; preliminary work on unmarshaller
Oct 16, 2018
157a921
Preliminary JAXB marshalling and unmarshalling working.
Oct 17, 2018
118c421
method set/get/is with qualifications
Oct 17, 2018
5398514
preliminary java.awt.List extends JList
Oct 17, 2018
48cd462
JAXB marshalling.
Oct 23, 2018
0f324b1
SwingJS-site.zip for JAXB marshalling/unmarshalling
Oct 23, 2018
08223f2
Fix for BufferedImage rotation
Oct 23, 2018
700bc4e
Moving a2s.A2SEvent to java.awt
Oct 23, 2018
c1a13c8
dev-noA2S -- moving a2s/ to swingjs/a2s
Oct 23, 2018
e399cd9
swingjs/a2s/_README.txt
Oct 24, 2018
3bcc855
JAXB marshaller/unmarshaller for List<Object>, Map<Object,Object>
Oct 25, 2018
377f1ad
JAXB enum marshalling/unmarshalling
Oct 27, 2018
a563e73
adds @XmlTransient
Oct 27, 2018
b6a5eec
checkbox group fix
Oct 30, 2018
3759232
JAXB tested for XmlAccessorTypes FIELD, NONE
Oct 30, 2018
5f764b5
JAXB test files
Oct 30, 2018
7483d51
updated swingjs/ files
Oct 30, 2018
6384bdf
adds org.json
Oct 30, 2018
6489372
JAXB marshaller fix
Oct 30, 2018
2f66d4a
adds URL.getResponseCode()
Oct 30, 2018
fe33526
update for swingjs/
Oct 30, 2018
1b6d50b
update for swingjs/
Oct 30, 2018
5e2b900
swingjs/ update
Oct 30, 2018
245caa7
swingjs/ upgrade fixes HTTPConnection.getResponseCode()
Oct 30, 2018
4ea97a1
working on JAXB
Oct 31, 2018
b74819f
Utilizing package-info.java for package-level marshalling information
Nov 1, 2018
519d437
Adds package-info support for namespace
Nov 1, 2018
aec06c1
uses ObjectFactory (hack) to get QNAME
Nov 1, 2018
d809361
streamlined marshaller, XmlEnum support
Nov 1, 2018
7720a45
JAXB update complete
Nov 2, 2018
338ae6d
JAXB XMLEnumValue for attributes
Nov 2, 2018
fe8c7c3
JAXB for attribute enums
Nov 2, 2018
8b6f1f0
additional JAXB work
Nov 4, 2018
3dde6e2
Java2Script/SwingJS 3.2.4.02 further support for JAXB
Nov 4, 2018
5e03b04
JAXB marshalling by JavaScript successfully unmarshalled in Java
Nov 6, 2018
7faba8a
JAXB unmarshalling succesful for Jalview session
Nov 7, 2018
a50eb59
eclipse note; j2s config TODO note
Nov 7, 2018
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
JAXB marshaller fix
  • Loading branch information
hansonr hansonr
hansonr authored and hansonr committed Oct 30, 2018
commit 648937239ba36a4e314a2eb991ca9c5973cd09a2
Original file line number Diff line number Diff line change
Expand Up @@ -6179,10 +6179,11 @@ protected ClassAnnotation(String qName, Annotation annotation, BodyDeclaration n
@SuppressWarnings("unchecked")
public static void addClassAnnotations(int accessType, List<ClassAnnotation> class_annotations, List<FieldDeclaration> fields,
List<IMethodBinding> methods, TrailingBuffer trailingBuffer) {

int pt = 0, ptBuf = 0;
ASTNode lastNode = null;
List<?> fragments = null;
boolean allowImplicit = true;
String propOrder = null;
for (int i = 0; i < class_annotations.size(); i++) {
ClassAnnotation a = class_annotations.get(i);
String str = a.annotation.toString();
Expand All @@ -6204,7 +6205,7 @@ public static void addClassAnnotations(int accessType, List<ClassAnnotation> cla
str += sep;
e = (Expression) expressions.get(j);
if (e instanceof TypeLiteral) {
str += ((TypeLiteral) e).getType().resolveBinding().getQualifiedName() + ".class";
str += "\""+((TypeLiteral) e).getType().resolveBinding().getQualifiedName() + ".class\"";
} else {
str += e.toString();
}
Expand All @@ -6224,7 +6225,7 @@ public static void addClassAnnotations(int accessType, List<ClassAnnotation> cla
fragments = null;
if (a.node instanceof EnumDeclaration) {
type = ((EnumDeclaration) a.node).resolveBinding();
allowImplicit = false;
propOrder = "XX";
} else if (a.node instanceof TypeDeclaration) {
type = ((TypeDeclaration) a.node).resolveBinding();
} else if (a.node instanceof FieldDeclaration) {
Expand Down Expand Up @@ -6263,13 +6264,12 @@ public static void addClassAnnotations(int accessType, List<ClassAnnotation> cla
trailingBuffer.append(",'" + className + "'],[");
}
trailingBuffer.append("'" + str + "'");
if (allowImplicit && str.indexOf("propOrder=") >= 0)
allowImplicit = false;
if (propOrder == null && str.indexOf("propOrder=") >= 0)
propOrder = str;
}
if (pt > 0) {
addTrailingFragments(fragments, trailingBuffer, ptBuf);
if (allowImplicit)
addImplicitJAXBFieldsAndMethods(accessType, trailingBuffer, fields, methods);
addImplicitJAXBFieldsAndMethods(accessType, trailingBuffer, fields, methods, propOrder);
trailingBuffer.append("]]];\n");
}
}
Expand All @@ -6286,7 +6286,7 @@ private static IMethodBinding getJAXBGetMethod(IMethodBinding var, List<IMethodB
}

private static void addImplicitJAXBFieldsAndMethods(int accessType, TrailingBuffer trailingBuffer,
List<FieldDeclaration> fields, List<IMethodBinding> methods) {
List<FieldDeclaration> fields, List<IMethodBinding> methods, String propOrder) {
if (accessType == JAXB_TYPE_NONE)
return;
boolean publicOnly = (accessType == JAXB_TYPE_PUBLIC_MEMBER);
Expand All @@ -6300,6 +6300,10 @@ private static void addImplicitJAXBFieldsAndMethods(int accessType, TrailingBuff
VariableDeclarationFragment identifier = (VariableDeclarationFragment) fragments.get(i);
IVariableBinding var = identifier.resolveBinding();
String varName = var.getName();
// If propOrder is defined, then we are only allowed to
// add implicit fields that are in that propOrder
if (propOrder != null && propOrder.indexOf("\"" + varName + "\"") < 0)
continue;
ITypeBinding type = var.getType();
addAnnotation(type, varName, "@XmlElement", trailingBuffer);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -129,21 +129,18 @@ public void marshal(Object jaxbElement, File output) throws JAXBException {

public final void marshal( Object obj, java.io.Writer w )
throws JAXBException {
JSUtil.notImplemented("marshal Contenthandler");
checkNotNull( obj, "obj", w, "writer" );
marshal( obj, new StreamResult(w) );
}

public final void marshal( Object obj, org.xml.sax.ContentHandler handler )
throws JAXBException {
JSUtil.notImplemented("marshal Contenthandler");
checkNotNull( obj, "obj", handler, "handler" );
marshal( obj, new SAXResult(handler) );
}

public final void marshal( Object obj, org.w3c.dom.Node node )
throws JAXBException {
JSUtil.notImplemented("marshal Contenthandler");
checkNotNull( obj, "obj", node, "node" );
marshal( obj, new DOMResult(node) );
}
Expand Down
39 changes: 23 additions & 16 deletions sources/net.sf.j2s.java.core/src/swingjs/xml/JSJAXBClass.java
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@ class JSJAXBClass {
String defaultNamespace;
String[] seeAlso;
final Map<String, JSJAXBField> unmarshallerFieldMap = new Hashtable<String, JSJAXBField>();
private Class<?> javaClass;

private final static Map<String, String> marshallerNamespacePrefixes = new Hashtable<String, String>();
private final static Map<String, XmlAdapter> adapterMap = new HashMap<String, XmlAdapter>();
Expand All @@ -82,6 +83,7 @@ static void clearStatics() {

JSJAXBClass(Class<?> javaClass, Object javaObject, boolean isXmlIDREF, boolean isMarshaller) {
this.isMarshaller = isMarshaller;
this.javaClass = javaClass;
checkC$__ANN__(this, javaClass, javaObject, isXmlIDREF);
this.isXmlIDREF = isXmlIDREF;
}
Expand All @@ -96,6 +98,7 @@ static void clearStatics() {
@SuppressWarnings("unused")
static boolean checkC$__ANN__(JSJAXBClass jsjaxbClass, Class<?> javaClass, Object javaObject, boolean isXmlIDREF) {
boolean isTop = true;
JSJAXBClass top = jsjaxbClass;
while (javaClass != null) {

// C$.__ANN__ = [[null,'XmlAccessorType',['@XmlAccessorType(XmlAccessType.FIELD)','@XmlType(name="MoreComplex")']],
Expand All @@ -112,40 +115,44 @@ static void clearStatics() {
if (!isTop) {
className = null;
}
isTop = false;
if (jsdata != null) {
if (jsjaxbClass == null)
return true;
jsjaxbClass.addTypeData(jsdata, clazz, javaObject);
if (!isTop) {
for (int i = 1, n = jsjaxbClass.fields.size(); i < n; i++)
top.addField(jsjaxbClass.fields.get(i));
}
}
isTop = false;
javaClass = javaClass.getSuperclass();
}
return false;
}

JSJAXBClass addTypeData(Object[][][] jsdata, Object clazz, Object javaObject) {
int n = (javaObject == null ? 1 : jsdata.length);
for (int i = 0; i < n; i++) {
for (int i = fields.size() == 0 ? 0 : 1; i < n; i++) {
JSJAXBField field = new JSJAXBField(this, jsdata[i], clazz, javaObject, fields.size(), propOrder);
addField(field);
}
if (isMarshaller)
processPropOrder(javaObject);
// if (isMarshaller)
// processPropOrder(javaObject);
return this;
}

private void processPropOrder(Object javaObject) {
for (int i = propOrder.size(); --i >= 0;) {
String prop = propOrder.get(i);
JSJAXBField field = fieldMap.get(prop);
// annotations may only show up in @XmlType:propOrder
if (field == null) {
addField(new JSJAXBField(this,
new Object[][] { new Object[] { prop, null, null, null }, new Object[] { "@XmlElement" } },
null, javaObject, fields.size(), null));
}
}
}
// private void processPropOrder(Object javaObject) {
// for (int i = propOrder.size(); --i >= 0;) {
// String prop = propOrder.get(i);
// JSJAXBField field = fieldMap.get(prop);
// // annotations may only show up in @XmlType:propOrder
// if (field == null) {
// addField(new JSJAXBField(this,
// new Object[][] { new Object[] { prop, null, null, null }, new Object[] { "@XmlElement" } },
// null, javaObject, fields.size(), null));
// }
// }
// }

private void addField(JSJAXBField field) {
fields.add(field);
Expand Down
3 changes: 3 additions & 0 deletions sources/net.sf.j2s.java.core/src/swingjs/xml/JSJAXBField.java
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,8 @@ void setNode(DOMNode node) {

private Object clazz;

private Object[][] adata;

/**
* @param jclass
* @param adata
Expand All @@ -146,6 +148,7 @@ void setNode(DOMNode node) {
this.javaObject = javaObject;
this.clazz = clazz;
this.index = index;
this.adata = adata;
javaName = (String) adata[0][0];
isMethod = (javaName != null && javaName.charAt(1) == ':');
javaClassName = (String) adata[0][1];
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,21 +38,15 @@ public class JSJAXBMarshaller extends AbstractMarshallerImpl {
private OutputStream outputStream;
private JAXBContext context;
private StreamResult result;
private JAXBElement<?> jaxbElement;

public JSJAXBMarshaller(JAXBContext context) {
this.context = context;
}

@Override
public void marshal(Object jaxbElement, Result result) throws JAXBException {
Object javaObject;
if (jaxbElement instanceof JAXBElement) {
jaxbElement = (JAXBElement<?>) jaxbElement;
javaObject = this.jaxbElement.getValue();
} else {
javaObject = jaxbElement;
}
Object javaObject = (jaxbElement instanceof JAXBElement
? ((JAXBElement<?>) jaxbElement).getValue() : jaxbElement);
this.result = (StreamResult) result;
this.writer = this.result.getWriter();
this.outputStream = this.result.getOutputStream();
Expand Down Expand Up @@ -238,7 +232,11 @@ private void addFields(JSJAXBClass jaxbClass, boolean isAttribute) throws JAXBEx
addField(field);
} else {
for (int i = 0, n = jaxbClass.propOrder.size(); i < n; i++) {
field = getField(jaxbClass, jaxbClass.propOrder.get(i));
String name = jaxbClass.propOrder.get(i);
field = getField(jaxbClass, name);
if (field == null) {
/**@j2sNative debugger */
}
if (!field.isAttribute)
addField(field);
}
Expand Down
25 changes: 25 additions & 0 deletions sources/net.sf.j2s.java.core/src/test/jaxb/Annotation.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
//
// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.8-b130911.1802
// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a>
// Any modifications to this file will be lost upon recompilation of the source schema.
// Generated on: 2018.09.28 at 12:18:54 PM BST
//


package test.jaxb;

import java.util.List;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {"a"})
@XmlRootElement(name = "Annotation")
public class Annotation {

protected List<Object> a;

}
2 changes: 1 addition & 1 deletion sources/net.sf.j2s.java.core/src/test/jaxb/Root_FIELD.java
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
// "c",
// "publ"
// })
public class Root_FIELD {
public class Root_FIELD extends ROOT {

public static boolean isCopy = false;

Expand Down
15 changes: 4 additions & 11 deletions sources/net.sf.j2s.java.core/src/test/jaxb/Root_ORDERED.java
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
@XmlSeeAlso({test.jaxb2.Obj.class, test.jaxb.Obj.class})
@XmlRootElement(name="RootOrdered",namespace="www.jalview.org")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(propOrder = {
@XmlType(propOrder = {
"type",
"cx",
"list0",
Expand Down Expand Up @@ -84,28 +84,20 @@ public Root_ORDERED(String name) {

}

@XmlElement
List<Object> list0;

@XmlElement
BigInteger bi;

@XmlElement
BigDecimal bd = new BigDecimal("123.456");

@XmlElement
float[] f;

@XmlElement
float f2 = 1.3f;

@XmlElement
Float[] f3 = new Float[] {1.2f};

@XmlElement
Float f4 = 1.3f;

@XmlElement
Object f6 = new Integer(3);


Expand Down Expand Up @@ -152,8 +144,9 @@ public SomewhatComplex(String id) {
byte[] bytes64 = new byte[] {(byte) 100, (byte) 101};

//@XmlIDREF
@XmlElement(namespace="www.jalview.org3")
public SomewhatComplex cx;
//@XmlElement(namespace="www.jalview.org3")
public SomewhatComplex cx;

//
// @XmlElement(namespace="www.jalview.org3")
// public SomewhatComplex[] cxa = new SomewhatComplex[] { new SomewhatComplex("1"), new SomewhatComplex("2")};
Expand Down