@@ -558,8 +558,8 @@ private void reportError(String message, Exception ex) {
558558 reportError (message , ex , 500 );
559559 }
560560
561- private boolean isFeedRequested (MediaType mt ) {
562- if ("entry" .equals (mt .getParameters ().get ("type" ))) {
561+ protected boolean isFeedRequested (MediaType mt ) {
562+ if ("entry" .equalsIgnoreCase (mt .getParameters ().get ("type" ))) {
563563 return false ;
564564 }
565565 return true ;
@@ -600,25 +600,29 @@ public Object readFrom(Class<Object> cls, Type type, Annotation[] anns, MediaTyp
600600 boolean isFeed = isFeedRequested (mt );
601601
602602 if (isFeed ) {
603- return readFromFeed (cls , mt , headers , is );
603+ return readFromFeedOrEntry (cls , mt , headers , is );
604604 } else {
605605 AtomEntryProvider p = new AtomEntryProvider ();
606606 p .setAutodetectCharset (autodetectCharset );
607607 Entry entry = p .readFrom (Entry .class , Entry .class ,
608608 new Annotation []{}, mt , headers , is );
609- return readFromEntry (entry , cls , mt , headers , is );
609+ return readFromEntry (entry , cls );
610610 }
611611 }
612612
613613 @ SuppressWarnings ("unchecked" )
614- private Object readFromFeed (Class <Object > cls , MediaType mt ,
614+ private Object readFromFeedOrEntry (Class <Object > cls , MediaType mt ,
615615 MultivaluedMap <String , String > headers , InputStream is )
616616 throws IOException {
617617
618618 AtomFeedProvider p = new AtomFeedProvider ();
619619 p .setAutodetectCharset (autodetectCharset );
620- Feed feed = p .readFrom (Feed .class , Feed .class , new Annotation []{}, mt , headers , is );
621-
620+ Object atomObject = p .readFrom (Feed .class , Feed .class , new Annotation []{}, mt , headers , is );
621+ if (atomObject instanceof Entry ) {
622+ return this .readFromEntry ((Entry )atomObject , cls );
623+ }
624+
625+ Feed feed = (Feed )atomObject ;
622626 AtomElementReader <?, ?> reader = getAtomReader (cls );
623627 if (reader != null ) {
624628 return ((AtomElementReader <Feed , Object >)reader ).readFrom (feed );
@@ -631,7 +635,7 @@ private Object readFromFeed(Class<Object> cls, MediaType mt,
631635 = (Class <Object >)InjectionUtils .getActualType (m .getGenericParameterTypes ()[0 ]);
632636 List <Object > objects = new ArrayList <Object >();
633637 for (Entry e : feed .getEntries ()) {
634- objects .add (readFromEntry (e , realCls , mt , headers , is ));
638+ objects .add (readFromEntry (e , realCls ));
635639 }
636640 instance = cls .newInstance ();
637641 m .invoke (instance , new Object []{objects });
@@ -643,20 +647,22 @@ private Object readFromFeed(Class<Object> cls, MediaType mt,
643647 }
644648
645649 @ SuppressWarnings ("unchecked" )
646- private Object readFromEntry (Entry entry , Class <Object > cls , MediaType mt ,
647- MultivaluedMap <String , String > headers , InputStream is )
650+ private Object readFromEntry (Entry entry , Class <Object > cls )
648651 throws IOException {
649652
650653 AtomElementReader <?, ?> reader = getAtomReader (cls );
651654 if (reader != null ) {
652655 return ((AtomElementReader <Entry , Object >)reader ).readFrom (entry );
653656 }
654- try {
655- Unmarshaller um =
656- jaxbProvider .getJAXBContext (cls , cls ).createUnmarshaller ();
657- return cls .cast (um .unmarshal (new StringReader (entry .getContent ())));
658- } catch (Exception ex ) {
659- reportError ("Object of type " + cls .getName () + " can not be deserialized from Entry" , ex , 400 );
657+ String entryContent = entry .getContent ();
658+ if (entryContent != null ) {
659+ try {
660+ Unmarshaller um =
661+ jaxbProvider .getJAXBContext (cls , cls ).createUnmarshaller ();
662+ return cls .cast (um .unmarshal (new StringReader (entryContent )));
663+ } catch (Exception ex ) {
664+ reportError ("Object of type " + cls .getName () + " can not be deserialized from Entry" , ex , 400 );
665+ }
660666 }
661667 return null ;
662668 }
0 commit comments