blob: 055ea2f295805e26a4d7dc91f471bf1c4629c083 [file] [log] [blame]
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<html>
<head>
<link type="text/css" rel="stylesheet" href="/resources/site.css">
<script src='/resources/space.js'></script>
<meta http-equiv="Content-type" content="text/html;charset=UTF-8">
<meta name="keywords" content="business integration, EAI, SOA, Service Oriented Architecture, web services, SOAP, JBI, JMS, WSDL, XML, EDI, Electronic Data Interchange, standards support, integration standards, application integration, middleware, software, solutions, services, CXF, open source">
<meta name="description" content="Apache CXF, Services Framework - Server, Service, and Client FactoryBeans">
<link type="text/css" rel="stylesheet" href="/resources/highlighter/styles/shCoreCXF.css">
<link type="text/css" rel="stylesheet" href="/resources/highlighter/styles/shThemeCXF.css">
<script src='/resources/highlighter/scripts/shCore.js'></script>
<script src='/resources/highlighter/scripts/shBrushJava.js'></script>
<script>
SyntaxHighlighter.defaults['toolbar'] = false;
SyntaxHighlighter.all();
</script>
<title>
Apache CXF -- Server, Service, and Client FactoryBeans
</title>
</head>
<body onload="init()">
<table width="100%" cellpadding="0" cellspacing="0">
<tr>
<td id="cell-0-0" colspan="2">&nbsp;</td>
<td id="cell-0-1">&nbsp;</td>
<td id="cell-0-2" colspan="2">&nbsp;</td>
</tr>
<tr>
<td id="cell-1-0">&nbsp;</td>
<td id="cell-1-1">&nbsp;</td>
<td id="cell-1-2">
<!-- Banner -->
<div class="banner" id="banner"><div><table border="0" cellpadding="0" cellspacing="0" width="100%"><tr><td align="left" colspan="1" nowrap>
<a shape="rect" href="http://cxf.apache.org/" title="Apache CXF"><span style="font-weight: bold; font-size: 170%; color: white">Apache CXF</span></a>
</td><td align="right" colspan="1" nowrap>
<a shape="rect" href="http://www.apache.org/" title="The Apache Sofware Foundation"><img border="0" alt="ASF Logo" src="http://cxf.apache.org/images/asf-logo.png"></a>
</td></tr></table></div></div>
<!-- Banner -->
<div id="top-menu">
<table border="0" cellpadding="1" cellspacing="0" width="100%">
<tr>
<td>
<div align="left">
<!-- Breadcrumbs -->
<a href="index.html">Index</a>&nbsp;&gt;&nbsp;<a href="advanced-integration.html">Advanced Integration</a>&nbsp;&gt;&nbsp;<a href="server-service-and-client-factorybeans.html">Server, Service, and Client FactoryBeans</a>
<!-- Breadcrumbs -->
</div>
</td>
<td>
<div align="right">
<!-- Quicklinks -->
<div id="quicklinks"><p><a shape="rect" href="http://cxf.apache.org/download.html">Download</a> | <a shape="rect" href="http://cxf.apache.org/docs/index.html">Documentation</a></p></div>
<!-- Quicklinks -->
</div>
</td>
</tr>
</table>
</div>
</td>
<td id="cell-1-3">&nbsp;</td>
<td id="cell-1-4">&nbsp;</td>
</tr>
<tr>
<td id="cell-2-0" colspan="2">&nbsp;</td>
<td id="cell-2-1">
<table>
<tr valign="top">
<td height="100%">
<div id="wrapper-menu-page-right">
<div id="wrapper-menu-page-top">
<div id="wrapper-menu-page-bottom">
<div id="menu-page">
<!-- NavigationBar -->
<div id="navigation"><ul class="alternate"><li><a shape="rect" href="overview.html">Overview</a></li><li><a shape="rect" href="how-tos.html">How-Tos</a></li><li><a shape="rect" href="frontends.html">Frontends</a></li><li><a shape="rect" href="databindings.html">DataBindings</a></li><li><a shape="rect" href="transports.html">Transports</a></li><li><a shape="rect" href="configuration.html">Configuration</a></li><li><a shape="rect" href="debugging-and-logging.html">Debugging and Logging</a></li><li><a shape="rect" href="tools.html">Tools</a></li><li><a shape="rect" href="restful-services.html">RESTful Services</a></li><li><a shape="rect" href="wsdl-bindings.html">WSDL Bindings</a></li><li><a shape="rect" href="service-routing.html">Service Routing</a></li><li><a shape="rect" href="dynamic-languages.html">Dynamic Languages</a></li><li><a shape="rect" href="ws-support.html">WS-* Support</a></li><li><a shape="rect" href="advanced-integration.html">Advanced Integration</a></li><li><a shape="rect" href="deployment.html">Deployment</a></li><li><a shape="rect" href="schemas-and-namespaces.html">Use of Schemas and Namespaces</a></li></ul><hr><ul class="alternate"><li><p>Search</p></li></ul><form enctype="application/x-www-form-urlencoded" method="get" id="cse-search-box" action="http://www.google.com/cse">
<div>
<input type="hidden" name="cx" value="002890367768291051730:o99qiwa09y4">
<input type="hidden" name="ie" value="UTF-8">
<input type="text" name="q" size="21">
<input type="submit" name="sa" value="Search">
</div>
</form>
<script type="text/javascript" src="http://www.google.com/cse/brand?form=cse-search-box&amp;lang=en"></script><hr><ul class="alternate"><li><a shape="rect" href="http://cxf.apache.org/javadoc/latest/">API 3.2.x (Javadoc)</a></li><li><a shape="rect" href="http://cxf.apache.org/javadoc/latest-3.1.x/">API 3.1.x (Javadoc)</a></li><li><a shape="rect" href="http://cxf.apache.org/">CXF Website</a></li></ul><p>&#160;</p><p><a shape="rect" class="external-link" href="http://www.apache.org/events/current-event.html"><span class="confluence-embedded-file-wrapper"><img class="confluence-embedded-image confluence-external-resource" src="http://www.apache.org/events/current-event-125x125.png" data-image-src="http://www.apache.org/events/current-event-125x125.png"></span></a></p></div>
<!-- NavigationBar -->
</div>
</div>
</div>
</div>
</td>
<td height="100%">
<!-- Content -->
<div class="wiki-content">
<div id="ConfluenceContent"><h1 id="Server,Service,andClientFactoryBeans-Overview">Overview</h1>
<p>CXF has four primary classes which help in the representation of services:</p>
<div class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh"><p>Class</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Function</p></th></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>Service</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>The Service contains the service model, which is an abstract representation of the Service and its operations. It also contains information such as the databinding being used, the Invoker, the Executor, service properties, interceptors, and more.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>Endpoint</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>The Endpoint represents an endpoint which can receive messages. Its primary function is to hold Interceptors which are specific to that endpoint (for instance, SOAP interceptors) and provide listeners for faults that occur. Both the Client and Server use the Endpoint class.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>Client</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>The Client is a client implementation which manages message flows on the client side.</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>Server</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>The Server represents a Server endpoint inside CXF. It provides hooks to start/stop the server and access the Endpoint.</p></td></tr></tbody></table></div>
<p>CXF also includes several factories to assist in the creation of clients and servers:</p>
<div class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1" class="confluenceTh"><p>Class</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Function</p></th><th colspan="1" rowspan="1" class="confluenceTh"><p>Implementations</p></th></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>AbstractServiceFactoryBean</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>This class is responsible for creating the service model from either a WSDL or a class file. It also sets up basic properties such as the databinding or basic interceptors. It is most often hidden behind a Client/ServerFactoryBean.</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>ReflectionServiceFactoryBean, JaxWsServiceFactoryBean</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>ServerFactoryBean</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Creates a Server side endpoint.</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>ServerFactoryBean, JaxWsServerFactoryBean</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>ClientFactoryBean</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Creates a Client endpoint.</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>ClientFactoryBean, JaxWsClientFactoryBean</p></td></tr><tr><td colspan="1" rowspan="1" class="confluenceTd"><p>ClientProxyFactoryBean</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>Creates a Java proxy around a Client</p></td><td colspan="1" rowspan="1" class="confluenceTd"><p>ClientProxyFactoryBean, JaxWsProxyFactoryBean</p></td></tr></tbody></table></div>
<p>For more information on how to use these beans, please see the <a shape="rect" href="simple-frontend.html">Simple Frontend</a> page or the javadocs.</p>
<h1 id="Server,Service,andClientFactoryBeans-ServiceFactoryBeansandAbstractServiceConfiguration">ServiceFactoryBeans and AbstractServiceConfiguration</h1>
<p>The primary service factory bean inside CXF is the ReflectionServiceFactoryBean. It provides a way to map a class to a service. If you are interested in controlling how this mapping occurs, you can extend and provide your own Service configuration. Most configuration of services happens through these. For instance, in the JAX-WS frontend, the JaxWsServiceConfiguration controls how the service is mapped by inspecting the JAX-WS annotations.</p>
<p>To add your own service configuration:</p>
<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
<pre class="brush: java; gutter: false; theme: Default">
MyServiceConfiguration config = new AbstractServiceConfiguration() {
... // your implementation
};
ReflectionServiceFactoryBean serviceFactory = new ReflectionServiceFactoryBean();
serviceFactory.getServiceConfigurations().add(0, config);
ServerFactoryBean svrFactory = new ServerFactoryBean();
svrFactory.setServiceFactory(serviceFactory);
...
Server svr = svrFactory.create();
</pre>
</div></div></div>
</div>
<!-- Content -->
</td>
</tr>
</table>
</td>
<td id="cell-2-2" colspan="2">&nbsp;</td>
</tr>
<tr>
<td id="cell-3-0">&nbsp;</td>
<td id="cell-3-1">&nbsp;</td>
<td id="cell-3-2">
<div id="footer">
<!-- Footer -->
<div id="site-footer">
<a href="http://cxf.apache.org/privacy-policy.html">Privacy Policy</a> -
(<a href="https://cwiki.apache.org/confluence/pages/editpage.action?pageId=49908">edit page</a>)
(<a href="https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=49908&amp;showComments=true&amp;showCommentArea=true#addcomment">add comment</a>)<br>
Apache CXF, CXF, Apache, the Apache feather logo are trademarks of The Apache Software Foundation.<br>
All other marks mentioned may be trademarks or registered trademarks of their respective owners.
</div>
<!-- Footer -->
</div>
</td>
<td id="cell-3-3">&nbsp;</td>
<td id="cell-3-4">&nbsp;</td>
</tr>
<tr>
<td id="cell-4-0" colspan="2">&nbsp;</td>
<td id="cell-4-1">&nbsp;</td>
<td id="cell-4-2" colspan="2">&nbsp;</td>
</tr>
</table>
<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-4458903-1");
pageTracker._trackPageview();
} catch(err) {}</script>
</body>
</html>