Hi
On 24/04/12 15:30, Muller, Anthony wrote:
Hello,

I'm trying to evaluate what it can be done using CXF + Atom but it is quite 
difficult to find information about this topic...

Do you have sample somewhere?

We have some documentation here:
http://cxf.apache.org/docs/jax-rs-data-bindings.html#JAX-RSDataBindings-Atom


I'm starting to write a atom provider... Is it the good way to proceed?

Oh, sorry, see you already starting to extend AtomPojoProvider...
This strategy works well if the actual application code does not 'want' to get Apache Abdera (or other 3rd party Atom library) classes such as Feed or Entry visible. Thta can be handy when say open XML or JSON or Atom-enveloped payload needs to be returned, we'd just do @Produces({"application/atom+xml", "application/xml"}) or similar.

Dealing directly with Abdera Feed & Entry is more flexible and I guess even simpler as you have the direct access to Feed & Entry. The only downside is that you bind the code to Abdera, so switching to Rome or similar would be more difficult. May be not a big issue...

We do no have any specific demos but have some code on the trunk & tests. By default it's really all about registering Atom providers and working with Feed & Entry. Here is the one:

http://svn.apache.org/repos/asf/cxf/branches/2.3.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/AtomBookStore.java

or this one (for Atom-based logging):
http://svn.apache.org/repos/asf/cxf/branches/2.3.x-fixes/rt/management-web/src/main/java/org/apache/cxf/management/web/logging/atom/AtomPullServer.java


The Abdera Feed & Entry are used there


Moreover, it is some documentation about OData support in CXF?

There's no specific OAuth support in CXF but I believe Stephan Klevenz integrated CXF with the Google OData project. I guess having a custom provider is also reasonable. I wonder may be we should update CXF Search extensions to support the OData URI syntax in addition to the FIQL one, need to think about it...

Cheers, Sergey



Regards,
Anthony



public class MyODataProvider extends AtomPojoProvider {

        public MyODataProvider() {
              final Map<String, AbstractAtomElementBuilder<?>>  builders = new 
HashMap<String, AbstractAtomElementBuilder<?>>();
              builders.put(Documents.class.getName(), new 
DocumentsFeedBuilder());
              builders.put(Document.class.getName(), new 
DocumentEntryBuilder());

              setAtomBuilders(builders);
        }
}


class DocumentsFeedBuilder extends AbstractFeedBuilder<Documents>  {

        @Override
        public String getIcon(Documents pojo) {
              return "DocumentsFeedBuilder.getIcon(pojo)";
        }

        @Override
        public String getLogo(Documents pojo) {
              return "DocumentsFeedBuilder.getLogo(pojo)";
        }

        @Override
        public String getTitle(Documents pojo) {
              return "DocumentsFeedBuilder.getTitle(pojo)";
        }

        @Override
        public String getAuthor(Documents pojo) {
              return "DocumentsFeedBuilder.getAuthor(pojo)";
        }

        @Override
        public String getId(Documents pojo) {
              return "DocumentsFeedBuilder.getId(pojo)";
        }

        @Override
        public String getBaseUri(Documents pojo) {
              return "DocumentsFeedBuilder.getBaseUri(pojo)";
        }

        @Override
        public String getUpdated(Documents pojo) {
              return "2012-04-18T17:54:42.155+02:00";
        }

        @Override
        public List<String>  getCategories(Documents pojo) {
              return Collections.emptyList();
        }

        @Override
        public Map<String, String>  getLinks(Documents pojo) {
              return Collections.emptyMap();
        }

}

class DocumentEntryBuilder extends AbstractEntryBuilder<Document>  {

     @Override
        public String getPublished(Document pojo) {
              if(pojo.getUpdated() != null) {
                     return pojo.getUpdated().toGregorianCalendar().toString(); // 
"2012-04-18T17:54:42.155+02:00"
              }
              return null;
     }

     @Override
        public String getSummary(Document pojo) {
        return "DocumentEntryBuilder.getSummary(pojo)";
     }

        @Override
        public String getTitle(Document pojo) {
              return pojo.getName();
        }

        @Override
        public String getAuthor(Document pojo) {
              return "DocumentEntryBuilder.getAuthor(pojo)";
        }

        @Override
        public String getId(Document pojo) {
              return String.valueOf(pojo.getId());
        }

        @Override
        public String getBaseUri(Document pojo) {
              return "DocumentEntryBuilder.getBaseUri(pojo)";
        }

        @Override
        public String getUpdated(Document pojo) {
              if(pojo.getUpdated() != null) {
                     return pojo.getUpdated().toGregorianCalendar().toString(); // 
"2012-04-18T17:54:42.155+02:00"
              }
              return null;
        }

        @Override
        public List<String>  getCategories(Document pojo) {
              return Collections.emptyList();
        }

        @Override
        public Map<String, String>  getLinks(Document pojo) {
              return Collections.emptyMap();
        }
}



--
Sergey Beryozkin

Talend Community Coders
http://coders.talend.com/

Blog: http://sberyozkin.blogspot.com

Reply via email to