= CXF Configuration - JAX-RS (RESTful Services) and JAX-WS (Web Services)
:jbake-date: 2016-03-16
:jbake-type: page
:jbake-status: published
:jbake-tomeepdf:

TomEE relies on Apache CXF for JAX-RS (RESTful Services) and JAX-WS (Web Services). It does not provide all CXF modules, but the most common ones for both specifications (JAX-RS is part of all distributions but JAX-WS is only part of plus one).

== Configuration

CXF API is reusable but you can also configure the interceptors through `openejb-jar.xml` (located in WEB-INF).

If you want to configure JAX-RS you will use the prefix `cxf.jaxrs` and if you configure JAX-WS you use `cxf.jaxws` prefix.

TIP: to configure directly the bus use `org.apache.openejb.cxf.bus.` prefix and configure it in `conf/system.properties`.

To configure JAX-RS you need to add in `openejb-jar.xml` a `pojo-deployment`:

[source,xml]
----
<?xml version="1.0" encoding="UTF-8"?>
<openejb-jar>
 <pojo-deployment class-name="jaxrs-application">
   <properties>
     # here will go the config
   </properties>
 </pojo-deployment>
</openejb-jar>
----

For JAX-WS you will use a `pojo-deployment` matching the webservice class name for POJO webservices
or an `ejb-deployment` instead of a `pojo-deployment` for EJB webservices:


[source,xml]
----
<?xml version="1.0" encoding="UTF-8"?>
<openejb-jar>
 <ejb-deployment ejb-name="MyEJBWebService">
   <properties>
     # here will go the config
   </properties>
 </ejb-deployment>
</openejb-jar>
----

Then once you selected your prefix and know where to write the config just use the following entries:

- properties: server factory properties
- features: CXF features
- in-interceptors: CXF in interceptors
- out-interceptors: CXF out interceptors
- in-fault-interceptors: CXF in interceptors for fault handling
- out-fault-interceptors: CXF out interceptors for fault handling
- databinding: server databinding
- providers (only for JAX-RS endpoint): list of JAX-RS providers
- skip-provider-scanning (only for JAX-RS): is provider scanning on or not (default true)

For features and interceptors the rule is the same: value is a list comma separated. Each value of the list is either a qualified class name or an id of a service in resources.xml.

Databinding is simply either a qualified name or a service id in resources.xml (located in WEB-INF).

== Sample for JAX-WS

To configure WSS4J on the EJB `CalculatorBean` for instance add in `openejb-jar.xml`:

[source,xml]
----
<openejb-jar xmlns="http://www.openejb.org/openejb-jar/1.1">
  <ejb-deployment ejb-name="CalculatorBean">
    <properties>
      cxf.jaxws.in-interceptors = wss4j
    </properties>
  </ejb-deployment>
</openejb-jar>
----

With associated resources.xml which will define precisely the `wss4j` configuration:

[source,xml]
----
<resources>
  <Service id="wss4j" class-name="org.apache.openejb.server.cxf.config.WSS4JInInterceptorFactory" factory-name="create">
    action = UsernameToken
    passwordType = PasswordText
    passwordCallbackClass = org.superbiz.ws.security.PasswordCallbackHandler
  </Service>
</resources>
----

== Sample for JAX-RS

link:../json/index.html[JAX-RS JSON] page shows a sample dedicated to JAX-RS.
