Skip to content

Commit c50960d

Browse files
authored
Merge pull request #139 from BobHanson/hanson1
3.2.7_v4 JAXB fixes missing class type
2 parents 6db810f + e529804 commit c50960d

File tree

11 files changed

+254
-58
lines changed

11 files changed

+254
-58
lines changed
-21 Bytes
Binary file not shown.
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
20200112194529
1+
20200113205904
-21 Bytes
Binary file not shown.
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
20200112194529
1+
20200113205904
-21 Bytes
Binary file not shown.

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -235,8 +235,8 @@ private void addField(JSJAXBField field) {
235235
}
236236
fields.add(field);
237237
if (isMarshaller && field.javaName != null) {
238-
System.out.println("jsjaxbclass adding "
239-
+ (field.methodName == null ? "field " + field.javaName : field.methodName + "()"));
238+
// System.out.println("jsjaxbclass adding "
239+
// + (field.methodName == null ? "field " + field.javaName : field.methodName + "()"));
240240
marshallerFieldMap.put(field.javaName, field);
241241
}
242242
}

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

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -291,6 +291,11 @@ private void addFieldListable(JSJAXBClass jaxbClass, JSJAXBField field, Object v
291291
}
292292

293293
private void writeField(JSJAXBField field, Object value, boolean addXsiType) throws JAXBException {
294+
// System.out.println(field.qualifiedName
295+
// + " xs=" + addXsiType
296+
// + " isattr=" + field.isAttribute
297+
// + " isxval=" + field.isXmlValue
298+
// + " nillable=" + field.isNillable);
294299
if (field.isAttribute) {
295300
writeAttribute(field, value);
296301
} else if (field.isXmlValue) {
@@ -330,15 +335,15 @@ private void writeField(JSJAXBField field, Object value, boolean addXsiType) thr
330335
private String getEntryType(QName qname, Object value) throws JAXBException {
331336
String className = value.getClass().getName();
332337
switch (className) {
333-
case "Integer":
338+
case "java.lang.Integer":
334339
return "xs:int";
335-
case "Boolean":
336-
case "Byte":
337-
case "Short":
338-
case "Long":
339-
case "Float":
340-
case "Double":
341-
return "xs:" + className.toLowerCase();
340+
case "java.lang.Boolean":
341+
case "java.lang.Byte":
342+
case "java.lang.Short":
343+
case "java.lang.Long":
344+
case "java.lang.Float":
345+
case "java.lang.Double":
346+
return "xs:" + className.substring(10).toLowerCase();
342347
case "java.lang.String":
343348
return "xs:string";
344349
case "java.math.BigInteger":
@@ -572,18 +577,19 @@ private void writeFieldMap(JSJAXBClass jaxbClass, JSJAXBField field, Map<?, ?> m
572577
output(">\n");
573578
QName qn = field.qualifiedName;
574579
Object eval = field.mapEntryValue;
575-
boolean addXsiType = ((field.holdsObjects & JSJAXBField.MAP_KEY_OBJECT) != 0);
580+
boolean addXsiTypeKey = ((field.holdsObjects & JSJAXBField.MAP_KEY_OBJECT) != 0);
581+
boolean addXsiTypeVal = ((field.holdsObjects & JSJAXBField.MAP_VALUE_OBJECT) != 0);
576582
for (Entry<?, ?> e : map.entrySet()) {
577583
Object key = e.getKey();
578584
Object value = e.getValue();
579585
output("<entry>");
580586
field.qualifiedName = qnEntryKey;
581587
field.mapEntryValue = key;
582-
addFieldListable(jaxbClass, field, key, addXsiType);
588+
addFieldListable(jaxbClass, field, key, addXsiTypeKey);
583589
if (value != null || isNillable) {
584590
field.mapEntryValue = value;
585591
field.qualifiedName = qnEntryValue;
586-
addFieldListable(jaxbClass, field, value, addXsiType);
592+
addFieldListable(jaxbClass, field, value, addXsiTypeVal);
587593
}
588594
output("\n</entry>\n");
589595
}

sources/net.sf.j2s.java.core/src/test/Test_JAXB_ORDERED.java

Lines changed: 55 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -2,24 +2,22 @@
22

33
import java.io.ByteArrayInputStream;
44
import java.io.ByteArrayOutputStream;
5-
import java.io.UnsupportedEncodingException;
6-
import java.util.GregorianCalendar;
5+
import java.io.FileInputStream;
6+
import java.io.FileOutputStream;
7+
import java.io.IOException;
8+
import java.io.InputStream;
9+
import java.io.OutputStream;
710

811
import javax.xml.bind.JAXBContext;
912
import javax.xml.bind.JAXBException;
1013
import javax.xml.bind.Marshaller;
1114
import javax.xml.bind.Unmarshaller;
12-
import javax.xml.bind.annotation.XmlRegistry;
13-
import javax.xml.datatype.DatatypeConfigurationException;
14-
import javax.xml.datatype.DatatypeFactory;
15-
import javax.xml.datatype.XMLGregorianCalendar;
1615
import javax.xml.stream.FactoryConfigurationError;
1716
import javax.xml.stream.XMLInputFactory;
1817
import javax.xml.stream.XMLStreamException;
1918
import javax.xml.stream.XMLStreamReader;
2019

2120
import test.jaxb.Root_ORDERED;
22-
import test.jaxb.Root_ORDERED.SomewhatComplex;
2321

2422
/**
2523
* tests:
@@ -45,39 +43,59 @@
4543
public class Test_JAXB_ORDERED extends Test_ {
4644

4745
public static void main(String[] args) {
48-
JAXBContext jc;
46+
// test read/write of own type
47+
readWrite(null, null);
4948
try {
50-
jc = JAXBContext.newInstance("test.jaxb");
51-
Root_ORDERED root = new Root_ORDERED("test");
52-
Marshaller marshaller = jc.createMarshaller();
53-
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
54-
ByteArrayOutputStream bos = new ByteArrayOutputStream();
55-
marshaller.marshal(root, bos);
56-
String s = null;
57-
try {
58-
s = new String(bos.toByteArray(), "UTF-8");
59-
System.out.println(s);
60-
Unmarshaller unmarshaller = jc.createUnmarshaller();
61-
ByteArrayInputStream is = new ByteArrayInputStream(s.getBytes("UTF-8"));
62-
XMLStreamReader streamReader;
63-
Root_ORDERED r = null;
64-
65-
try {
66-
streamReader = XMLInputFactory.newInstance().createXMLStreamReader(is);
67-
r = (Root_ORDERED) unmarshaller.unmarshal(streamReader, Root_ORDERED.class).getValue();
68-
} catch (XMLStreamException | FactoryConfigurationError e) {
69-
// TODO Auto-generated catch block
70-
e.printStackTrace();
71-
}
49+
boolean isJS = /**@j2sNative true || */false;
50+
// test read/write of xml written by Java if JS; JS if Java
51+
String prefix = (isJS ? "swingjs/j2s/" : "src/");
52+
String fjs = prefix +"test/jaxb_ordered_from_JS.xml";
53+
String fjava = prefix + "test/jaxb_ordered_from_Java.xml";
54+
String outfile = isJS ? fjs : fjava;
55+
String infile = isJS? fjava : fjs;
56+
FileOutputStream fos = new FileOutputStream(outfile);
57+
readWrite(null, fos);
58+
fos.close();
59+
FileInputStream fis = new FileInputStream(infile);
60+
readWrite(fis, null);
61+
System.out.println("File written to " + outfile);
62+
System.out.println("File read from " + infile);
63+
fis.close();
64+
System.out.println("Test_JAXB_ORDERED OK");
65+
} catch (IOException e) {
66+
e.printStackTrace();
67+
assert(false);
68+
}
69+
}
7270

73-
r.validate();
74-
75-
} catch (UnsupportedEncodingException e) {
76-
e.printStackTrace();
71+
/**
72+
* read from a file OR write to a file
73+
*
74+
* @param in
75+
* @param out ignored if in is not null
76+
*/
77+
private static void readWrite(InputStream in, OutputStream out) {
78+
try {
79+
JAXBContext jc = JAXBContext.newInstance("test.jaxb");
80+
if (in == null) {
81+
Root_ORDERED root = new Root_ORDERED("test");
82+
Marshaller marshaller = jc.createMarshaller();
83+
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
84+
ByteArrayOutputStream bos = new ByteArrayOutputStream();
85+
marshaller.marshal(root, bos);
86+
byte[] bytes = bos.toByteArray();
87+
if (out != null)
88+
out.write(bos.toByteArray());
89+
String s = new String(bytes, "UTF-8");
90+
System.out.println(s);
91+
in = new ByteArrayInputStream(s.getBytes("UTF-8"));
7792
}
78-
79-
System.out.println("Test_JAXB_ORDERED OK");
80-
} catch (JAXBException e) {
93+
XMLStreamReader streamReader;
94+
streamReader = XMLInputFactory.newInstance().createXMLStreamReader(in);
95+
Unmarshaller unmarshaller = jc.createUnmarshaller();
96+
Root_ORDERED r = (Root_ORDERED) unmarshaller.unmarshal(streamReader, Root_ORDERED.class).getValue();
97+
r.validate();
98+
} catch (JAXBException | XMLStreamException | FactoryConfigurationError | IOException e) {
8199
// TODO Auto-generated catch block
82100
e.printStackTrace();
83101
}

sources/net.sf.j2s.java.core/src/test/jaxb/Root_ORDERED.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,19 +17,16 @@
1717
import javax.xml.bind.annotation.XmlEnum;
1818
import javax.xml.bind.annotation.XmlEnumValue;
1919
import javax.xml.bind.annotation.XmlID;
20-
import javax.xml.bind.annotation.XmlIDREF;
2120
import javax.xml.bind.annotation.XmlList;
2221
import javax.xml.bind.annotation.XmlRootElement;
2322
import javax.xml.bind.annotation.XmlSchemaType;
2423
import javax.xml.bind.annotation.XmlSeeAlso;
2524
import javax.xml.bind.annotation.XmlType;
26-
import javax.xml.bind.annotation.XmlValue;
2725
import javax.xml.bind.annotation.adapters.HexBinaryAdapter;
2826
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
2927
import javax.xml.datatype.DatatypeConfigurationException;
3028
import javax.xml.datatype.DatatypeFactory;
3129
import javax.xml.datatype.XMLGregorianCalendar;
32-
import javax.xml.namespace.QName;
3330

3431

3532
// adapted source: http://blog.bdoughan.com/2011/06/using-jaxbs-xmlaccessortype-to.html
@@ -180,6 +177,7 @@ public void validate() {
180177
assert(b.equals("b"));
181178
assert(c.equals("c"));
182179
assert(hm.containsKey("null") && hm.get("null") == null);
180+
assert(hm.containsKey("map") && hm.get("map").getClass().getName().equals("test.jaxb.Root_ORDERED$SomewhatComplex"));
183181

184182
assert(getCreationDate().toString().indexOf("T") < 0 && getCreationDate().toString().indexOf("0") > 0);
185183
assert(((test.jaxb.Obj) f5[1]).obj1.equals("jaxb#Obj1"));
@@ -191,9 +189,9 @@ public void validate() {
191189
assert(IFArray[0].equals(Integer.valueOf(2)) && IFArray[1].equals(Float.valueOf(2.1f)));
192190
assert(IFList.get(0).equals(Integer.valueOf(2)) && IFList.get(1).equals(Float.valueOf(2.1f)));
193191

194-
195192
System.out.println(date);
196193
assert(date.equals(new Date("10/20/2018")));
194+
System.out.println("validation for " + getClass().getName() + " OK");
197195
}
198196

199197
// private QName qname;
@@ -248,8 +246,7 @@ public static class SomewhatComplex {
248246

249247

250248
public SomewhatComplex() {
251-
System.out.println("new somewhatcomplex");
252-
249+
System.out.println("new somewhatcomplex");
253250
}
254251

255252
public SomewhatComplex(String id) {
@@ -273,6 +270,10 @@ public SomewhatComplex(String id) {
273270
@XmlAttribute
274271
public byte[] bytes;
275272

273+
@Override
274+
public String toString() {
275+
return "SomewhatComplex:" + id;
276+
}
276277
}
277278

278279
private final static String x = "date";
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
2+
<ns2:Root_ORDERED xmlns:ns2="root.ordered" xmlns:ns3="package-namespace" xmlns:ns4="testing" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" date="2018-10-20T05:00:00.000Z" byteshex="6465" bytes64="ZGU=" moreAttr="more&amp;amp;" ok="ok" id="test" type="cust">
3+
<ns3:f5 xsi:type="xs:float">1.25</ns3:f5>
4+
<ns3:f5 xmlns:ns5="stolaf.edu" xsi:type="ns5:objclass" xmlns:ns6="www.jalview.org" id="jaxb2.obj">
5+
<ns6:Obj1>jaxb#Obj1</ns6:Obj1></ns3:f5>
6+
<ns3:position>12345678910</ns3:position>
7+
<ns4:what xsi:type="xs:int">3</ns4:what>
8+
<ns3:int>2</ns3:int>
9+
<ns3:float>2.1</ns3:float>
10+
<ns3:intlist>2</ns3:intlist>
11+
<ns3:floatlist>2.1</ns3:floatlist>
12+
<ns3:hm1>
13+
<entry>
14+
<key>null</key>
15+
</entry>
16+
<entry>
17+
<key>testing</key>
18+
<value xsi:type="xs:string">TESTING</value>
19+
</entry>
20+
<entry>
21+
<key>map</key>
22+
<value xmlns:ns7="st.Olaf" xsi:type="ns7:MoreComplex" xmlns:ns8="www.jalview.org2" ns8:cb="c&quot;&amp;lt;&amp;gt;b&amp;amp; &#8491;" bytes="ZGU=">
23+
<ns7:id>id#map</ns7:id>
24+
<ns7:ca>c"&amp;lt;&amp;gt;b&amp;amp; &#8491;</ns7:ca></value>
25+
</entry>
26+
</ns3:hm1>
27+
<ns3:hm2>
28+
<entry>
29+
<key xsi:type="xs:int">-1</key>
30+
<value>V1</value>
31+
</entry>
32+
<entry>
33+
<key xsi:type="xs:int">-2</key>
34+
</entry>
35+
<entry>
36+
<key xsi:type="xs:int">-3</key>
37+
<value>V3</value>
38+
</entry>
39+
</ns3:hm2>
40+
<ns3:cx xmlns:ns7="st.Olaf" xmlns:ns8="www.jalview.org2" ns8:cb="c&quot;&amp;lt;&amp;gt;b&amp;amp; &#8491;" bytes="Y2U=">
41+
<ns7:id>id##??</ns7:id>
42+
<ns7:ca>c"&amp;lt;&amp;gt;b&amp;amp; &#8491;</ns7:ca></ns3:cx>
43+
<ns3:list0 xmlns:ns7="st.Olaf" xsi:type="ns7:MoreComplex" xmlns:ns8="www.jalview.org2" ns8:cb="c&quot;&amp;lt;&amp;gt;b&amp;amp; &#8491;" bytes="ZGU=">
44+
<ns7:id>id#List</ns7:id>
45+
<ns7:ca>c"&amp;lt;&amp;gt;b&amp;amp; &#8491;</ns7:ca></ns3:list0>
46+
<ns3:list0 xsi:type="xs:string">list0[1]</ns3:list0>
47+
<ns3:list0 xsi:type="xs:string">list0[2]</ns3:list0>
48+
<creationDate>2020-01-13-06:00</creationDate>
49+
<ns3:c>c</ns3:c>
50+
<ns3:b>b</ns3:b>
51+
<ns3:a>a</ns3:a>
52+
<ns3:s xsi:type="xs:string">a</ns3:s>
53+
<ns3:s xsi:type="xs:string">b</ns3:s>
54+
<ns3:s xsi:nil="true" />
55+
<ns3:i>1 2 3</ns3:i>
56+
<ns3:I>2</ns3:I>
57+
<ns3:list1>
58+
<ns3:list xsi:type="xs:string">TESTING</ns3:list>
59+
<ns3:list xsi:type="xs:string">null</ns3:list>
60+
<ns3:list xmlns:ns7="st.Olaf" xsi:type="ns7:MoreComplex" xmlns:ns8="www.jalview.org2" ns8:cb="c&quot;&amp;lt;&amp;gt;b&amp;amp; &#8491;" bytes="ZGU=">
61+
<ns7:id>id#idList#1</ns7:id>
62+
<ns7:ca>c"&amp;lt;&amp;gt;b&amp;amp; &#8491;</ns7:ca></ns3:list>
63+
<ns3:list xsi:type="xs:boolean">true</ns3:list>
64+
<ns3:list xsi:type="xs:byte">1</ns3:list>
65+
<ns3:list xsi:type="xs:short">2</ns3:list>
66+
<ns3:list xsi:type="xs:int">3</ns3:list>
67+
<ns3:list xsi:type="xs:long">4</ns3:list>
68+
<ns3:list xsi:type="xs:float">6.6</ns3:list>
69+
<ns3:list xsi:type="xs:double">8.9</ns3:list>
70+
<ns3:list xsi:type="xs:integer">12345678910111213141516</ns3:list>
71+
</ns3:list1>
72+
<ns3:bi>1234567890123456789012345</ns3:bi>
73+
<ns3:bd>123.456</ns3:bd>
74+
<ns3:f>1.2</ns3:f>
75+
<ns3:f2>1.2</ns3:f2>
76+
<ns3:f3>1.2</ns3:f3>
77+
<ns3:f4>1.3</ns3:f4>
78+
<ns3:f6 xsi:type="xs:int">3</ns3:f6>
79+
<ns3:I2 xsi:nil="true" />
80+
<ns3:I2>2</ns3:I2>
81+
<ns3:I2 xsi:nil="true" />
82+
<ns3:moreElem>more&amp;amp;</ns3:moreElem>
83+
</ns2:Root_ORDERED>

0 commit comments

Comments
 (0)