@@ -92,6 +92,9 @@ class JSJAXBField implements Cloneable {
9292 boolean isArray ;
9393 boolean isByteArray ;
9494 boolean isContainer ;
95+ boolean isNotPublic ;
96+
97+ boolean ignore ;
9598
9699 /// private only
97100
@@ -104,6 +107,9 @@ class JSJAXBField implements Cloneable {
104107 private int index ;
105108 private Object clazz ; // for debugging only
106109
110+ String methodName ;
111+
112+
107113 JSJAXBField (JSJAXBField listOwner ) {
108114 this .listOwner = listOwner ;
109115 }
@@ -156,7 +162,16 @@ class JSJAXBField implements Cloneable {
156162 getMethods (jaxbClass .getJavaObject (), clazz );
157163 Map <String , String > attr = new Hashtable <String , String >();
158164 text = "" ;
159- readAnnotations (jaxbClass , (String []) adata [1 ], propOrder , attr );
165+ String [] attrs = (String []) adata [1 ];
166+ if (adata [0 ].length == 4 ) {
167+ // new style has the full class name, not just @XmlRootElement
168+ String [] classes = (String []) adata [0 ][3 ];
169+ for (int i = classes .length ; --i >= 0 ;) {
170+ attrs [i ] = "@" + classes [i ] + "(" + attrs [i ] + ")" ;
171+ }
172+ }
173+ readAnnotations (jaxbClass , attrs , propOrder , attr );
174+
160175 // ensure that we have a qualified name if appropriate
161176 finalizeNames (index , jaxbClass );
162177 }
@@ -280,7 +295,6 @@ private void processTypeAnnotation(JSJAXBClass jaxbClass, String tag, String dat
280295 case "@XmlSchema" :
281296 return ;
282297 }
283-
284298 // check type annotations:
285299 switch (tag ) {
286300 case "@XmlRootElement" :
@@ -300,9 +314,7 @@ private void processTypeAnnotation(JSJAXBClass jaxbClass, String tag, String dat
300314 }
301315 return ;
302316 case "@XmlAccessorType" :
303- jaxbClass .accessorType = (data .indexOf ("FIELD" ) >= 0 ? JSJAXBClass .TYPE_FIELD
304- : data .indexOf ("MEMBER" ) >= 0 ? JSJAXBClass .TYPE_PUBLIC_MEMBER
305- : data .indexOf ("PROPERTY" ) >= 0 ? JSJAXBClass .TYPE_PROPERTY : JSJAXBClass .TYPE_NONE );
317+ jaxbClass .accessorType = JSJAXBClass .parseAccessorType (data );
306318 return ;
307319 case "@XmlSeeAlso" :
308320 // @XmlSeeAlso({Dog.class,Cat.class})
@@ -330,39 +342,60 @@ private void processTypeAnnotation(JSJAXBClass jaxbClass, String tag, String dat
330342 */
331343 private void processFieldAnnotation (JSJAXBClass jaxbClass , String tag , String data , Map <String , String > attr ) {
332344 switch (tag ) {
345+ case "!XmlPublic" :
346+ // transpiler has added this tag for each field and method because XmlAccessorType was not indicated in
347+ // the class file
348+ isNotPublic = data .equals ("false" );
349+ switch (jaxbClass .accessorType ) {
350+ case JSJAXBClass .TYPE_PUBLIC_MEMBER :
351+ ignore = isNotPublic ;
352+ break ;
353+ case JSJAXBClass .TYPE_NONE :
354+ ignore = true ;
355+ break ;
356+ case JSJAXBClass .TYPE_FIELD :
357+ ignore = isMethod ;
358+ break ;
359+ case JSJAXBClass .TYPE_PROPERTY :
360+ ignore = !isMethod ;
361+ break ;
362+ }
363+ if (!ignore )
364+ javaName = null ;
365+ break ;
333366 case "!XmlInner" :
334367 jaxbClass .addSeeAlso (javaClassName );
335368 javaName = null ;
336369 return ;
337370 case "@XmlTransient" :
338371 isTransient = true ;
339- return ;
372+ break ;
340373 case "@XmlAttribute" :
341374 isAttribute = true ;
342375 if (isContainer )
343376 asList = true ;
344377 qualifiedName = getName (tag , attr );
345- return ;
378+ break ;
346379 case "@XmlElements" :
347380 listFields = new ArrayList <JSJAXBField >();
348- return ;
381+ break ;
349382 case "@XmlElement" :
350383 if (listFields != null ) {
351384 JSJAXBField f = new JSJAXBField (this );
352385 listFields .add (f );
353386 f .processFieldAnnotation (jaxbClass , tag , data , attr );
354- f .javaClassName = stripJavaLang (f .javaClassName ).replace (".class" , "" );
387+ f .javaClassName = stripJavaLang (f .javaClassName ).replace (".class" , "" );
355388 f .javaName = javaName + "::" + f .javaClassName ;
356389 f .finalizeNames (index , jaxbClass );
357- return ;
390+ break ;
358391 }
359392 qualifiedName = getName (tag , attr );
360393 isNillable = "true" .equals (attr .get ("@XmlElement:nillable" ));
361394 defaultValue = attr .get ("@XmlElement:defaultValue" );
362395 String type = attr .get ("@XmlElement:type" );
363396 if (type != null )
364397 javaClassName = type ;
365- return ;
398+ break ;
366399 case "@XmlSchemaType" :
367400 xmlSchemaType = attr .get ("@XmlSchemaType:name" );
368401 if (xmlSchemaType .equals ("hexBinary" )) {
@@ -379,45 +412,48 @@ private void processFieldAnnotation(JSJAXBClass jaxbClass, String tag, String da
379412 //
380413 // @XmlSchemaType(name="base64Binary")
381414 // public byte[] base64Bytes;
382- return ;
415+ break ;
383416 case "@XmlJavaTypeAdapter" :
384417 // typically CollapsedStringAdapter.class
385418 typeAdapter = attr .get ("@XmlJavaTypeAdapter:name" );
386419 if (typeAdapter == null )
387420 typeAdapter = data ;
388421 typeAdapter = getQuotedClass (data );
389- return ;
422+ break ;
390423 case "@XmlValue" :
391424 jaxbClass .xmlValueField = this ;
392425 isXmlValue = true ;
393- return ;
426+ break ;
394427 case "@XmlEnumValue" :
395428 enumValue = data = PT .trim (data , "\" " );
396429 jaxbClass .enumMap .put ("/" + javaName , data ); // for marshaller
397430 jaxbClass .enumMap .put ("//" + data , javaName ); // for unmarshaller
398431 jaxbClass .enumMap .put (data , this ); // for unmarshaller
399- return ;
432+ break ;
400433 case "@XmlList" :
401434 asList = true ;
402- return ;
435+ break ;
403436 case "@XmlID" :
404437 isXmlID = true ;
405438 jaxbClass .xmlIDField = this ;
406- return ;
439+ break ;
407440 case "@XmlIDREF" :
408441 isXmlIDREF = true ;
409- return ;
442+ break ;
410443 case "@XmlMimeType" :
411444 mimeType = attr .get ("@XmlMimeType:name" );
412445 // e.g. @XmlMimeType("application/octet-stream")
413446 // @XmlMimeType("image/jpeg")
414447 // @XmlMimeType("text/xml; charset=iso-8859-1")
415- return ;
448+ break ;
416449 case "@XmlElementWrapper" :
417450 qualifiedWrapName = getName (tag , attr );
418- return ;
451+ break ;
452+ default :
453+ System .out .println ("JSJAXBField Unprocessed field annotation: " + text );
454+ ignore = true ;
455+ break ;
419456 }
420- System .out .println ("JSJAXBField Unprocessed field annotation: " + text );
421457 }
422458
423459 private static String [] getSeeAlso (String data ) {
@@ -551,7 +587,7 @@ private Object findSetMethod(String m, Object[] pm, Object[] jo) {
551587 * Check for methods in C$.$P$[] (private) and object[] (all others)
552588 */
553589 private void getMethods (Object javaObject , Object clazz ) {
554- String methodName = javaName .substring (2 );
590+ methodName = javaName .substring (2 );
555591 Object [] pm = /** @j2sNative clazz.$P$ || */
556592 null ;
557593 Object [] jo = /** @j2sNative clazz.prototype || */
0 commit comments