Skip to main content

Notice: this Wiki will be going read only early in 2024 and edits will no longer be possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.

Jump to: navigation, search

Tutorial: CXF or Jersey for JaxRS Remote Services

Revision as of 19:23, 2 July 2018 by Slewis.composent.com (Talk | contribs) (Created page with "==Introduction== With ECF 3.14, it's possible to use [https://github.com/ECF/JaxRSProviders CXF] running on Karaf as an ECF [ distribution provider] for JaxRS-based remote se...")

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Introduction

With ECF 3.14, it's possible to use CXF running on Karaf as an ECF [ distribution provider] for JaxRS-based remote services. This tutorial goes through setting up and running such an example.

Requirements: Karaf 4.2+ running on Java 8.

Install of CXF Server and Client Via Karaf Console

Add the ECF repo:

karaf@root()>feature:repo-add ecf

Install the CXF Server

karaf@root()>feature:install ecf-rs-distribution-cxf-server

Install the CXF Client (in this example these are run on same instance, but they can be easily installed on separate Karaf (or other) OSGi instances).

karaf@root()>feature:install ecf-rs-distribution-cxf-client

The ECF CXF Distribution Provider is installed. In order for it to be configured appropriately for running localhost on Karaf, the HttpService port must be set via setting the org.osgi.service.http.port property:


Install of JaxRS Student Example

In this tutorial an example REST service is presented. The completed example bundles with source are available in the ECF JaxRSProviders repository. To run this example you may wish to clone this repo, and import into Eclipse these projects: examples/com.mycorp.examples.student', examples/com.mycorp.examples.remoteservice.host, and examples/com.mycorp.examples.client.

Install of Student Example Service Client

karaf@root()> feature:install ecf-rs-examples-jaxrs-student-client

Install of Student Example Service Host

karaf@root()> feature:install ecf-rs-examples-jaxrs-student-server

This should produce output like the following

karaf@root()> feature:install ecf-rs-distribution-cxf-server
karaf@root()> feature:install ecf-rs-distribution-cxf-client
karaf@root()> feature:install ecf-rs-examples-jaxrs-student-client
karaf@root()> feature:install ecf-rs-examples-jaxrs-student-host
16:17:04.904;EXPORT_REGISTRATION;exportedSR=[com.mycorp.examples.student.Student
Service];cID=URIID [uri=http://localhost:8181/1];rsId=1
--Endpoint Description---
<endpoint-descriptions xmlns="http://www.osgi.org/xmlns/rsa/v1.0.0">
  <endpoint-description>
    <property name="ecf.endpoint.id" value-type="String" value="http://localhost
:8181/1"/>
    <property name="ecf.endpoint.id.ns" value-type="String" value="ecf.namespace
.jaxrs"/>
    <property name="ecf.endpoint.ts" value-type="Long" value="1530573424662"/>
    <property name="ecf.rsvc.id" value-type="Long" value="1"/>
    <property name="endpoint.framework.uuid" value-type="String" value="7473f8a1
-f0ac-4146-8087-0558ed8e46aa"/>
    <property name="endpoint.id" value-type="String" value="c9e3bb65-f157-40fe-b
4bb-6c98c926ca03"/>
    <property name="endpoint.package.version.com.mycorp.examples.student" value-
type="String" value="1.0.0"/>
    <property name="endpoint.service.id" value-type="Long" value="162"/>
    <property name="objectClass" value-type="String">
      <array>
        <value>com.mycorp.examples.student.StudentService</value>
      </array>
    </property>
    <property name="osgi.basic.timeout" value-type="String" value="50000"/>
    <property name="remote.configs.supported" value-type="String">
      <array>
        <value>ecf.jaxrs.cxf.server</value>
      </array>
    </property>
    <property name="remote.intents.supported" value-type="String">
      <array>
        <value>passByValue</value>
        <value>exactlyOnce</value>
        <value>ordered</value>
        <value>osgi.async</value>
        <value>osgi.private</value>
        <value>osgi.confidential</value>
        <value>jaxrs</value>
      </array>
    </property>
    <property name="service.imported" value-type="String" value="true"/>
    <property name="service.imported.configs" value-type="String">
      <array>
        <value>ecf.jaxrs.cxf.server</value>
      </array>
    </property>
    <property name="service.intents" value-type="String" value="osgi.async"/>
  </endpoint-description>
</endpoint-descriptions>
---End Endpoint Description
Discovered student service=com.mycorp.examples.student.remoteservice.host.Studen
tServiceImpl@51154196
Student0=Student [id=06f375e2-859d-4077-9bf4-edf8a1128439, name=Joe Senior, grad
e=First, address=Address [street=111 Park Ave, city=New York, state=NY, postalCo
de=11111]]
Updated Student0=Student [id=06f375e2-859d-4077-9bf4-edf8a1128439, name=Joe Seni
or, grade=Eighth, address=Address [street=111 Park Ave, city=New York, state=NY,
 postalCode=11111]]
Student=0=Student [id=06f375e2-859d-4077-9bf4-edf8a1128439, name=Joe Senior, gra
de=Eighth, address=Address [street=111 Park Ave, city=New York, state=NY, postal
Code=11111]]
Created student=Student [id=ba408587-9546-45f2-b311-9b2d65c5761c, name=April Sno
w, grade=null, address=null]
Updated student=Student [id=ba408587-9546-45f2-b311-9b2d65c5761c, name=April Sno
w, grade=First, address=Address [street=111 NE 1st, city=Austin, state=Oregon, p
ostalCode=97200]]
Deleted student=Student [id=ba408587-9546-45f2-b311-9b2d65c5761c, name=April Sno
w, grade=First, address=Address [street=111 NE 1st, city=Austin, state=Oregon, p
ostalCode=97200]]
karaf@root()>

The output in between the --Start Endpoint Description-- and ---End Endpoint Description--- is debug output from the ECF RSA Console for the remote service export. The output that begins Discovered student service... is output from the StudentService consumer when the remote service is discovered and injected into the client component. For reference, the [ https://github.com/ECF/JaxRSProviders/blob/master/examples/com.mycorp.examples.student.client/src/com/mycorp/examples/student/client/StudentServiceClient.java client component's source code is here].

Back to the top