Author: buildbot Date: Fri Oct 18 16:56:48 2019 New Revision: 1051691 Log: Production update by buildbot for cxf
Modified: websites/production/cxf/content/cache/docs.pageCache websites/production/cxf/content/docs/jax-rs.html Modified: websites/production/cxf/content/cache/docs.pageCache ============================================================================== Binary files - no diff available. Modified: websites/production/cxf/content/docs/jax-rs.html ============================================================================== --- websites/production/cxf/content/docs/jax-rs.html (original) +++ websites/production/cxf/content/docs/jax-rs.html Fri Oct 18 16:56:48 2019 @@ -120,12 +120,12 @@ Apache CXF -- JAX-RS <div id="ConfluenceContent"><p><span style="font-size:2em;font-weight:bold">JAX-RS</span> - </p><p><br clear="none"></p><p><style type="text/css">/*<![CDATA[*/ -div.rbtoc1536936977674 {padding: 0px;} -div.rbtoc1536936977674 ul {list-style: disc;margin-left: 0px;} -div.rbtoc1536936977674 li {margin-left: 0px;padding-left: 0px;} +<br clear="none"></p><p><br clear="none"></p><p><style type="text/css">/*<![CDATA[*/ +div.rbtoc1571417770142 {padding: 0px;} +div.rbtoc1571417770142 ul {list-style: disc;margin-left: 0px;} +div.rbtoc1571417770142 li {margin-left: 0px;padding-left: 0px;} -/*]]>*/</style></p><div class="toc-macro rbtoc1536936977674"> +/*]]>*/</style></p><div class="toc-macro rbtoc1571417770142"> <ul class="toc-indentation"><li><a shape="rect" href="#JAX-RS-Introduction">Introduction</a></li><li><a shape="rect" href="#JAX-RS-JAX-RSCompliance">JAX-RS Compliance</a> <ul class="toc-indentation"><li><a shape="rect" href="#JAX-RS-2.1Final">2.1 Final</a></li><li><a shape="rect" href="#JAX-RS-2.0Final">2.0 Final</a></li><li><a shape="rect" href="#JAX-RS-1.1">1.1</a></li></ul> </li><li><a shape="rect" href="#JAX-RS-Projectsetupandconfiguration">Project setup and configuration</a> @@ -139,7 +139,7 @@ div.rbtoc1536936977674 li {margin-left: </li><li><a shape="rect" href="#JAX-RS-AdvancedFeatures">Advanced Features</a> <ul class="toc-indentation"><li><a shape="rect" href="#JAX-RS-Multiparts">Multiparts</a></li><li><a shape="rect" href="#JAX-RS-SecureJAX-RSservices">Secure JAX-RS services</a></li><li><a shape="rect" href="#JAX-RS-FailoverandLoadDistributionFeatures">Failover and Load Distribution Features</a></li><li><a shape="rect" href="#JAX-RS-Redirection">Redirection</a></li><li><a shape="rect" href="#JAX-RS-XSLTandXPath">XSLT and XPath</a></li><li><a shape="rect" href="#JAX-RS-ComplexSearchQueries">Complex Search Queries</a></li><li><a shape="rect" href="#JAX-RS-Model-View-Controllersupport">Model-View-Controller support</a></li><li><a shape="rect" href="#JAX-RS-CombiningJAX-WSandJAX-RS">Combining JAX-WS and JAX-RS</a></li><li><a shape="rect" href="#JAX-RS-IntegrationwithDistributedOSGi">Integration with Distributed OSGi</a></li><li><a shape="rect" href="#JAX-RS-ODataSupport">OData Support</a></li><li><a shape="rect" href="#JAX-RS-OtherAdvancedFeatures">Other Advanced Features</a></li></ul> </li><li><a shape="rect" href="#JAX-RS-MavenPlugins">Maven Plugins</a></li><li><a shape="rect" href="#JAX-RS-Deployment">Deployment</a></li><li><a shape="rect" href="#JAX-RS-Third-partyprojects">Third-party projects</a></li><li><a shape="rect" href="#JAX-RS-References">References</a></li><li><a shape="rect" href="#JAX-RS-Howtocontribute">How to contribute</a></li></ul> -</div><h1 id="JAX-RS-Introduction">Introduction</h1><p><a shape="rect" class="external-link" href="http://en.wikipedia.org/wiki/JAX-RS" rel="nofollow">JAX-RS</a>: Java API for RESTful Web Services is a Java programming language API that provides support in creating web services according to the Representational State Transfer (REST) architectural style.</p><p>CXF supports JAX-RS 2.1 (<a shape="rect" class="external-link" href="https://www.jcp.org/en/jsr/detail?id=370" rel="nofollow">JSR-370</a>), 2.0 (<a shape="rect" class="external-link" href="http://jcp.org/en/jsr/detail?id=339" rel="nofollow">JSR-339</a>) and 1.1 (<a shape="rect" class="external-link" href="http://jcp.org/en/jsr/detail?id=311" rel="nofollow">JSR-311</a>).</p><p>CXF 3.2.0 supports JAX-RS 2.1. All existing JAX-RS 2.0 and 1.1 applications can be run with CXF 3.2.0.</p><p>CXF 3.1.x and 3.0.x support JAX-RS 2.0.  Existing JAX-RS 1.1 applications can be run with CXF 3.1.x/3.0.x.</p><p>See <a shape="rect" href ="jax-rs.html">below</a> for more information about the compliance.</p><p>JAX-RS related demos are located under the <a shape="rect" class="external-link" href="http://svn.apache.org/viewvc/cxf/trunk/distribution/src/main/release/samples/jax_rs/">samples/jax_rs </a> directory.</p><p>Outstanding JAX-RS JIRA issues can be found <a shape="rect" class="external-link" href="https://issues.apache.org/jira/secure/IssueNavigator.jspa?reset=true&jqlQuery=project+%3D+CXF+AND+resolution+%3D+Unresolved+AND+component+%3D+JAX-RS+ORDER+BY+priority+DESC&mode=hide">here</a>.</p><h1 id="JAX-RS-JAX-RSCompliance">JAX-RS Compliance</h1><p><span class="confluence-anchor-link" id="JAX-RS-2_0_FINAL"></span></p><h2 id="JAX-RS-2.1Final">2.1 Final</h2><p>CXF 3.2.0 has been updated to implement the JAX-RS 2.1 API’s as completely as possible.</p><p>If another TCK licensee that uses CXF’s JAX-RS 2.1 implementation in their products finds issues with CXF’s compliance, we are more than ha ppy to fix bugs that are raised.</p><h2 id="JAX-RS-2.0Final">2.0 Final</h2><p>CXF 3.1.x and CXF 3.0.x have been updated to implement the JAX-RS 2.0 API’s as completely as possible without access to the final JAX-RS 2.0 TCK. <br clear="none">We have done extensive testing with JAX-RS 2.0 user applications, samples, and the preliminary TCK to make sure CXF’s implementation is as complete and compatible as we can make it. <br clear="none">CXF makes and will continue making the best possible effort to have JAX-RS 2.0 and new JAX-RS version implementations technically complete and offering an environment for running the portable JAX-RS 2.0 applications.<br clear="none">If the final 2.0 TCK is made available to Apache, we will make sure CXF is updated to pass.<br clear="none">If another TCK licensee that uses CXF’s JAX-RS 2.0 implementation in their products finds issues with CXF’s compliance, we are more than happy to fix bugs that are raised.</p><h2 id="JAX-RS-1. 1">1.1</h2><p>Apache CXF 2.6.x passes the final JAX-RS 1.1 TCK and is formally 1.1 compliant.</p><p>Please consult the <a shape="rect" class="external-link" href="http://tomee.apache.org/apache-tomee.html">TomEE</a> documentation on the support of Java EE related JAX-RS 1.1 options in its Apache CXF-based JAX-RS runtime.</p><p>CXF 2.7.x and CXF 3.0.0 will fully support and run JAX-RS 1.1 applications but will not pass the JAX-RS 1.1 TCK Signature tests due to</p><p>CXF 2.7.x and CXF 3.0.0 depending on 2.0-m10 and 2.0 final versions of JAX-RS 2.0 API.</p><p> </p><h1 id="JAX-RS-Projectsetupandconfiguration">Project setup and configuration</h1><h2 id="JAX-RS-Migration">Migration</h2><h3 id="JAX-RS-FromJAX-RS2.0toJAX-RS2.1">From JAX-RS 2.0 to JAX-RS 2.1</h3><p>JAX-RS 2.1 is backward compatible with JAX-RS 2.0. Please see <a shape="rect" href="jax-rs-basics.html">JAX-RS Basics</a> for more information about JAX-RS 2.1.</p><p>All the existing JAX-RS 2.0 and 1.1 applications will run on CXF 3.2.0.</p><h3 id="JAX-RS-FromJAX-RS1.1to2.0">From JAX-RS 1.1 to 2.0</h3><p>JAX-RS 2.0 is backward compatible with JAX-RS 1.1. Please see <a shape="rect" href="jax-rs-basics.html">JAX-RS Basics</a> for more information about JAX-RS 2.0.</p><p>CXF 3.1.x and CXF 3.0.x are expected to support the existing JAX-RS 1.1 applications.</p><h3 id="JAX-RS-FromCXF2.7.xtoCXF3.0.xor3.1.x">From CXF 2.7.x to CXF 3.0.x or 3.1.x</h3><p>Please check the <a shape="rect" href="http://cxf.apache.org/docs/30-migration-guide.html">CXF 3.0.0 Migration Guide</a> for the information about all the changes<br clear="none"> in CXF 3.0.0. Here are more details on the changes specifically affecting JAX-RS users:</p><p>1. CXF RequestHandler and ResponseHandler filters have been removed.</p><p>These legacy CXF filters are still supported in 2.7.x but no longer in 3.0.0. Please use <a shape="rect" class="external-link" href="https://jax-rs-spec.java.net/nonav/2.0/apidocs/javax/ws/rs/container/ContainerRequestFi lter.html" rel="nofollow">ContainerRequestFilter</a> and <a shape="rect" class="external-link" href="https://jax-rs-spec.java.net/nonav/2.0/apidocs/javax/ws/rs/container/ContainerResponseFilter.html" rel="nofollow">ContainerResponseFilter</a> instead. Also, <a shape="rect" class="external-link" href="https://jax-rs-spec.java.net/nonav/2.0/apidocs/javax/ws/rs/ext/ReaderInterceptor.html" rel="nofollow">ReaderInterceptor</a> and <a shape="rect" class="external-link" href="https://jax-rs-spec.java.net/nonav/2.0/apidocs/javax/ws/rs/ext/WriterInterceptor.html" rel="nofollow">WriterInterceptor</a> can be used too.</p><p>Note, CXF filters had org.apache.cxf.message.Message available in the signature. If CXF Message is used in the existing CXF RequestHandler or ResponseHandler then use "org.apache.cxf.phase.PhaseInterceptorChain.getCurrentMessage()" or "org.apache.cxf.jaxrs.util.JAXRSUtils.getCurrentMessage()" to get a Message which has all the contextual information available.</p><p>For exa mple, instead of</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> +</div><h1 id="JAX-RS-Introduction">Introduction</h1><p><a shape="rect" class="external-link" href="http://en.wikipedia.org/wiki/JAX-RS" rel="nofollow">JAX-RS</a>: Java API for RESTful Web Services is a Java programming language API that provides support in creating web services according to the Representational State Transfer (REST) architectural style.</p><p>CXF supports JAX-RS 2.1 (<a shape="rect" class="external-link" href="https://www.jcp.org/en/jsr/detail?id=370" rel="nofollow">JSR-370</a>), 2.0 (<a shape="rect" class="external-link" href="http://jcp.org/en/jsr/detail?id=339" rel="nofollow">JSR-339</a>) and 1.1 (<a shape="rect" class="external-link" href="http://jcp.org/en/jsr/detail?id=311" rel="nofollow">JSR-311</a>).</p><p>CXF 3.2.0 supports JAX-RS 2.1. All existing JAX-RS 2.0 and 1.1 applications can be run with CXF 3.2.0.</p><p>CXF 3.1.x and 3.0.x support JAX-RS 2.0.  Existing JAX-RS 1.1 applications can be run with CXF 3.1.x/3.0.x.</p><p>See <a shape="rect" href ="jax-rs.html">below</a> for more information about the compliance.</p><p>JAX-RS related demos are located under the <a shape="rect" class="external-link" href="http://svn.apache.org/viewvc/cxf/trunk/distribution/src/main/release/samples/jax_rs/">samples/jax_rs </a> directory.</p><p>Outstanding JAX-RS JIRA issues can be found <a shape="rect" class="external-link" href="https://issues.apache.org/jira/secure/IssueNavigator.jspa?reset=true&jqlQuery=project+%3D+CXF+AND+resolution+%3D+Unresolved+AND+component+%3D+JAX-RS+ORDER+BY+priority+DESC&mode=hide">here</a>.</p><h1 id="JAX-RS-JAX-RSCompliance">JAX-RS Compliance</h1><p><span class="confluence-anchor-link" id="JAX-RS-2_0_FINAL"></span></p><h2 id="JAX-RS-2.1Final">2.1 Final</h2><p>CXF 3.2.0 has been updated to implement the JAX-RS 2.1 API’s as completely as possible.</p><p>If another TCK licensee that uses CXF’s JAX-RS 2.1 implementation in their products finds issues with CXF’s compliance, we are more than ha ppy to fix bugs that are raised.</p><h2 id="JAX-RS-2.0Final">2.0 Final</h2><p>CXF 3.1.x and CXF 3.0.x have been updated to implement the JAX-RS 2.0 API’s as completely as possible without access to the final JAX-RS 2.0 TCK. <br clear="none">We have done extensive testing with JAX-RS 2.0 user applications, samples, and the preliminary TCK to make sure CXF’s implementation is as complete and compatible as we can make it. <br clear="none">CXF makes and will continue making the best possible effort to have JAX-RS 2.0 and new JAX-RS version implementations technically complete and offering an environment for running the portable JAX-RS 2.0 applications.<br clear="none">If the final 2.0 TCK is made available to Apache, we will make sure CXF is updated to pass.<br clear="none">If another TCK licensee that uses CXF’s JAX-RS 2.0 implementation in their products finds issues with CXF’s compliance, we are more than happy to fix bugs that are raised.</p><h2 id="JAX-RS-1. 1">1.1</h2><p>Apache CXF 2.6.x passes the final JAX-RS 1.1 TCK and is formally 1.1 compliant.</p><p>Please consult the <a shape="rect" class="external-link" href="http://tomee.apache.org/apache-tomee.html">TomEE</a> documentation on the support of Java EE related JAX-RS 1.1 options in its Apache CXF-based JAX-RS runtime.</p><p>CXF 2.7.x and CXF 3.0.0 will fully support and run JAX-RS 1.1 applications but will not pass the JAX-RS 1.1 TCK Signature tests due to</p><p>CXF 2.7.x and CXF 3.0.0 depending on 2.0-m10 and 2.0 final versions of JAX-RS 2.0 API.</p><p><br clear="none"></p><h1 id="JAX-RS-Projectsetupandconfiguration">Project setup and configuration</h1><h2 id="JAX-RS-Migration">Migration</h2><h3 id="JAX-RS-FromJAX-RS2.0toJAX-RS2.1">From JAX-RS 2.0 to JAX-RS 2.1</h3><p>JAX-RS 2.1 is backward compatible with JAX-RS 2.0. Please see <a shape="rect" href="jax-rs-basics.html">JAX-RS Basics</a> for more information about JAX-RS 2.1.</p><p>All the existing JAX-RS 2.0 and 1.1 application s will run on CXF 3.2.0.</p><h3 id="JAX-RS-FromJAX-RS1.1to2.0">From JAX-RS 1.1 to 2.0</h3><p>JAX-RS 2.0 is backward compatible with JAX-RS 1.1. Please see <a shape="rect" href="jax-rs-basics.html">JAX-RS Basics</a> for more information about JAX-RS 2.0.</p><p>CXF 3.1.x and CXF 3.0.x are expected to support the existing JAX-RS 1.1 applications.</p><h3 id="JAX-RS-FromCXF2.7.xtoCXF3.0.xor3.1.x">From CXF 2.7.x to CXF 3.0.x or 3.1.x</h3><p>Please check the <a shape="rect" href="http://cxf.apache.org/docs/30-migration-guide.html">CXF 3.0.0 Migration Guide</a> for the information about all the changes<br clear="none">in CXF 3.0.0. Here are more details on the changes specifically affecting JAX-RS users:</p><p>1. CXF RequestHandler and ResponseHandler filters have been removed.</p><p>These legacy CXF filters are still supported in 2.7.x but no longer in 3.0.0. Please use <a shape="rect" class="external-link" href="https://jax-rs-spec.java.net/nonav/2.0/apidocs/javax/ws/rs/container/Containe rRequestFilter.html" rel="nofollow">ContainerRequestFilter</a> and <a shape="rect" class="external-link" href="https://jax-rs-spec.java.net/nonav/2.0/apidocs/javax/ws/rs/container/ContainerResponseFilter.html" rel="nofollow">ContainerResponseFilter</a> instead. Also, <a shape="rect" class="external-link" href="https://jax-rs-spec.java.net/nonav/2.0/apidocs/javax/ws/rs/ext/ReaderInterceptor.html" rel="nofollow">ReaderInterceptor</a> and <a shape="rect" class="external-link" href="https://jax-rs-spec.java.net/nonav/2.0/apidocs/javax/ws/rs/ext/WriterInterceptor.html" rel="nofollow">WriterInterceptor</a> can be used too.</p><p>Note, CXF filters had org.apache.cxf.message.Message available in the signature. If CXF Message is used in the existing CXF RequestHandler or ResponseHandler then use "org.apache.cxf.phase.PhaseInterceptorChain.getCurrentMessage()" or "org.apache.cxf.jaxrs.util.JAXRSUtils.getCurrentMessage()" to get a Message which has all the contextual information available.</p> <p>For example, instead of</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> <pre class="brush: java; gutter: false; theme: Default">public class CustomRequestHandler implements RequestHandler { public Response handleRequest(Message message, ClassResourceInfo cri) { } @@ -185,7 +185,7 @@ Form form = new Form().param("a", "b"); Form form = new Form().set("a", "b"); </pre> -</div></div><p>3. CXF WebClient and proxy code has been moved to a new cxf-rt-rs-client module. <br clear="none"> Also, jaxrs:client elements for injecting proxies have had the namespace changed from from "http://cxf.apache.org/jaxrs" to "http://cxf.apache.org/jaxrs-client".</p><p>Please see <a shape="rect" href="jax-rs-client-api.html">JAX-RS Client API</a> page for more information.</p><p>4. WADL Auto Generator code has been moved to a new cxf-rt-rs-service-description module.</p><p>5. CXF ParameterHandler has been dropped. Please use <a shape="rect" class="external-link" href="https://jax-rs-spec.java.net/nonav/2.0/apidocs/javax/ws/rs/ext/ParamConverterProvider.html" rel="nofollow">ParameterConverterProvider</a> instead, it can be used both on the server and client sides.</p><p>6. JAX-RS 2.0 introduces a controversial requirement that the default built-in JAX-RS MessageBodyWriter and JAX-RS MessageBodyReader providers are <strong>preferred</strong> to custom providers supporting the same types unless the custom providers are precisely typed, for example, if you have a custom InputStream reader properly implementing isReadable:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> +</div></div><p>3. CXF WebClient and proxy code has been moved to a new cxf-rt-rs-client module. <br clear="none">Also, jaxrs:client elements for injecting proxies have had the namespace changed from from "http://cxf.apache.org/jaxrs" to "http://cxf.apache.org/jaxrs-client".</p><p>Please see <a shape="rect" href="jax-rs-client-api.html">JAX-RS Client API</a> page for more information.</p><p>4. WADL Auto Generator code has been moved to a new cxf-rt-rs-service-description module.</p><p>5. CXF ParameterHandler has been dropped. Please use <a shape="rect" class="external-link" href="https://jax-rs-spec.java.net/nonav/2.0/apidocs/javax/ws/rs/ext/ParamConverterProvider.html" rel="nofollow">ParameterConverterProvider</a> instead, it can be used both on the server and client sides.</p><p>6. JAX-RS 2.0 introduces a controversial requirement that the default built-in JAX-RS MessageBodyWriter and JAX-RS MessageBodyReader providers are <strong>preferred</strong> to custom providers supporting t he same types unless the custom providers are precisely typed, for example, if you have a custom InputStream reader properly implementing isReadable:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> <pre class="brush: java; gutter: false; theme: Default">public class MyStreamProvider implements MessageBodyReader<Object> { public boolean isReadable(Class<?> cls, ...) { return InputStream.class.isAssignableFrom(cls) || Reader.class.isAssignableFrom(cls); @@ -205,7 +205,7 @@ public void upload(InputStream is) { public void upload(@Multipart InputStream is) { } </pre> -</div></div><p>Alternatively, setting a "support.type.as.multipart" contextual property will do.</p><p>7. If the custom code throws JAX-RS WebApplicationException with Response containing a non-null entity then custom WebApplicationException mappers will be bypassed - another problematic requirement, for example, the custom mappers doing the logging will miss on such exceptions.<br clear="none"> Set CXF "support.wae.spec.optimization" property to false to disable it.</p><p>8. In some cases the matching sub-resource locators will be dropped to precisely meet the current JAX-RS matching algorithm text, please see <a shape="rect" class="external-link" href="https://issues.apache.org/jira/browse/CXF-5650">CXF-5650</a> for more information. Use a new "keep.subresource.candidates" property to support the existing application if needed.</p><h3 id="JAX-RS-CXF3.1.2ProviderSortingChanges">CXF 3.1.2 Provider Sorting Changes</h3><p>Starting from CXF 3.1.2 customMessageBodyReader (MBR), MessageB odyWriter (MBW) and ExceptionMapper providers are sorted together with default providers.</p><p>Before CXF 3.1.2 if a custom MBR or MBW matches the read or write selection criteria, example, if MBR Consumes matches Content-Type and its isReadable() returns true, then</p><p>the default providers are not even checked. The specification however does let the custom providers be selected only if no higher priority matching default provider is available.</p><p>For example, suppose you have a custom StringReader which is not typed by String but by Object. In this case the default provider which is typed by String wins. To have the custom String provider winning one needs to type it by String.</p><p>Check the specification or ask at the users list for more details.</p><p> </p><h2 id="JAX-RS-Mavendependencies">Maven dependencies</h2><h3 id="JAX-RS-CXF3.2.0">CXF 3.2.0</h3><p>The cxf-rt-frontend-jaxrs dependency is required:</p><div class="code panel pdl" style="border-width: 1px;"><div c lass="codeContent panelContent pdl"> +</div></div><p>Alternatively, setting a "support.type.as.multipart" contextual property will do.</p><p>7. If the custom code throws JAX-RS WebApplicationException with Response containing a non-null entity then custom WebApplicationException mappers will be bypassed - another problematic requirement, for example, the custom mappers doing the logging will miss on such exceptions.<br clear="none">Set CXF "support.wae.spec.optimization" property to false to disable it.</p><p>8. In some cases the matching sub-resource locators will be dropped to precisely meet the current JAX-RS matching algorithm text, please see <a shape="rect" class="external-link" href="https://issues.apache.org/jira/browse/CXF-5650">CXF-5650</a> for more information. Use a new "keep.subresource.candidates" property to support the existing application if needed.</p><h3 id="JAX-RS-CXF3.1.2ProviderSortingChanges">CXF 3.1.2 Provider Sorting Changes</h3><p>Starting from CXF 3.1.2 customMessageBodyReader (MBR), MessageBo dyWriter (MBW) and ExceptionMapper providers are sorted together with default providers.</p><p>Before CXF 3.1.2 if a custom MBR or MBW matches the read or write selection criteria, example, if MBR Consumes matches Content-Type and its isReadable() returns true, then</p><p>the default providers are not even checked. The specification however does let the custom providers be selected only if no higher priority matching default provider is available.</p><p>For example, suppose you have a custom StringReader which is not typed by String but by Object. In this case the default provider which is typed by String wins. To have the custom String provider winning one needs to type it by String.</p><p>Check the specification or ask at the users list for more details.</p><p><br clear="none"></p><h2 id="JAX-RS-Mavendependencies">Maven dependencies</h2><h3 id="JAX-RS-CXF3.2.0">CXF 3.2.0</h3><p>The cxf-rt-frontend-jaxrs dependency is required:</p><div class="code panel pdl" style="border-width: 1p x;"><div class="codeContent panelContent pdl"> <pre class="brush: java; gutter: false; theme: Default"> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-frontend-jaxrs</artifactId> @@ -219,7 +219,7 @@ public void upload(@Multipart InputStrea <version>3.1.12</version> </dependency> </pre> -</div></div><p>This will in turn pull other <a shape="rect" href="http://cxf.apache.org/project-status.html">CXF modules</a> such <code>cxf-core</code> and <code>cxf-rt-transports-http</code>, check <a shape="rect" class="external-link" href="https://github.com/apache/cxf/blob/3.1.x-fixes/rt/frontend/jaxrs/pom.xml" rel="nofollow">the pom</a> for more information.</p><p><code>javax.ws.rs/javax.ws.rs-api/2.0</code> dependency provides JAX-RS 2.0 Final API.</p><pre>javax.annotation/javax.annotation-api/1.2 dependency is needed if custom JAX-RS 2.0 filters or interceptors use a javax.annotation.Priority annotation.</pre><p>Existing JAX-RS 1.1 applications can run in CXF 3.1.x and CXF 3.0.x.</p><h2 id="JAX-RS-CXFJAX-RSbundle">CXF JAX-RS bundle</h2><p>Note CXF JAX-RS bundle has been removed in CXF 3.0.0. Prefer depending on the JAX-RS frontend directly. In CXF 3.0.0 a complete CXF all-inclusive <a shape="rect" class="external-link" href="http://svn.apache.org/repos/asf/cxf/trunk/osgi/bund le/all/pom.xml">bundle</a> can still be used if really needed.</p><p>Only in CXF 2.7.x or earlier:<br clear="none"> A standalone <a shape="rect" class="external-link" href="http://svn.apache.org/repos/asf/cxf/branches/2.7.x-fixes/osgi/bundle/all/pom.xml">JAX-RS bundle</a> is available which may be of interest to users doing the JAX-RS work only.</p><p>Please note that this bundle has a transitive Maven dependency on the Jetty server modules. If you are using Maven and working with other servlet containers such as Tomcat then please add the following exclusion:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> +</div></div><p>This will in turn pull other <a shape="rect" href="http://cxf.apache.org/project-status.html">CXF modules</a> such <code>cxf-core</code> and <code>cxf-rt-transports-http</code>, check <a shape="rect" class="external-link" href="https://github.com/apache/cxf/blob/3.1.x-fixes/rt/frontend/jaxrs/pom.xml" rel="nofollow">the pom</a> for more information.</p><p><code>javax.ws.rs/javax.ws.rs-api/2.0</code> dependency provides JAX-RS 2.0 Final API.</p><pre>javax.annotation/javax.annotation-api/1.2 dependency is needed if custom JAX-RS 2.0 filters or interceptors use a javax.annotation.Priority annotation.</pre><p>Existing JAX-RS 1.1 applications can run in CXF 3.1.x and CXF 3.0.x.</p><h2 id="JAX-RS-CXFJAX-RSbundle">CXF JAX-RS bundle</h2><p>Note CXF JAX-RS bundle has been removed in CXF 3.0.0. Prefer depending on the JAX-RS frontend directly. In CXF 3.0.0 a complete CXF all-inclusive <a shape="rect" class="external-link" href="http://svn.apache.org/repos/asf/cxf/trunk/osgi/bund le/all/pom.xml">bundle</a> can still be used if really needed.</p><p>Only in CXF 2.7.x or earlier:<br clear="none">A standalone <a shape="rect" class="external-link" href="http://svn.apache.org/repos/asf/cxf/branches/2.7.x-fixes/osgi/bundle/all/pom.xml">JAX-RS bundle</a> is available which may be of interest to users doing the JAX-RS work only.</p><p>Please note that this bundle has a transitive Maven dependency on the Jetty server modules. If you are using Maven and working with other servlet containers such as Tomcat then please add the following exclusion:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> <pre class="brush: java; gutter: false; theme: Default"> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-bundle-jaxrs</artifactId> @@ -233,7 +233,7 @@ public void upload(@Multipart InputStrea </dependency> </pre> -</div></div><h1 id="JAX-RS-WhatisNew">What is New</h1><ul><li>Complete support for JAX-RS 2.1, please see <a shape="rect" href="jax-rs-basics.html">JAX-RS Basics</a> for more information</li><li><a shape="rect" href="jax-rs-nio.html">JAX-RS NIO</a> extension based on the early JAX-RS 2.1 API prototype.</li><li><a shape="rect" href="jax-rs-rxjava.html">JAX-RS RxJava</a> Observable support: as a standard JAX-RS 2.1 RxInvoker client provider and returning it asynchronously from the resource methods (CXF extension) </li><li><a shape="rect" href="jax-rs-project-reactor-support.html">JAX-RS Project Reactor</a> Support also based on the JAX-RS 2.1 RxInvoker paradigm</li><li>Complete support for JAX-RS 2.0, please see <a shape="rect" href="jax-rs-basics.html">JAX-RS Basics</a> for more information</li><li>Bean Validation 1.1 Support, please see <a shape="rect" href="http://cxf.apache.org/docs/validationfeature.html">http://cxf.apache.org/docs/validationfeature.html</a> for more informa tion</li><li><a shape="rect" href="http://cxf.apache.org/docs/swagger2feature.html">Swagger Feature</a> for generating <a shape="rect" class="external-link" href="http://swagger.io/specification/" rel="nofollow">Swagger API</a> documentation from JAX-RS endpoints</li></ul><h1 id="JAX-RS-GettingStartedwithJAX-RS">Getting Started with JAX-RS</h1><h2 id="JAX-RS-UnderstandingtheBasics">Understanding the Basics</h2><p>You are encouraged to read JAX-RS 2.1 <a shape="rect" class="external-link" href="http://jcp.org/en/jsr/detail?id=370" rel="nofollow">JSR-370</a> specification to find out the information not covered by this documentation. The specification enhances JAX-RS 2.0 by introducing a support for Reactive Client API extensions, Server Sent Events (client and server), returning CompletableFuture from the resource methods and the sub-resource classes (as opposed to instances) from the sub-resource locators.</p><p>You are also encouraged to read JAX-RS 2.0 <a shape="rect" class="exter nal-link" href="http://jcp.org/en/jsr/detail?id=339" rel="nofollow">JSR-339</a> specification to find out the information not covered by this documentation. The specification introduces many terms such as root resources, resource methods, sub-resources and sub-resource locators, message body readers and writers. JAX-RS 2.0 additionally introduces filters, interceptors, new client API, features, new exception classes, server-side support for asynchronous invocations.</p><p>Please see the <a shape="rect" href="jax-rs-basics.html">JAX-RS Basics</a> page for more information.</p><h2 id="JAX-RS-SupportforDataBindings">Support for Data Bindings</h2><p>JAX-RS MessageBodyReader and MessageBodyWriter can be used to create data bindings for reading and writing data in a number of different formats. Compliant JAX-RS implementations are expected to support JAXB-annotated beans, JAXP Source objects, InputStreams, etc.</p><p>In addition, CXF JAX-RS lets users reuse existing CXF DataBindings for w orking with JAXB, XBeans, Aegis and SDO.</p><p>Please see the <a shape="rect" href="jax-rs-data-bindings.html">JAX-RS Data Bindings</a> page for more information.</p><h2 id="JAX-RS-HowRequestURIisMatched">How Request URI is Matched</h2><p>Lets assume you have a web application called 'rest' (example, a 'rest.war' archive). CXFServlet's url-pattern is "/test/*". Finally, jaxrs:server's address is "/bar".</p><p>Requests like /rest/test/bar or /rest/test/bar/baz will be delivered to one of the resource classes in a given jaxrs:server endpoint. For the former request to be handled, a resource class with @Path("/") should be available, in the latter case - at least @Path("/") or a more specific @Path("/baz").</p><p>The same requirement can be expressed by having a CXFServlet with "/*" and jaxrs:server with "/test/bar".</p><p>When both CXFServlet and jaxrs:server use "/" then it's a root resource class which should provide a @Path with at least "/test/bar" for the above requests to be mat ched.</p><p>Generally, it can be a good idea to specify the URI segments which are more likely to change now and then with CXFServlets or jaxrs:server.</p><h2 id="JAX-RS-ClientAPI">Client API</h2><p>CXF 3.0.0 implements JAX-RS 2.0 Client API.</p><p>CXF 2.7.x or earlier provides a comprehensive support for developing RESTful clients by supporting 3 flavors of the client API: proxy-based, HTTP-centric and XML-centric. CXF-specific client API is supported alongside new JAX-RS 2.0 Client API in CXF 3.0.0.</p><p>Please see the <a shape="rect" href="jax-rs-client-api.html">JAX-RS Client API</a> page for more information.</p><h2 id="JAX-RS-BeanValidation">Bean Validation</h2><p>Bean Validation 1.1 is supported since CXF 3.0.0-milestone1. Please see the <a shape="rect" href="http://cxf.apache.org/docs/validationfeature.html">http://cxf.apache.org/docs/validationfeature.html</a> for more information.</p><h2 id="JAX-RS-Filters,InterceptorsandInvokers">Filters, Interceptors and Invokers</h2><p >It is possible to intercept and modify the inbound and outbound calls with >the help of CXF JAX-RS filters and/or CXF interceptors. Additionally, custom >invokers offer an option to intercept a call immediately before a service >bean is invoked.</p><p>Please see the <a shape="rect" >href="jax-rs-filters.html">JAX-RS Filters</a> page for more >information.</p><p>Please see the <a shape="rect" >href="jax-rs-basics.html">JAX-RS Basics</a> page for more information about >new JAX-RS 2.0 filters and interceptors available in CXF 2.7.x and >3.0.0.</p><h2 id="JAX-RS-ServicelistingsandWADLsupport">Service listings and >WADL support</h2><p><strong>New</strong>: Swagger feature has been >introduced.</p><p>CXF JAX-RS supports <a shape="rect" class="external-link" >href="http://www.w3.org/Submission/wadl" rel="nofollow">WADL</a>. CXF JAX-RS >service endpoints can be listed in the service listings page and users can >check the WADL documents.</p><p>Please see the <a shape="rect" >href="jaxrs-services-descrip tion.html">JAXRS Services Description</a> page for more information.</p><h2 id="JAX-RS-ConfiguringJAX-RSservices">Configuring JAX-RS services</h2><p>JAX-RS services can be configured programmatically, using Blueprint, Spring or CXFNonSpringJAXRSServlet.</p><p>Please see the <a shape="rect" href="jaxrs-services-configuration.html">JAXRS Services Configuration</a> page for more information.</p><h2 id="JAX-RS-Testing">Testing</h2><p>JAX-RS services can be easily tested using the embedded Jetty or CXF Local Transport.<br clear="none"> Please see the <a shape="rect" href="https://cwiki.apache.org/confluence/display/CXF20DOC/JAXRS+Testing">JAXRS Testing</a> page for more information.</p><h2 id="JAX-RS-Debugging">Debugging</h2><p>One may want to use a browser to test how a given HTTP resource reacts to different HTTP Accept or Accept-Language header values and request methods. For example, if a resource class supports a "/resource" URI then one can test the resource class using one of the following queries :</p><p><code>> GET /resource.xml</code> <br clear="none"> <code>> GET /resource.en</code></p><p>The runtime will replace '.xml' or '.en' with an appropriate header value. For it to know the type or language value associated with a given URI suffix, some configuration needs to be done. Here's an example of how it can be done with Spring:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> +</div></div><h1 id="JAX-RS-WhatisNew">What is New</h1><ul><li>Complete support for JAX-RS 2.1, please see <a shape="rect" href="jax-rs-basics.html">JAX-RS Basics</a> for more information</li><li><a shape="rect" href="jax-rs-nio.html">JAX-RS NIO</a> extension based on the early JAX-RS 2.1 API prototype.</li><li><a shape="rect" href="jax-rs-rxjava.html">JAX-RS RxJava</a> Observable support: as a standard JAX-RS 2.1 RxInvoker client provider and returning it asynchronously from the resource methods (CXF extension) </li><li><a shape="rect" href="jax-rs-project-reactor-support.html">JAX-RS Project Reactor</a> Support also based on the JAX-RS 2.1 RxInvoker paradigm</li><li>Complete support for JAX-RS 2.0, please see <a shape="rect" href="jax-rs-basics.html">JAX-RS Basics</a> for more information</li><li>Bean Validation 1.1 Support, please see <a shape="rect" href="http://cxf.apache.org/docs/validationfeature.html">http://cxf.apache.org/docs/validationfeature.html</a> for more informa tion</li><li><a shape="rect" href="http://cxf.apache.org/docs/swagger2feature.html">Swagger Feature</a> for generating <a shape="rect" class="external-link" href="http://swagger.io/specification/" rel="nofollow">Swagger API</a> documentation from JAX-RS endpoints</li></ul><h1 id="JAX-RS-GettingStartedwithJAX-RS">Getting Started with JAX-RS</h1><h2 id="JAX-RS-UnderstandingtheBasics">Understanding the Basics</h2><p>You are encouraged to read JAX-RS 2.1 <a shape="rect" class="external-link" href="http://jcp.org/en/jsr/detail?id=370" rel="nofollow">JSR-370</a> specification to find out the information not covered by this documentation. The specification enhances JAX-RS 2.0 by introducing a support for Reactive Client API extensions, Server Sent Events (client and server), returning CompletableFuture from the resource methods and the sub-resource classes (as opposed to instances) from the sub-resource locators.</p><p>You are also encouraged to read JAX-RS 2.0 <a shape="rect" class="exter nal-link" href="http://jcp.org/en/jsr/detail?id=339" rel="nofollow">JSR-339</a> specification to find out the information not covered by this documentation. The specification introduces many terms such as root resources, resource methods, sub-resources and sub-resource locators, message body readers and writers. JAX-RS 2.0 additionally introduces filters, interceptors, new client API, features, new exception classes, server-side support for asynchronous invocations.</p><p>Please see the <a shape="rect" href="jax-rs-basics.html">JAX-RS Basics</a> page for more information.</p><h2 id="JAX-RS-SupportforDataBindings">Support for Data Bindings</h2><p>JAX-RS MessageBodyReader and MessageBodyWriter can be used to create data bindings for reading and writing data in a number of different formats. Compliant JAX-RS implementations are expected to support JAXB-annotated beans, JAXP Source objects, InputStreams, etc.</p><p>In addition, CXF JAX-RS lets users reuse existing CXF DataBindings for w orking with JAXB, XBeans, Aegis and SDO.</p><p>Please see the <a shape="rect" href="jax-rs-data-bindings.html">JAX-RS Data Bindings</a> page for more information.</p><h2 id="JAX-RS-HowRequestURIisMatched">How Request URI is Matched</h2><p>Lets assume you have a web application called 'rest' (example, a 'rest.war' archive). CXFServlet's url-pattern is "/test/*". Finally, jaxrs:server's address is "/bar".</p><p>Requests like /rest/test/bar or /rest/test/bar/baz will be delivered to one of the resource classes in a given jaxrs:server endpoint. For the former request to be handled, a resource class with @Path("/") should be available, in the latter case - at least @Path("/") or a more specific @Path("/baz").</p><p>The same requirement can be expressed by having a CXFServlet with "/*" and jaxrs:server with "/test/bar".</p><p>When both CXFServlet and jaxrs:server use "/" then it's a root resource class which should provide a @Path with at least "/test/bar" for the above requests to be mat ched.</p><p>Generally, it can be a good idea to specify the URI segments which are more likely to change now and then with CXFServlets or jaxrs:server.</p><h2 id="JAX-RS-ClientAPI">Client API</h2><p>CXF 3.0.0 implements JAX-RS 2.0 Client API.</p><p>CXF 2.7.x or earlier provides a comprehensive support for developing RESTful clients by supporting 3 flavors of the client API: proxy-based, HTTP-centric and XML-centric. CXF-specific client API is supported alongside new JAX-RS 2.0 Client API in CXF 3.0.0.</p><p>Please see the <a shape="rect" href="jax-rs-client-api.html">JAX-RS Client API</a> page for more information.</p><h2 id="JAX-RS-BeanValidation">Bean Validation</h2><p>Bean Validation 1.1 is supported since CXF 3.0.0-milestone1. Please see the <a shape="rect" href="http://cxf.apache.org/docs/validationfeature.html">http://cxf.apache.org/docs/validationfeature.html</a> for more information.</p><h2 id="JAX-RS-Filters,InterceptorsandInvokers">Filters, Interceptors and Invokers</h2><p >It is possible to intercept and modify the inbound and outbound calls with >the help of CXF JAX-RS filters and/or CXF interceptors. Additionally, custom >invokers offer an option to intercept a call immediately before a service >bean is invoked.</p><p>Please see the <a shape="rect" >href="jax-rs-filters.html">JAX-RS Filters</a> page for more >information.</p><p>Please see the <a shape="rect" >href="jax-rs-basics.html">JAX-RS Basics</a> page for more information about >new JAX-RS 2.0 filters and interceptors available in CXF 2.7.x and >3.0.0.</p><h2 id="JAX-RS-ServicelistingsandWADLsupport">Service listings and >WADL support</h2><p><strong>New</strong>: Swagger feature has been >introduced.</p><p>CXF JAX-RS supports <a shape="rect" class="external-link" >href="http://www.w3.org/Submission/wadl" rel="nofollow">WADL</a>. CXF JAX-RS >service endpoints can be listed in the service listings page and users can >check the WADL documents.</p><p>Please see the <a shape="rect" >href="jaxrs-services-descrip tion.html">JAXRS Services Description</a> page for more information.</p><h2 id="JAX-RS-ConfiguringJAX-RSservices">Configuring JAX-RS services</h2><p>JAX-RS services can be configured programmatically, using Blueprint, Spring or CXFNonSpringJAXRSServlet.</p><p>Please see the <a shape="rect" href="jaxrs-services-configuration.html">JAXRS Services Configuration</a> page for more information.</p><h2 id="JAX-RS-Testing">Testing</h2><p>JAX-RS services can be easily tested using the embedded Jetty or CXF Local Transport.<br clear="none">Please see the <a shape="rect" href="https://cwiki.apache.org/confluence/display/CXF20DOC/JAXRS+Testing">JAXRS Testing</a> page for more information.</p><h2 id="JAX-RS-Debugging">Debugging</h2><p>One may want to use a browser to test how a given HTTP resource reacts to different HTTP Accept or Accept-Language header values and request methods. For example, if a resource class supports a "/resource" URI then one can test the resource class using one of the f ollowing queries :</p><p><code>> GET /resource.xml</code> <br clear="none"><code>> GET /resource.en</code></p><p>The runtime will replace '.xml' or '.en' with an appropriate header value. For it to know the type or language value associated with a given URI suffix, some configuration needs to be done. Here's an example of how it can be done with Spring:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> <pre class="brush: java; gutter: false; theme: Default"> <jaxrs:server id="customerService" address="/"> <jaxrs:serviceBeans> <bean class="org.apache.cxf.jaxrs.systests.CustomerService" /> @@ -247,7 +247,7 @@ public void upload(@Multipart InputStrea </jaxrs:languageMappings> </jaxrs:server> </pre> -</div></div><p>CXF also supports a _type query as an alternative to appending extensions like '.xml' to request URIs:</p><p>{{ > GET /resource?_type=xml}}</p><p>Overriding a request method is also easy:</p><p><code>> GET /resource?_method=POST</code></p><p>Alternatively, one can specify an HTTP header X-HTTP-Method-Override:</p><p><code>> POST /books</code> <br clear="none"> <code>> X-HTTP-Method-Override : PATCH</code></p><p>For example, at the moment the http-centric client API does not support arbitrary HTTP verbs except for those supported <br clear="none"> by Java HTTPUrlConnection. When needed, X-HTTP-Method-Override can be set to overcome this limitation.</p><p>Finally, a "_ctype" query allows for overriding Content-Type.</p><p>Please see the <a shape="rect" href="debugging-and-logging.html">Debugging and Logging</a> page for more information on how to debug and log service calls in CXF.</p><h2 id="JAX-RS-Logging">Logging</h2><p>Many of the existing CXF features c an be applied either to <code>jaxrs:server</code> or <code>jaxrs:client</code>. For example, to enable logging of requests and responses, simply do:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> +</div></div><p>CXF also supports a _type query as an alternative to appending extensions like '.xml' to request URIs:</p><p>{{ > GET /resource?_type=xml}}</p><p>CXF also supports overriding request methods. However note that by default this is not allowed (since CXF 3.3.4) for a CXF service. To enable HTTP method overriding, specify the "org.apache.cxf.jaxrs.allow.http.method.override" endpoint property as "true".</p><p>Two options of overriding HTTP request methods are available - via a query parameter:</p><p><code>> GET /resource?_method=POST</code></p><p>Alternatively, one can specify an HTTP header X-HTTP-Method-Override:</p><p><code>> POST /books</code> <br clear="none"><code>> X-HTTP-Method-Override : PATCH</code></p><p>For example, at the moment the http-centric client API does not support arbitrary HTTP verbs except for those supported <br clear="none">by Java HTTPUrlConnection. When needed, X-HTTP-Method-Override can be set to overcome this limitation.</p><p>Fin ally, a "_ctype" query allows for overriding Content-Type.</p><p>Please see the <a shape="rect" href="debugging-and-logging.html">Debugging and Logging</a> page for more information on how to debug and log service calls in CXF.</p><h2 id="JAX-RS-Logging">Logging</h2><p>Many of the existing CXF features can be applied either to <code>jaxrs:server</code> or <code>jaxrs:client</code>. For example, to enable logging of requests and responses, simply do:</p><div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl"> <pre class="brush: java; gutter: false; theme: Default"><beans xmlns:cxf="http://cxf.apache.org/core" xsi:schemaLocation="http://cxf.apache.org/core http://cxf.apache.org/schemas/core.xsd"> @@ -258,7 +258,7 @@ public void upload(@Multipart InputStrea <jaxrs:server> </beans> </pre> -</div></div><p>Please make sure the <code> <a shape="rect" href="http://cxf.apache.org/core">http://cxf.apache.org/core</a> </code> namespace is in scope.</p><p>Starting from CXF 2.3.0 it is also possible to convert log events into Atom entries and either push them to receivers or make them available for polling.</p><p>Please see the <a shape="rect" href="debugging-and-logging.html">Debugging and Logging</a> page for more information.</p><h1 id="JAX-RS-AdvancedFeatures">Advanced Features</h1><h2 id="JAX-RS-Multiparts">Multiparts</h2><p>Multiparts can be handled in a number of ways. The CXF core runtime provides advanced support for handling attachments which CXF JAX-RS builds upon.</p><p>Please see the <a shape="rect" href="jax-rs-multiparts.html">JAX-RS Multiparts</a> page for more information.</p><h2 id="JAX-RS-SecureJAX-RSservices">Secure JAX-RS services</h2><p>Transport level HTTPS security can be used to protect messages exchanged between CXF JAX-RS endpoints and providers.</p> <p>Authentication and authorization can be enforced in a number of ways.</p><p>Please see the <a shape="rect" href="secure-jax-rs-services.html">Secure JAX-RS Services</a> page for more information.</p><p>Please also check <a shape="rect" href="http://cxf.apache.org/docs/jax-rs-xml-security.html">JAX-RS XML Security</a>, <a shape="rect" href="jax-rs-saml.html">JAX-RS SAML,</a> <a shape="rect" href="jax-rs-token-authorization.html">JAX-RS Token Authorization</a> and <a shape="rect" href="jax-rs-oauth2.html">JAX-RS OAuth2</a> pages for more information about the advanced security topics.</p><h2 id="JAX-RS-FailoverandLoadDistributionFeatures">Failover and Load Distribution Features</h2><p>Starting from CXF 2.4.1, CXF JAX-RS proxy and WebClient consumers can be backed up by failover and load distribution features.<br clear="none"> Please see the <a shape="rect" href="jax-rs-failover.html">JAX-RS Failover</a> page for more information.</p><h2 id="JAX-RS-Redirection">Redirection</h2><p>St arting from CXF 2.2.5 it is possible to redirect the request or response call to other servlet resources by configuring CXFServlet or using CXF JAX-RS RequestDispatcherProvider.</p><p>Please see the <a shape="rect" href="jax-rs-redirection.html">JAX-RS Redirection</a> page for more information.</p><h2 id="JAX-RS-XSLTandXPath">XSLT and XPath</h2><p>XSLT and XPath are promoted and treated as first-class citizens in CXF JAX-RS. These technologies can be very powerful when generating complex data or retrieving data of interest out of complex XML fragments.</p><p>Please see the <a shape="rect" href="jax-rs-advanced-xml.html">JAX-RS Advanced XML</a> page for more information.</p><h2 id="JAX-RS-ComplexSearchQueries">Complex Search Queries</h2><p>Using <a shape="rect" href="http://cxf.apache.org/docs/jax-rs.html#JAX-RS-Parameterbeans">query parameter beans</a> provides a way to capture search requirements that can be expressed by enumerating name/value pairs, for example, a query such as '? name=CXF&version=2.3' can be captured by a bean containing setName and setVersion methods. This 'template' bean can be used in the code to compare it against all available local data.</p><p>Versions 2.3 and later of CXF JAXRS support another option for doing advanced search queries using the <a shape="rect" class="external-link" href="http://tools.ietf.org/html/draft-nottingham-atompub-fiql-00" rel="nofollow">Feed Item Query Language</a>(FIQL).</p><p>Please see the <a shape="rect" href="jax-rs-search.html">JAX-RS Search</a> page for more information.</p><h2 id="JAX-RS-Model-View-Controllersupport">Model-View-Controller support</h2><p><strong>XSLT</strong> <br clear="none"> Please see the <a shape="rect" href="jax-rs-advanced-xml.html">JAX-RS Advanced XML</a> page for more information. on how <code>XSLTJaxbProvider</code> can be used to generate complex (X)HTML views.</p><p><strong>JSP</strong></p><p>With the introduction of <code>RequestDispatcherProvider</code> it is now possib le for JAXRS service responses be redirected to JSP pages for further processing. Please see the <a shape="rect" href="jax-rs-redirection.html">JAX-RS Redirection</a> page for more information.</p><h2 id="JAX-RS-CombiningJAX-WSandJAX-RS">Combining JAX-WS and JAX-RS</h2><p>CXF JAX-RS tries to make it easy for SOAP developers to experiment with JAX-RS and combine both JAX-WS and JAX-RS in the same service bean when needed.</p><p>Please see the <a shape="rect" href="jax-rs-and-jax-ws.html">JAX-RS and JAX-WS</a> page for more information.</p><h2 id="JAX-RS-IntegrationwithDistributedOSGi">Integration with Distributed OSGi</h2><p>Distributed OSGi RI is a CXF <a shape="rect" href="http://cxf.apache.org/distributed-osgi.html">subproject</a>. DOSGi mandates how registered Java interfaces can be exposed<br clear="none"> and consumed as remote services. DOSGi single and multi bundle distributions contain all the OSGI bundles required for a CXF endpoint be successfully published.</p><p>CXF JAX- RS implementations has been integrated with DOSGi RI 1.1-SNAPSHOT which makes it possible to expose Java interfaces as RESTful services and consume such services using a proxy-based client API.</p><p>Please see the <a shape="rect" href="http://cxf.apache.org/distributed-osgi-reference.html#DistributedOSGiReference-ServiceProviderproperties">DOSGI Reference page</a> ('org.apache.cxf.rs' properties) and a <a shape="rect" class="external-link" href="http://svn.apache.org/repos/asf/cxf/dosgi/trunk/samples/greeter_rest/">greeter_rest</a> sample for more information. Note that this demo can be run exactly as a SOAP-based <a shape="rect" href="http://cxf.apache.org/distributed-osgi-greeter-demo-walkthrough.html">greeter</a> demo as it registers and consumes a similar (but) JAX-RS annotated <a shape="rect" class="external-link" href="http://svn.apache.org/repos/asf/cxf/dosgi/trunk/samples/greeter_rest/interface/src/main/java/org/apache/cxf/dosgi/samples/greeter/rest/GreeterService.java">Gre eterService</a>. In addition, this demo shows how one can register and consume a given interface (<a shape="rect" class="external-link" href="http://svn.apache.org/repos/asf/cxf/dosgi/trunk/samples/greeter_rest/interface/src/main/java/org/apache/cxf/dosgi/samples/greeter/rest/GreeterService2.java">GreeterService2</a>) without using explicit JAX-RS annotations but providing an out-of-band <a shape="rect" class="external-link" href="http://svn.apache.org/repos/asf/cxf/dosgi/trunk/samples/greeter_rest/interface/src/main/resources/OSGI-INF/cxf/jaxrs/GreeterService2-model.xml">user model description</a>.</p><h2 id="JAX-RS-ODataSupport">OData Support</h2><p>CXF JAX-RS endpoints can support <a shape="rect" class="external-link" href="http://www.odata.org/" rel="nofollow">OData</a> in two ways by relying on <a shape="rect" class="external-link" href="https://olingo.apache.org/">Apache Olingo</a>.</p><p>First, the OData "$filter" query is supported by the <a shape="rect" href="http://cxf.apa che.org/docs/jax-rs-search.html#JAX-RSSearch-OpenDataProtocol">Search extension</a> where an endpoint with the application specific API can respond to the filter queries, for example, return a collection of books matching the fillter search criteria.</p><p>Second, CXF JAX-RS can be used to interpose over the Olingo, as is <a shape="rect" class="external-link" href="https://github.com/apache/cxf/tree/master/distribution/src/main/release/samples/jax_rs/odata" rel="nofollow">demoed here</a>. Effectively such a CXF endpoint becomes an OData server: all it does <a shape="rect" class="external-link" href="https://github.com/apache/cxf/blob/master/distribution/src/main/release/samples/jax_rs/odata/src/main/java/odata/server/JaxrsODataService.java" rel="nofollow">it delegates to Olingo</a>. The idea is to be able to add CXF specific features and interceptors in front of Olingo.</p><h2 id="JAX-RS-OtherAdvancedFeatures">Other Advanced Features</h2><p>CXF JAX-RS provides a number of advanced e xtensions such as the support for the JMS transport, one-way invocations (HTTP and JMS), suspended invocations (HTTP and JMS), making existing code REST-aware by applying external user models, etc.</p><p>Please see the <a shape="rect" href="jax-rs-advanced-features.html">JAX-RS Advanced Features</a> page for more information.</p><h1 id="JAX-RS-MavenPlugins">Maven Plugins</h1><p>Please see the <a shape="rect" href="jax-rs-maven-plugins.html">JAX-RS Maven Plugins</a> page for more information about the Maven plugins and archetypes which can help with creating CXF JAX-RS applications.</p><h1 id="JAX-RS-Deployment">Deployment</h1><p>CXF JAX-RS applications packaged as WAR archives can be deployed into standalone Servlet containers such as Tomcat or Jetty.<br clear="none"> Please see the <a shape="rect" href="https://cwiki.apache.org/confluence/display/CXF20DOC/JAX-RS+Deployment">JAX-RS Deployment</a> page for the tips on how to deploy the CXF JAX-RS applications into various Java EE and OSGI application servers successfully.</p><h1 id="JAX-RS-Third-partyprojects">Third-party projects</h1><ul><li>REST Utilities: <a shape="rect" class="external-link" href="https://github.com/taimos/RESTUtils" rel="nofollow">RESTUtils</a></li></ul><h1 id="JAX-RS-References">References</h1><ul><li><a shape="rect" class="external-link" href="http://jcp.org/aboutJava/communityprocess/final/jsr311/index.html" rel="nofollow">JSR-000311 JAX-RS: The JavaTM API for RESTful Web Services</a></li><li><a shape="rect" class="external-link" href="http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm" rel="nofollow">Architectural Styles and the Design of Network-based Software Architectures</a></li><li><a shape="rect" class="external-link" href="http://en.wikipedia.org/wiki/Representational_State_Transfer" rel="nofollow">Representational State Transfer - Wikipedia </a></li><li><a shape="rect" class="external-link" href="http://oreilly.com/catalog/9780596801694/" rel="nofollow">RESTful Web Serv ices Cookbook - Solutions for Improving Scalability and Simplicity</a> <em>by Subbu Allamarajuy</em> (O'Reilly Media, February 2010)</li><li><a shape="rect" class="external-link" href="http://oreilly.com/catalog/9780596158057/" rel="nofollow">RESTful Java with JAX-RS</a> <em>by Bill Burke</em> (O'Reilly Media, November 2009)</li><li><a shape="rect" class="external-link" href="http://oreilly.com/catalog/9780596521134/" rel="nofollow">Java Web Services: Up and Running </a> <em>by Martin Kalin</em> (O'Reilly Media, February 2009)</li><li><a shape="rect" class="external-link" href="http://oreilly.com/catalog/9780596529260/" rel="nofollow">RESTful Web Services - Web services for the real world</a> <em>by Leonard Richardson, Sam Ruby</em> (O'Reilly Media, May 2007)</li><li><a shape="rect" class="external-link" href="http://www.oracle.com/technetwork/articles/javase/index-137171.html" rel="nofollow">RESTful Web Services</a> <em>by Sameer Tyagi</em> (Oracle , August 2006)</li><li><a shape=" rect" class="external-link" href="http://www.crummy.com/writing/RESTful-Web-Services/" rel="nofollow">RESTful Web Services - "Unofficial homepage for a book about simple web services."</a> <em>Unknown</em></li><li><a shape="rect" class="external-link" href="http://tomayko.com/writings/rest-to-my-wife" rel="nofollow">How I Explained REST to My Wife</a> <em>by Ryan Tomayko</em> (<a shape="rect" class="external-link" href="http://tomayko.com" rel="nofollow">http://tomayko.com</a>, December 2004)</li></ul><h1 id="JAX-RS-Howtocontribute">How to contribute</h1><p>CXF JAX-RS implementation sits on top of the core CXF runtime and is quite self-contained and isolated from other CXF modules such as jaxws and simple frontends.</p><p>Please check the <a shape="rect" class="external-link" href="http://issues.apache.org/jira/secure/IssueNavigator.jspa?reset=true&mode=hide&pid=12310511&sorter/order=DESC&sorter/field=priority&resolution=-1&component=12311911">issue list</a> and see if you are interested in fixing one of the issues.</p><p>If you decide to go ahead then the fastest way to start is to</p><ul><li>do the fast trunk build using '<code>mvn install -Pfastinstall</code>'</li><li>setup the workspace 'mvn -Psetup.eclipse' which will create a workspace in a 'workspace' folder, next to 'trunk'</li><li>import cxf modules from the trunk into the workspace and start working with the cxf-frontend-jaxrs module</li></ul><p>If you are about to submit a patch after building a trunk/rt/frontend/jaxrs, then please also run JAX-RS system tests in trunk/systests/jaxrs :<br clear="none"> <code>> mvn install</code></p><p>You can also check out the general <a shape="rect" href="http://cxf.apache.org/getting-involved.html">Getting Involved</a> web page for more information on contributing.</p></div> +</div></div><p>Please make sure the <code> <a shape="rect" href="http://cxf.apache.org/core">http://cxf.apache.org/core</a> </code> namespace is in scope.</p><p>Starting from CXF 2.3.0 it is also possible to convert log events into Atom entries and either push them to receivers or make them available for polling.</p><p>Please see the <a shape="rect" href="debugging-and-logging.html">Debugging and Logging</a> page for more information.</p><h1 id="JAX-RS-AdvancedFeatures">Advanced Features</h1><h2 id="JAX-RS-Multiparts">Multiparts</h2><p>Multiparts can be handled in a number of ways. The CXF core runtime provides advanced support for handling attachments which CXF JAX-RS builds upon.</p><p>Please see the <a shape="rect" href="jax-rs-multiparts.html">JAX-RS Multiparts</a> page for more information.</p><h2 id="JAX-RS-SecureJAX-RSservices">Secure JAX-RS services</h2><p>Transport level HTTPS security can be used to protect messages exchanged between CXF JAX-RS endpoints and providers.</p> <p>Authentication and authorization can be enforced in a number of ways.</p><p>Please see the <a shape="rect" href="secure-jax-rs-services.html">Secure JAX-RS Services</a> page for more information.</p><p>Please also check <a shape="rect" href="http://cxf.apache.org/docs/jax-rs-xml-security.html">JAX-RS XML Security</a>, <a shape="rect" href="jax-rs-saml.html">JAX-RS SAML,</a> <a shape="rect" href="jax-rs-token-authorization.html">JAX-RS Token Authorization</a> and <a shape="rect" href="jax-rs-oauth2.html">JAX-RS OAuth2</a> pages for more information about the advanced security topics.</p><h2 id="JAX-RS-FailoverandLoadDistributionFeatures">Failover and Load Distribution Features</h2><p>Starting from CXF 2.4.1, CXF JAX-RS proxy and WebClient consumers can be backed up by failover and load distribution features.<br clear="none">Please see the <a shape="rect" href="jax-rs-failover.html">JAX-RS Failover</a> page for more information.</p><h2 id="JAX-RS-Redirection">Redirection</h2><p>Sta rting from CXF 2.2.5 it is possible to redirect the request or response call to other servlet resources by configuring CXFServlet or using CXF JAX-RS RequestDispatcherProvider.</p><p>Please see the <a shape="rect" href="jax-rs-redirection.html">JAX-RS Redirection</a> page for more information.</p><h2 id="JAX-RS-XSLTandXPath">XSLT and XPath</h2><p>XSLT and XPath are promoted and treated as first-class citizens in CXF JAX-RS. These technologies can be very powerful when generating complex data or retrieving data of interest out of complex XML fragments.</p><p>Please see the <a shape="rect" href="jax-rs-advanced-xml.html">JAX-RS Advanced XML</a> page for more information.</p><h2 id="JAX-RS-ComplexSearchQueries">Complex Search Queries</h2><p>Using <a shape="rect" href="http://cxf.apache.org/docs/jax-rs.html#JAX-RS-Parameterbeans">query parameter beans</a> provides a way to capture search requirements that can be expressed by enumerating name/value pairs, for example, a query such as '?n ame=CXF&version=2.3' can be captured by a bean containing setName and setVersion methods. This 'template' bean can be used in the code to compare it against all available local data.</p><p>Versions 2.3 and later of CXF JAXRS support another option for doing advanced search queries using the <a shape="rect" class="external-link" href="http://tools.ietf.org/html/draft-nottingham-atompub-fiql-00" rel="nofollow">Feed Item Query Language</a>(FIQL).</p><p>Please see the <a shape="rect" href="jax-rs-search.html">JAX-RS Search</a> page for more information.</p><h2 id="JAX-RS-Model-View-Controllersupport">Model-View-Controller support</h2><p><strong>XSLT</strong> <br clear="none">Please see the <a shape="rect" href="jax-rs-advanced-xml.html">JAX-RS Advanced XML</a> page for more information. on how <code>XSLTJaxbProvider</code> can be used to generate complex (X)HTML views.</p><p><strong>JSP</strong></p><p>With the introduction of <code>RequestDispatcherProvider</code> it is now possible for JAXRS service responses be redirected to JSP pages for further processing. Please see the <a shape="rect" href="jax-rs-redirection.html">JAX-RS Redirection</a> page for more information.</p><h2 id="JAX-RS-CombiningJAX-WSandJAX-RS">Combining JAX-WS and JAX-RS</h2><p>CXF JAX-RS tries to make it easy for SOAP developers to experiment with JAX-RS and combine both JAX-WS and JAX-RS in the same service bean when needed.</p><p>Please see the <a shape="rect" href="jax-rs-and-jax-ws.html">JAX-RS and JAX-WS</a> page for more information.</p><h2 id="JAX-RS-IntegrationwithDistributedOSGi">Integration with Distributed OSGi</h2><p>Distributed OSGi RI is a CXF <a shape="rect" href="http://cxf.apache.org/distributed-osgi.html">subproject</a>. DOSGi mandates how registered Java interfaces can be exposed<br clear="none">and consumed as remote services. DOSGi single and multi bundle distributions contain all the OSGI bundles required for a CXF endpoint be successfully published.</p><p>CXF JAX-RS implementations has been integrated with DOSGi RI 1.1-SNAPSHOT which makes it possible to expose Java interfaces as RESTful services and consume such services using a proxy-based client API.</p><p>Please see the <a shape="rect" href="http://cxf.apache.org/distributed-osgi-reference.html#DistributedOSGiReference-ServiceProviderproperties">DOSGI Reference page</a> ('org.apache.cxf.rs' properties) and a <a shape="rect" class="external-link" href="http://svn.apache.org/repos/asf/cxf/dosgi/trunk/samples/greeter_rest/">greeter_rest</a> sample for more information. Note that this demo can be run exactly as a SOAP-based <a shape="rect" href="http://cxf.apache.org/distributed-osgi-greeter-demo-walkthrough.html">greeter</a> demo as it registers and consumes a similar (but) JAX-RS annotated <a shape="rect" class="external-link" href="http://svn.apache.org/repos/asf/cxf/dosgi/trunk/samples/greeter_rest/interface/src/main/java/org/apache/cxf/dosgi/samples/greeter/rest/GreeterService.java">Greete rService</a>. In addition, this demo shows how one can register and consume a given interface (<a shape="rect" class="external-link" href="http://svn.apache.org/repos/asf/cxf/dosgi/trunk/samples/greeter_rest/interface/src/main/java/org/apache/cxf/dosgi/samples/greeter/rest/GreeterService2.java">GreeterService2</a>) without using explicit JAX-RS annotations but providing an out-of-band <a shape="rect" class="external-link" href="http://svn.apache.org/repos/asf/cxf/dosgi/trunk/samples/greeter_rest/interface/src/main/resources/OSGI-INF/cxf/jaxrs/GreeterService2-model.xml">user model description</a>.</p><h2 id="JAX-RS-ODataSupport">OData Support</h2><p>CXF JAX-RS endpoints can support <a shape="rect" class="external-link" href="http://www.odata.org/" rel="nofollow">OData</a> in two ways by relying on <a shape="rect" class="external-link" href="https://olingo.apache.org/">Apache Olingo</a>.</p><p>First, the OData "$filter" query is supported by the <a shape="rect" href="http://cxf.apache .org/docs/jax-rs-search.html#JAX-RSSearch-OpenDataProtocol">Search extension</a> where an endpoint with the application specific API can respond to the filter queries, for example, return a collection of books matching the fillter search criteria.</p><p>Second, CXF JAX-RS can be used to interpose over the Olingo, as is <a shape="rect" class="external-link" href="https://github.com/apache/cxf/tree/master/distribution/src/main/release/samples/jax_rs/odata" rel="nofollow">demoed here</a>. Effectively such a CXF endpoint becomes an OData server: all it does <a shape="rect" class="external-link" href="https://github.com/apache/cxf/blob/master/distribution/src/main/release/samples/jax_rs/odata/src/main/java/odata/server/JaxrsODataService.java" rel="nofollow">it delegates to Olingo</a>. The idea is to be able to add CXF specific features and interceptors in front of Olingo.</p><h2 id="JAX-RS-OtherAdvancedFeatures">Other Advanced Features</h2><p>CXF JAX-RS provides a number of advanced exte nsions such as the support for the JMS transport, one-way invocations (HTTP and JMS), suspended invocations (HTTP and JMS), making existing code REST-aware by applying external user models, etc.</p><p>Please see the <a shape="rect" href="jax-rs-advanced-features.html">JAX-RS Advanced Features</a> page for more information.</p><h1 id="JAX-RS-MavenPlugins">Maven Plugins</h1><p>Please see the <a shape="rect" href="jax-rs-maven-plugins.html">JAX-RS Maven Plugins</a> page for more information about the Maven plugins and archetypes which can help with creating CXF JAX-RS applications.</p><h1 id="JAX-RS-Deployment">Deployment</h1><p>CXF JAX-RS applications packaged as WAR archives can be deployed into standalone Servlet containers such as Tomcat or Jetty.<br clear="none">Please see the <a shape="rect" href="https://cwiki.apache.org/confluence/display/CXF20DOC/JAX-RS+Deployment">JAX-RS Deployment</a> page for the tips on how to deploy the CXF JAX-RS applications into various Java EE and OSG I application servers successfully.</p><h1 id="JAX-RS-Third-partyprojects">Third-party projects</h1><ul><li>REST Utilities: <a shape="rect" class="external-link" href="https://github.com/taimos/RESTUtils" rel="nofollow">RESTUtils</a></li></ul><h1 id="JAX-RS-References">References</h1><ul><li><a shape="rect" class="external-link" href="http://jcp.org/aboutJava/communityprocess/final/jsr311/index.html" rel="nofollow">JSR-000311 JAX-RS: The JavaTM API for RESTful Web Services</a></li><li><a shape="rect" class="external-link" href="http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm" rel="nofollow">Architectural Styles and the Design of Network-based Software Architectures</a></li><li><a shape="rect" class="external-link" href="http://en.wikipedia.org/wiki/Representational_State_Transfer" rel="nofollow">Representational State Transfer - Wikipedia </a></li><li><a shape="rect" class="external-link" href="http://oreilly.com/catalog/9780596801694/" rel="nofollow">RESTful Web Services Cookbook - Solutions for Improving Scalability and Simplicity</a> <em>by Subbu Allamarajuy</em> (O'Reilly Media, February 2010)</li><li><a shape="rect" class="external-link" href="http://oreilly.com/catalog/9780596158057/" rel="nofollow">RESTful Java with JAX-RS</a> <em>by Bill Burke</em> (O'Reilly Media, November 2009)</li><li><a shape="rect" class="external-link" href="http://oreilly.com/catalog/9780596521134/" rel="nofollow">Java Web Services: Up and Running </a> <em>by Martin Kalin</em> (O'Reilly Media, February 2009)</li><li><a shape="rect" class="external-link" href="http://oreilly.com/catalog/9780596529260/" rel="nofollow">RESTful Web Services - Web services for the real world</a> <em>by Leonard Richardson, Sam Ruby</em> (O'Reilly Media, May 2007)</li><li><a shape="rect" class="external-link" href="http://www.oracle.com/technetwork/articles/javase/index-137171.html" rel="nofollow">RESTful Web Services</a> <em>by Sameer Tyagi</em> (Oracle , August 2006)</li><li><a shape="rect " class="external-link" href="http://www.crummy.com/writing/RESTful-Web-Services/" rel="nofollow">RESTful Web Services - "Unofficial homepage for a book about simple web services."</a> <em>Unknown</em></li><li><a shape="rect" class="external-link" href="http://tomayko.com/writings/rest-to-my-wife" rel="nofollow">How I Explained REST to My Wife</a> <em>by Ryan Tomayko</em> (<a shape="rect" class="external-link" rel="nofollow" href="http://tomayko.com">http://tomayko.com</a>, December 2004)</li></ul><h1 id="JAX-RS-Howtocontribute">How to contribute</h1><p>CXF JAX-RS implementation sits on top of the core CXF runtime and is quite self-contained and isolated from other CXF modules such as jaxws and simple frontends.</p><p>Please check the <a shape="rect" class="external-link" href="http://issues.apache.org/jira/secure/IssueNavigator.jspa?reset=true&mode=hide&pid=12310511&sorter/order=DESC&sorter/field=priority&resolution=-1&component=12311911">issue list</a> and see if you are interested in fixing one of the issues.</p><p>If you decide to go ahead then the fastest way to start is to</p><ul><li>do the fast trunk build using '<code>mvn install -Pfastinstall</code>'</li><li>setup the workspace 'mvn -Psetup.eclipse' which will create a workspace in a 'workspace' folder, next to 'trunk'</li><li>import cxf modules from the trunk into the workspace and start working with the cxf-frontend-jaxrs module</li></ul><p>If you are about to submit a patch after building a trunk/rt/frontend/jaxrs, then please also run JAX-RS system tests in trunk/systests/jaxrs :<br clear="none"><code>> mvn install</code></p><p>You can also check out the general <a shape="rect" href="http://cxf.apache.org/getting-involved.html">Getting Involved</a> web page for more information on contributing.</p></div> </div> <!-- Content --> </td>