@@ -30,69 +30,69 @@ class JSJAXBClass implements Cloneable {
3030 final static int TYPE_PROPERTY = 3 ;
3131
3232 /**
33- * This class's accessorType. We need explicit
34- * propOrder or XmlAttribute or XmlElement.
33+ * This class's accessorType. We need explicit propOrder or XmlAttribute or
34+ * XmlElement.
3535 *
36- * This field is not used, because all this is determined
37- * during transpilation. BUT...
38- * Note that the Java2Script transpiler currently does not
39- * honor package-info.java annotations for this. TODO
36+ * This field is not used, because all this is determined during transpilation.
37+ * BUT... Note that the Java2Script transpiler currently does not honor
38+ * package-info.java annotations for this. TODO
4039 *
4140 */
4241 int accessorType = TYPE_PUBLIC_MEMBER ;
4342
4443 private boolean isMarshaller ;
4544
4645 private String unmarshallerDefaultNamespace ;
47-
48- QName qname = new QName ("" , "##default" , "" );
46+
47+ private QName qname = new QName ("" , "##default" , "" );
4948 QName qualifiedTypeName ;
5049
5150 /**
52- * for the root, null, but for fields that need unmarshalling, the field that
53- * is being filled by this unmarshalling
51+ * for the root, null, but for fields that need unmarshalling, the field that is
52+ * being filled by this unmarshalling
5453 */
5554 JSJAXBField tagField ;
5655
5756 /**
5857 * from XmlType(name=""), but not used
5958 */
60- boolean isAnonymous ;
61-
59+ boolean isAnonymous ;
60+
6261 /**
63- * XmlIDREF
62+ * XmlIDREF
6463 */
6564 boolean isXmlIDREF ;
6665 JSJAXBField xmlIDField ;
67-
66+
6867 boolean isEnum ;
69-
68+
7069 List <String > propOrder = new ArrayList <String >();
7170 List <JSJAXBField > fields = new ArrayList <JSJAXBField >();
72-
71+
7372 private Map <String , JSJAXBField > marshallerFieldMap = new Hashtable <String , JSJAXBField >();
7473
7574 /**
7675 * holds the enum name/value pairs for marshaller and unmarshaller
7776 */
7877 Map <Object , Object > enumMap ;
7978 String enumClassType ;
80-
79+
8180 JSJAXBField xmlValueField ;
8281 final Map <String , JSJAXBField > unmarshallerFieldMap = new Hashtable <String , JSJAXBField >();
8382
8483 Class <?> javaClass ; // for JavaScript debugging
8584 private Object javaObject ;
8685 List <String > seeAlso ;
87-
8886
8987 transient Object tagObject ;
9088 private String createName ;
9189 private boolean isInnerClass ;
92-
90+
91+ QName declaredTypeName ;
92+
9393 private static String packageNamespace ;
9494 private static String packageAccessorType ;
95-
95+
9696 private final static Map <String , String > marshallerNamespacePrefixes = new Hashtable <String , String >();
9797 private final static Map <String , XmlAdapter > adapterMap = new HashMap <String , XmlAdapter >();
9898
@@ -110,22 +110,22 @@ private static void getDefaultNamespaceFromPackageInfo(Class<?> javaClass) {
110110 packageNamespace = "" ;
111111 InputStream is = javaClass .getResourceAsStream ("_$.js" );
112112 if (is != null ) {
113- String data = Rdr .streamToUTF8String (new BufferedInputStream (is ));
114- data = PT .getQuotedAttribute (data , "namespace" );
115- if (data != null )
116- packageNamespace = data ;
113+ String data = Rdr .streamToUTF8String (new BufferedInputStream (is ));
114+ data = PT .getQuotedAttribute (data , "namespace" );
115+ if (data != null )
116+ packageNamespace = data ;
117117 }
118118 }
119119
120120 JSJAXBClass (Class <?> javaClass , Object javaObject , boolean isXmlIDREF , boolean isMarshaller , QName qname ) {
121121 this .isMarshaller = isMarshaller ;
122122 this .javaClass = javaClass ;
123- isInnerClass = /** @j2sNative !!javaClass.$clazz$.__CLASS_NAME$__ || */ false ;
123+ isInnerClass = /** @j2sNative !!javaClass.$clazz$.__CLASS_NAME$__ || */
124+ false ;
124125 this .javaObject = javaObject ;
126+ this .qname = qname ; // from JAXBElement constructor in ObjectFactory
125127 checkC$__ANN__ (this , javaClass , javaObject != null || javaClass .isEnum (), isXmlIDREF );
126128 this .isXmlIDREF = isXmlIDREF ;
127- if (qname != null )
128- setQName (qname ); // from JAXBElement constructor
129129 }
130130
131131 /**
@@ -136,7 +136,8 @@ private static void getDefaultNamespaceFromPackageInfo(Class<?> javaClass) {
136136 * @return
137137 */
138138 @ SuppressWarnings ("unused" )
139- static boolean checkC$__ANN__ (JSJAXBClass jsjaxbClass , Class <?> javaClass , boolean haveJavaObject , boolean isXmlIDREF ) {
139+ static boolean checkC$__ANN__ (JSJAXBClass jsjaxbClass , Class <?> javaClass , boolean haveJavaObject ,
140+ boolean isXmlIDREF ) {
140141 getDefaultNamespaceFromPackageInfo (javaClass );
141142 boolean isTop = true ;
142143 while (javaClass != null ) {
@@ -146,12 +147,15 @@ private static void getDefaultNamespaceFromPackageInfo(Class<?> javaClass) {
146147// ['cb','String',['@XmlAttribute(namespace="www.jalview.org2")']],
147148// ['bytes','[array]',['@XmlAttribute']]];
148149
149- Object clazz = (/** @j2sNative javaClass.$clazz$ || */ null );
150+ Object clazz = (/** @j2sNative javaClass.$clazz$ || */
151+ null );
150152 if (clazz == null )
151153 break ;
152- Object [][][] jsdata = (/** @j2sNative clazz.__ANN__ || */ null );
153- String className = (/** @j2sNative clazz.__CLASS$NAME__ || clazz.__CLASS_NAME__ || */ null );
154-
154+ Object [][][] jsdata = (/** @j2sNative clazz.__ANN__ || */
155+ null );
156+ String className = (/** @j2sNative clazz.__CLASS$NAME__ || clazz.__CLASS_NAME__ || */
157+ null );
158+
155159 if (!isTop ) {
156160 className = null ;
157161 }
@@ -198,7 +202,7 @@ public void addSeeAlso(String... javaClassName) {
198202 if (seeAlso == null )
199203 seeAlso = new ArrayList <>();
200204 for (int i = 0 ; i < javaClassName .length ; i ++)
201- seeAlso .add (javaClassName [i ]);
205+ seeAlso .add (javaClassName [i ]);
202206 }
203207
204208 private void addField (JSJAXBField field ) {
@@ -244,13 +248,17 @@ static XmlAdapter getAdapter(String adapterClass) {
244248
245249 void setUnmarshallerDefaultNamespace (String namespace ) {
246250 if (namespace != null )
247- this .unmarshallerDefaultNamespace = namespace ;
251+ this .unmarshallerDefaultNamespace = namespace ;
248252 }
249253
250254 String getUnmarshallerDefaultNamespace () {
251255 return unmarshallerDefaultNamespace ;
252256 }
253257
258+ public QName getQName () {
259+ return qname ;
260+ }
261+
254262 void setQName (QName qualifiedName ) {
255263 if (qname .getPrefix ().length () > 0 )
256264 return ;
@@ -272,13 +280,74 @@ static boolean hasAnnotations(Object value) {
272280 return false ;
273281 try {
274282 // Date does not have a class?
275- Class <?> cl = value .getClass ();
276- return (/** @j2sNative (value.$clazz$ ? !!value.$clazz$.__ANN__ : cl.$clazz$ ? !!cl.$clazz$.__ANN__ : 0) || */ false );
283+ Class <?> cl = value .getClass ();
284+ return (/**
285+ * @j2sNative (value.$clazz$ ? !!value.$clazz$.__ANN__ : cl.$clazz$ ?
286+ * !!cl.$clazz$.__ANN__ : 0) ||
287+ */
288+ false );
277289 } catch (Throwable t ) {
278290 return false ;
279291 }
280292 }
281293
294+ QName finalizeFieldQName (QName qName , String defaultName , int type ) {
295+ if (qName == null )
296+ qName = new QName ("##default" , "##default" , "" );
297+ String namespace = qName .getNamespaceURI ();
298+ if (namespace .equals ("##default" ))
299+ namespace = getDefaultNamespace (type );
300+ String name = qName .getLocalPart ();
301+ if (name .equals ("##default" )) {
302+ switch (type ) {
303+ case JSJAXBField .TYPE_ROOT_ELEMENT :
304+ if (qname != null ) {
305+ // from JAXBElement constructor in ObjectFactory
306+ name = qname .getLocalPart ();
307+ break ;
308+ }
309+ // fall through //
310+ case JSJAXBField .TYPE_XML_TYPE :
311+ name = JSJAXBClass .getXmlNameFromClassName (defaultName );
312+ break ;
313+ case JSJAXBField .TYPE_ATTRIBUTE :
314+ case JSJAXBField .TYPE_ELEMENT :
315+ name = defaultName ;
316+ break ;
317+ }
318+ }
319+ QName qname = new QName (namespace , name , JSJAXBClass .getPrefixFor (namespace ));
320+ switch (type ) {
321+ case JSJAXBField .TYPE_ROOT_ELEMENT :
322+ return this .qname = qname ;
323+ case JSJAXBField .TYPE_XML_TYPE :
324+ return this .qname = qualifiedTypeName = qname ;
325+ case JSJAXBField .TYPE_ATTRIBUTE :
326+ case JSJAXBField .TYPE_ELEMENT :
327+ return qname ;
328+ }
329+ // not possible
330+ return null ;
331+ }
332+
333+ private boolean haveXMLTypeNamespace = true ;
334+
335+ private String getDefaultNamespace (int type ) {
336+ switch (type ) {
337+ case JSJAXBField .TYPE_ROOT_ELEMENT :
338+ return (isInnerClass || qname == null ? packageNamespace : qname .getNamespaceURI ());
339+ case JSJAXBField .TYPE_XML_TYPE :
340+ haveXMLTypeNamespace = false ;
341+ return qname .getNamespaceURI ();
342+ case JSJAXBField .TYPE_ATTRIBUTE :
343+ return "" ;
344+ case JSJAXBField .TYPE_ELEMENT :
345+ return (haveXMLTypeNamespace ? qname .getNamespaceURI () : packageNamespace );
346+ }
347+ // not possible
348+ return null ;
349+ }
350+
282351 public JSJAXBClass clone () {
283352 try {
284353 JSJAXBClass jaxbClass = (JSJAXBClass ) super .clone ();
@@ -292,28 +361,4 @@ public JSJAXBClass clone() {
292361 }
293362 }
294363
295- QName finalizeFieldQName (QName qName , String defaultName ) {
296- if (qName == null )
297- qName = new QName ("##default" , "##default" , "" );
298- String namespace = qName .getNamespaceURI ();
299- String name = qName .getLocalPart ();
300- if (namespace .equals ("##default" ))
301- namespace = getDefaultNamespace ();
302- if (name .equals ("##default" ))
303- name = JSJAXBClass .getXmlNameFromClassName (defaultName );
304- String prefix = JSJAXBClass .getPrefixFor (namespace );
305- return new QName (namespace , name , prefix );
306- }
307-
308- private String getDefaultNamespace () {
309- return (isInnerClass && qualifiedTypeName != null ? qualifiedTypeName .getNamespaceURI () : packageNamespace );
310- }
311-
312- public QName getQName () {
313-
314- // TODO Auto-generated method stub
315- return null ;
316- }
317-
318-
319364}
0 commit comments