Re: Discussion: REST support in OFBiz

Posted by Adrian Crum-3 on
URL: http://ofbiz.116.s1.nabble.com/Discussion-REST-support-in-OFBiz-tp3497127p3514936.html

Martin,

Thank you for the feedback! Another alternative that was mentioned
earlier was Apache CXF. Apache CXF and
Enunciate have one thing in common - REST services are implemented in
Java. Some people prefer to work in Java, others prefer configuring
things in XML. I'm the latter.

Btw, I have created a Jira issue where the design is taking place. I
encourage anyone who is interested to check it out. I believe the
solution proposed there makes implementing REST services trivial, and no
Java coding is needed.

https://issues.apache.org/jira/browse/OFBIZ-4274

-Adrian

On 5/11/2011 7:40 AM, Martin Kreidenweis wrote:

> Hi,
>
> On 10.05.2011 13:07, Adrian Crum wrote:
>> After thinking about this for a while, I came to the conclusion that the REST servlet should have
>> its own request config file. REST request elements will be kept in their own config file and that
>> file will be specified in web.xml.
> Why reinvent the wheel? We integrated Enunciate in OFBiz for our REST API. It adheres to the REST
> principles, is actually quite comfortable to use and was not hard to integrate into OFBiz.
> And it generates a nice documentation for the API from your JavaDoc. :)
> Have a look at it here: http://enunciate.codehaus.org/getting_started.html
>
> I'll paste some code snippets to get you started. Just ask if you need more details.
>
> Enunciate brings its own web app, which is actually generated.
> So we put it in hot-deploy/api/build/web-app. We just added the webapp to ofbiz-component.xml:
> <webapp name="api" location="build/webapp/basic-app" mount-point="/api" app-bar-display="false" ...
>
>
> Then you have to integrate enunciate in the build process, the component's build.xml should contain
> something like that:
>
>      <!-- we put the enunciate libraries here: -->
>      <property name="enunciate.home" value="enunciate/enunciate-1.20" />
>      <property name="enunciate.config" value="config/enunciate.xml" />
>      <property name="build.main.dir" value="build/classes/basic-app" />
>      <property name="build.tmp.dir" value="build/tmp" />
>
>      <!-- override classes target to call enunciate -->
>      <target name="classes" description="enunciate specific build step" depends="prepare">
>          <taskdef name="enunciate" classname="org.codehaus.enunciate.main.EnunciateTask">
>              <classpath refid="enunciate.classpath" />
>          </taskdef>
>
>          <delete dir="${build.tmp.dir}" />
>          <mkdir dir="${build.tmp.dir}" />
>
>          <enunciate basedir="src/main" configFile="${enunciate.config}" verbose="true"
> scratchDir="${build.tmp.dir}" generateDir="build/gen-src" compileDir="build/classes"
> buildDir="build/webapp">
>              <include name="**/*.java" />
>              <classpath refid="enunciate.classpath" />
>          </enunciate>
>
>          <javac16/>
>      </target>
>
>
> In the enunciate config file we configured enunciate not to do the actual build itself, but let the
> OFBiz build system do this:
>    <webapp doPackage="false" doLibCopy="false" doCompile="false" mergeWebXML="merge-web.xml">
>
>
> We also have a servlet filter for authorization configured.
>
> And our Enunciate Services all inherit from a BaseService class which provides the OFBiz delegator
> and dispatcher:
>      protected Delegator delegator = DelegatorFactory.getDelegator("default");
>      protected LocalDispatcher dispatcher = GenericDispatcher.getLocalDispatcher("api", delegator);
>
>
> In the Enunciate methods we can then call OFBiz services with dispatcher.runSync() and access the
> OFBiz database using the usual Delegator.
> So our mapping from OFBiz services to the REST paradigm is done in Java code, no XML configuration
> necessary here :-)
>
> Regards
> Martin