Modified:
websites/production/cxf/content/docs/cxf-2x-jms-configuration-removed-in-cxf-3.html
==============================================================================
---
websites/production/cxf/content/docs/cxf-2x-jms-configuration-removed-in-cxf-3.html
(original)
+++
websites/production/cxf/content/docs/cxf-2x-jms-configuration-removed-in-cxf-3.html
Wed Sep 13 15:05:52 2017
@@ -32,8 +32,8 @@
<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 src='/resources/highlighter/scripts/shBrushBash.js'></script>
+<script src='/resources/highlighter/scripts/shBrushJava.js'></script>
<script>
SyntaxHighlighter.defaults['toolbar'] = false;
SyntaxHighlighter.all();
@@ -118,13 +118,13 @@ Apache CXF -- CXF 2.x JMS configuration
<!-- Content -->
<div class="wiki-content">
<div id="ConfluenceContent"><p>Standard JMS transport configuration in CXF is
done by defining a JMSConduit or JMSDestination, discussed below.</p><h2
id="CXF2.xJMSconfiguration(removedinCXF3)-JMSNamespaces">JMS Namespaces</h2><h3
id="CXF2.xJMSconfiguration(removedinCXF3)-WSDLNamespace">WSDL
Namespace</h3><p>The WSDL extensions for defining a JMS endpoint are defined in
the namespace <code><a shape="rect"
href="http://cxf.apache.org/transports/jms">http://cxf.apache.org/transports/jms</a></code>.
In order to use the JMS extensions you will need to add the namespace
definition shown below to the definitions element of your contract.</p><div
class="code panel pdl" style="border-width: 1px;"><div class="codeHeader
panelHeader pdl" style="border-bottom-width: 1px;"><b>JMS Extension
Namespace</b></div><div class="codeContent panelContent pdl">
-<pre class="brush: bash; gutter: false; theme: Confluence"
style="font-size:12px;">xmlns:jms="http://cxf.apache.org/transports/jms"
+<pre class="brush: java; gutter: false; theme: Default"
style="font-size:12px;">xmlns:jms="http://cxf.apache.org/transports/jms"
</pre>
</div></div><h3
id="CXF2.xJMSconfiguration(removedinCXF3)-ConfigurationNamespaces">Configuration
Namespaces</h3><p>In order to use the JMS configuration properties you will
need to add the line shown below to the <code>beans</code> element of your
configuration.</p><div class="code panel pdl" style="border-width: 1px;"><div
class="codeHeader panelHeader pdl" style="border-bottom-width: 1px;"><b>JMS
Configuration Namespaces</b></div><div class="codeContent panelContent pdl">
-<pre class="brush: bash; gutter: false; theme: Confluence"
style="font-size:12px;">xmlns:jms="http://cxf.apache.org/transports/jms"
+<pre class="brush: java; gutter: false; theme: Default"
style="font-size:12px;">xmlns:jms="http://cxf.apache.org/transports/jms"
</pre>
</div></div><h2
id="CXF2.xJMSconfiguration(removedinCXF3)-BasicEndpointConfiguration">Basic
Endpoint Configuration</h2><p>JMS endpoints need to know certain basic
information about how to establish a connection to the proper destination. This
information can be provided in one of two places: WSDL or XML configuration.
The following configuration elements which are described can be used in both
the client side Conduits and the server side Destinations.</p><h3
id="CXF2.xJMSconfiguration(removedinCXF3)-UsingWSDL">Using WSDL</h3><p>The JMS
destination information is provided using the <code><a shape="rect"
class="external-link" href="http://jmsaddress"
rel="nofollow">jms:address</a></code> element and its child, the
<code>jms:JMSNamingProperties</code> element. The <code><a shape="rect"
class="external-link" href="http://jmsaddress"
rel="nofollow">jms:address</a></code> element's attributes specify the
information needed to identify the JMS broker and the destination. The
<code>jms:JMSN
amingProperties</code> element specifies the Java properties used to connect
to the JNDI service.</p><h4
id="CXF2.xJMSconfiguration(removedinCXF3)-Theaddresselement">The address
element</h4><p>The basic configuration for a JMS endpoint is done by using a
<code><a shape="rect" class="external-link" href="http://jmsaddress"
rel="nofollow">jms:address</a></code> element as the child of your service's
<code>port</code> element. The <code><a shape="rect" class="external-link"
href="http://jmsaddress" rel="nofollow">jms:address</a></code> element uses the
attributes described below to configure the connection to the JMS
broker.</p><p><span class="confluence-anchor-link"
id="CXF2.xJMSconfiguration(removedinCXF3)-addressTable"></span></p><div
class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1"
rowspan="1" class="confluenceTh"><p>Attribute</p></th><th colspan="1"
rowspan="1" class="confluenceTh"><p>Description</p></th></tr><tr><td
colspan="1" rowspan="1" class="confl
uenceTd"><p><code>destinationStyle</code></p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>Specifies if the JMS destination is a JMS queue or a
JMS topic.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><code>jndiConnectionFactoryName</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>Specifies the JNDI name bound
to the JMS connection factory to use when connecting to the JMS
destination.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><code>jndiDestinationName</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>Specifies the JNDI name bound
to the JMS destination to which requests are sent.</p></td></tr><tr><td
colspan="1" rowspan="1"
class="confluenceTd"><p><code>jndiReplyDestinationName</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>Specifies the JNDI name bound
to the JMS destinations where replies are sent. This attribute allows you to
use a user defined destination for repl
ies.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><code>connectionUserName</code></p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p>Specifies the username to use when
connecting to a JMS broker.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><code>connectionPassword</code></p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p>Specifies the password to use when
connecting to a JMS broker.</p></td></tr></tbody></table></div><h4
id="CXF2.xJMSconfiguration(removedinCXF3)-TheJMSNamingPropertieselement">The
JMSNamingProperties element</h4><p>To increase interoperability with JMS and
JNDI providers, the <code><a shape="rect" class="external-link"
href="http://jmsaddress" rel="nofollow">jms:address</a></code> element has a
child element, <code>jms:JMSNamingProperties</code>, that allows you to specify
the values used to populate the properties used when connecting to the JNDI
provider. The <code>jms:JMSNamingProperties</code> ele
ment has two attributes: <code>name</code> and <code>value</code>. The
<code>name</code> attribute specifies the name of the property to set. The
<code>value</code> attribute specifies the value for the specified property.
The <code>jms:JMSNamingProperties</code> element can also be used for
specification of provider specific properties.<br clear="none"> The following
is a list of common JNDI properties that can be
set:</p><ol><li><code>java.naming.factory.initial</code></li><li><code>java.naming.provider.url</code></li><li><code>java.naming.factory.object</code></li><li><code>java.naming.factory.state</code></li><li><code>java.naming.factory.url.pkgs</code></li><li><code>java.naming.dns.url</code></li><li><code>java.naming.authoritative</code></li><li><code>java.naming.batchsize</code></li><li><code>java.naming.referral</code></li><li><code>java.naming.security.protocol</code></li><li><code>java.naming.security.authentication</code></li><li><code>java.naming.security.principal</cod
e></li><li><code>java.naming.security.credentials</code></li><li><code>java.naming.language</code></li><li><code>java.naming.applet</code></li></ol><p>For
more details on what information to use in these attributes, check your JNDI
provider's documentation and consult the Java API reference material.</p><h4
id="CXF2.xJMSconfiguration(removedinCXF3)-Usinganamedreplydestination">Using a
named reply destination</h4><p>By default, CXF endpoints using JMS create a
temporary queue for sending replies back and forth. You can change this
behavior by setting the <code>jndiReplyDestinationName</code> attribute in the
endpoint's contract. A client endpoint will listen for replies on the specified
destination and it will specify the value of the attribute in the
<code>ReplyTo</code> field of all outgoing requests. A service endpoint will
use the value of the <code>jndiReplyDestinationName</code> attribute as the
location for placing replies if there is no destination specified in the
request's
<code>ReplyTo</code> field.</p><p>A static reply queue can not be shared by
several instances of the service client. Please use a dynamic reply queue or
different queue names per instance instead.</p><p>The following example shows
an example of a JMS WSDL port specification.</p><div class="code panel pdl"
style="border-width: 1px;"><div class="codeHeader panelHeader pdl"
style="border-bottom-width: 1px;"><b>JMS WSDL Port Specification</b></div><div
class="codeContent panelContent pdl">
-<pre class="brush: bash; gutter: false; theme: Confluence"
style="font-size:12px;"><service name="JMSService">
+<pre class="brush: java; gutter: false; theme: Default"
style="font-size:12px;"><service name="JMSService">
<port binding="tns:Greeter_SOAPBinding" name="SoapPort">
<jms:address jndiConnectionFactoryName="ConnectionFactory"
jndiDestinationName="dynamicQueues/test.cxf.jmstransport">
@@ -143,7 +143,7 @@ Apache CXF -- CXF 2.x JMS configuration
<pre>{WSDLNamespace}WSDLPortName.jms-destination
</pre>
</div></div><p>.</p></li></ul><h4
id="CXF2.xJMSconfiguration(removedinCXF3)-Theaddresselement.1">The
<code>address</code> element</h4><p>JMS connection information is specified by
adding a <code><a shape="rect" class="external-link" href="http://jmsaddress"
rel="nofollow">jms:address</a></code> child to the base configuration element.
The <code><a shape="rect" class="external-link" href="http://jmsaddress"
rel="nofollow">jms:address</a></code> element used in the configuration file is
identical to the one used in the WSDL file. Its attributes are listed in the <a
shape="rect" href="cxf-2x-jms-configuration-removed-in-cxf-3.html">address
element's attribute table</a>. Like the <a shape="rect" class="external-link"
href="http://jmsaddress" rel="nofollow">jms:address</a> element in the WSDL
file, the <a shape="rect" class="external-link" href="http://jmsaddress"
rel="nofollow">jms:address</a> configuration element also has a
<code>jms:JMSNamingProperties</code> child element that is us
ed to specify additional information used to connect to a JNDI
provider.</p><h4
id="CXF2.xJMSconfiguration(removedinCXF3)-Example">Example</h4><div class="code
panel pdl" style="border-width: 1px;"><div class="codeHeader panelHeader pdl"
style="border-bottom-width: 1px;"><b>Addressing Information a Configuration
File</b></div><div class="codeContent panelContent pdl">
-<pre class="brush: bash; gutter: false; theme: Confluence"
style="font-size:12px;"><beans
xmlns="http://www.springframework.org/schema/beans"
+<pre class="brush: java; gutter: false; theme: Default"
style="font-size:12px;"><beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ct="http://cxf.apache.org/configuration/types"
xmlns:jms="http://cxf.apache.org/transports/jms"
@@ -170,7 +170,7 @@ Apache CXF -- CXF 2.x JMS configuration
</beans>
</pre>
</div></div><h3
id="CXF2.xJMSconfiguration(removedinCXF3)-ConsumerEndpointConfiguration">Consumer
Endpoint Configuration</h3><p>JMS consumer endpoints specify the type of
messages they use. JMS consumer endpoint can use either a JMS
<code>ObjectMessage</code> or a JMS <code>TextMessage</code>. When using an
<code>ObjectMessage</code> the consumer endpoint uses a <code>byte[]</code> as
the method for storing data into and retrieving data from the JMS message body.
When messages are sent, the message data, including any formating information,
is packaged into a <code>byte[]</code> and placed into the JMS message body
before it is placed on the wire. When messages are received, the consumer
endpoint will attempt to unmarshall the data stored in the JMS body as if it
were packed in a <code>byte[]</code>.</p><p>When using a
<code>TextMessage</code>, the consumer endpoint uses a string as the method for
storing and retrieving data from the JMS message body. When messages are sent,
the mes
sage information, including any format-specific information, is converted into
a string and placed into the JMS message body. When messages are received the
consumer endpoint will attempt to unmashall the data stored in the JMS message
body as if it were packed into a string.</p><p>When native JMS applications
interact with CXF consumers, the JMS application is responsible for
interpreting the message and the formatting information. For example, if the
CXF contract specifies that the binding used for a JMS endpoint is SOAP, and
the messages are packaged as <code>TextMessage</code>, the receiving JMS
application will get a text message containing all of the SOAP envelope
information.</p><p>Consumer endpoint can be configured by both XML
configuration and via WSDL.</p><h3
id="CXF2.xJMSconfiguration(removedinCXF3)-UsingConfiguration.1">Using
Configuration</h3><h4
id="CXF2.xJMSconfiguration(removedinCXF3)-Specifyingthemessagetype">Specifying
the message type</h4><p>You can specify the m
essage type supported by the consumer endpoint using a <code><a shape="rect"
class="external-link" href="http://jmsruntimePolicy"
rel="nofollow">jms:runtimePolicy</a></code> element that has a single
attribute:</p><ul><li><code>messageType</code> - Specifies how the message data
will be packaged as a JMS message. <code>text</code> specifies that the data
will be packaged as a <code>TextMessage</code>. <code>binary</code> specifies
that the data will be packaged as an
<code>ObjectMessage</code>.</li></ul><p>The following example shows a
configuration entry for configuring a JMS consumer endpoint.</p><div
class="code panel pdl" style="border-width: 1px;"><div class="codeHeader
panelHeader pdl" style="border-bottom-width: 1px;"><b>Configuration for a JMS
Consumer Endpoint</b></div><div class="codeContent panelContent pdl">
-<pre class="brush: bash; gutter: false; theme: Confluence"
style="font-size:12px;"><beans
xmlns="http://www.springframework.org/schema/beans"
+<pre class="brush: java; gutter: false; theme: Default"
style="font-size:12px;"><beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ct="http://cxf.apache.org/configuration/types"
xmlns:jms="http://cxf.apache.org/transports/jms"
@@ -193,7 +193,7 @@ Apache CXF -- CXF 2.x JMS configuration
</beans>
</pre>
</div></div><p>The id on the <code><a shape="rect" class="external-link"
href="http://jmsconduit" rel="nofollow">jms:conduit</a></code> is in the form
of {<code><em>WSDLNamespace</em>}<em>WSDLPortName</em>.jms-conduit</code>. This
provides CXF with the information so that it can associate the configuration
with your service's endpoint.</p><h3
id="CXF2.xJMSconfiguration(removedinCXF3)-UsingWSDL.1">Using WSDL</h3><p>The
type of messages accepted by a JMS consumer endpoint is configured using the
optional <code><a shape="rect" class="external-link" href="http://jmsclient"
rel="nofollow">jms:client</a></code> element. The <code><a shape="rect"
class="external-link" href="http://jmsclient"
rel="nofollow">jms:client</a></code> element is a child of the WSDL port
element and has one attribute:</p><ul><li><code>messageType</code> - Specifies
how the message data will be packaged as a JMS message. <code>text</code>
specifies that the data will be packaged as a <code>TextMessage</code>. <code
>binary</code> specifies that the data will be packaged as an
>ObjectMessage.</li></ul><h2
>id="CXF2.xJMSconfiguration(removedinCXF3)-ServiceEndpointConfiguration">Service
> Endpoint Configuration</h2><p>JMS service endpoints have a number of
>behaviors that are configurable in the contract. These
>include:</p><ul><li>how messages are correlated</li><li>the use of durable
>subscriptions</li><li>if the service uses local JMS transactions</li><li>the
>message selectors used by the endpoint</li></ul><p>Service endpoints can be
>configure in one of two
>ways:</p><ul><li>Configuration</li><li>WSDL</li></ul><h3
>id="CXF2.xJMSconfiguration(removedinCXF3)-UsingConfiguration.2">Using
>Configuration</h3><h4
>id="CXF2.xJMSconfiguration(removedinCXF3)-Specifyingconfigurationdata">Specifying
> configuration data</h4><p>Using the <code><a shape="rect"
>class="external-link" href="http://jmsdestination"
>rel="nofollow">jms:destination</a></code> elements you can configure your
>service's endpoint. You can specify t
he service endpoint's behaviors using the <code><a shape="rect"
class="external-link" href="http://jmsruntimePolicy"
rel="nofollow">jms:runtimePolicy</a></code> element that has a the following
attributes:</p><div class="table-wrap"><table
class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1"
class="confluenceTh"><p>Attribute</p></th><th colspan="1" rowspan="1"
class="confluenceTh"><p>Description</p></th></tr><tr><td colspan="1"
rowspan="1"
class="confluenceTd"><p><code>useMessageIDAsCorrealationID</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>Specifies whether the JMS
broker will use the message ID to correlate messages. The default is
<code>false</code>.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><code>durableSubscriberName</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>Specifies the name used to
register a durable subscription.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><code>mes
sageSelector</code></p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>Specifies the string value of a message selector to
use. For more information on the syntax used to specify message <br
clear="none" class="atl-forced-newline"> selectors, see the JMS 1.1
specification.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><code>transactional</code></p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p>Specifies whether the local JMS broker will
create transactions around message processing. The default is
<code>false</code>.</p></td></tr></tbody></table></div><p>The following example
shows a CXF configuration entry for configuring a JMS service endpoint.</p><div
class="code panel pdl" style="border-width: 1px;"><div class="codeHeader
panelHeader pdl" style="border-bottom-width: 1px;"><b>Configuration for a JMS
Service Endpoint</b></div><div class="codeContent panelContent pdl">
-<pre class="brush: bash; gutter: false; theme: Confluence"
style="font-size:12px;"><beans
xmlns="http://www.springframework.org/schema/beans"
+<pre class="brush: java; gutter: false; theme: Default"
style="font-size:12px;"><beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ct="http://cxf.apache.org/configuration/types"
xmlns:jms="http://cxf.apache.org/transports/jms"
@@ -220,21 +220,21 @@ Apache CXF -- CXF 2.x JMS configuration
</beans>
</pre>
</div></div><h3 id="CXF2.xJMSconfiguration(removedinCXF3)-UsingWSDL.2">Using
WSDL</h3><p>Service endpoint behaviors are configured using the optional
<code><a shape="rect" class="external-link" href="http://jmsserver"
rel="nofollow">jms:server</a></code> element. The <code><a shape="rect"
class="external-link" href="http://jmsserver"
rel="nofollow">jms:server</a></code> element is a child of the WSDL
<code>port</code> element and has the following attributes:</p><div
class="table-wrap"><table class="confluenceTable"><tbody><tr><th colspan="1"
rowspan="1" class="confluenceTh"><p>Attribute</p></th><th colspan="1"
rowspan="1" class="confluenceTh"><p>Description</p></th></tr><tr><td
colspan="1" rowspan="1"
class="confluenceTd"><p><code>useMessageIDAsCorrealationID</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>Specifies whether JMS will use
the message ID to correlate messages. The default is
<code>false</code>.</p></td></tr><tr><td colspan="1" rowspan="1" class="con
fluenceTd"><p><code>durableSubscriberName</code></p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p>Specifies the name used to register a
durable subscription.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><code>messageSelector</code></p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p>Specifies the string value of a message
selector to use. For more information on the syntax used to specify message <br
clear="none" class="atl-forced-newline"> selectors, see the JMS 1.1
specification.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><code>transactional</code></p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p>Specifies whether the local JMS broker will
create transactions around message processing. The default is
<code>false</code>. Currently, this is not supported by the
runtime.</p></td></tr></tbody></table></div><h2
id="CXF2.xJMSconfiguration(removedinCXF3)-JMSRuntimeConfiguration">JMS Runtime
Configuration</h2>
<p>In addition to configuring the externally visible aspects of your JMS
endpoint, you can also configure aspects of its internal runtime behavior.
There are three types of runtime configuration:</p><ul><li>Session pool
configuration (common to both services and consumers)</li><li>Consumer specific
configuration</li><li>Service specific configuration</li></ul><h3
id="CXF2.xJMSconfiguration(removedinCXF3)-SessionPoolConfiguration">Session
Pool Configuration</h3><p>You configure an endpoint's JMS session pool using
the <code><a shape="rect" class="external-link"
href="http://jmssessionPoolConfig"
rel="nofollow">jms:sessionPoolConfig</a></code> element. This property allows
you to set a high and low water mark for the number of JMS sessions an endpoint
will keep pooled. The endpoint is guaranteed to maintain a pool of sessions
equal to the low water mark and to never pool more sessions than specified by
the high water mark.<br clear="none"> The <code><a shape="rect"
class="external-lin
k" href="http://jmssessionPool" rel="nofollow">jms:sessionPool</a></code>
element's attributes, listed below, specify the high and low water marks for
the endpoint's JMS session pool.</p><div class="table-wrap"><table
class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1"
class="confluenceTh"><p>Attribute</p></th><th colspan="1" rowspan="1"
class="confluenceTh"><p>Description</p></th></tr><tr><td colspan="1"
rowspan="1" class="confluenceTd"><p><code>lowWaterMark</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>Specifies the minimum number of
JMS sessions pooled by the endpoint. The default is 20.</p></td></tr><tr><td
colspan="1" rowspan="1"
class="confluenceTd"><p><code>highWaterMark</code></p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p>Specifies the maximum number of JMS
sessions pooled by the endpoint. The default is
500.</p></td></tr></tbody></table></div><p>The following example shows an
example of configuring the session pool for a CXF JMS
service endpoint.</p><div class="code panel pdl" style="border-width:
1px;"><div class="codeHeader panelHeader pdl" style="border-bottom-width:
1px;"><b>JMS Session Pool Configuration</b></div><div class="codeContent
panelContent pdl">
-<pre class="brush: bash; gutter: false; theme: Confluence"
style="font-size:12px;"><jms:destination
+<pre class="brush: java; gutter: false; theme: Default"
style="font-size:12px;"><jms:destination
name="{http://cxf.apache.org/jms_endpit}HelloWorldJMSPort.jms-destination">
...
<jms:sessionPool lowWaterMark="10" highWaterMark="5000" />
</jms:destination>
</pre>
</div></div><p>The <code><a shape="rect" class="external-link"
href="http://jmssessionPool" rel="nofollow">jms:sessionPool</a></code> element
can also be used within a <code><a shape="rect" class="external-link"
href="http://jmsconduit" rel="nofollow">jms:conduit</a></code>.</p><h3
id="CXF2.xJMSconfiguration(removedinCXF3)-ConsumerSpecificRuntimeConfiguration">Consumer
Specific Runtime Configuration</h3><p>The JMS consumer configuration allows
you to specify two runtime behaviors:</p><ul><li>the number of milliseconds the
consumer will wait for a response.</li><li>the number of milliseconds a request
will exist before the JMS broker can remove it.</li></ul><p>You use the
<code><a shape="rect" class="external-link" href="http://jmsclientConfig"
rel="nofollow">jms:clientConfig</a></code> element to set JMS consumer runtime
behavior. This element's attributes, listed in the following table, specify the
configuration values for consumer runtime behavior.</p><div
class="table-wrap"><tabl
e class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1"
class="confluenceTh"><p>Attribute</p></th><th colspan="1" rowspan="1"
class="confluenceTh"><p>Description</p></th></tr><tr><td colspan="1"
rowspan="1"
class="confluenceTd"><p><code>clientReceiveTimeout</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>Specifies the amount of time,
in milliseconds, that the endpoint will wait for a response before it times out
and issues an exception. The default value is 2000.</p></td></tr><tr><td
colspan="1" rowspan="1"
class="confluenceTd"><p><code>messageTimeToLive</code></p></td><td colspan="1"
rowspan="1" class="confluenceTd"><p>Specifies the amount of time, in
milliseconds, that a request can remain unrecieved before the JMS broker can
delete it. The default value is 0 which specifies that the message can never be
deleted.</p></td></tr></tbody></table></div><p>The following example shows a
configuration fragment that sets the consumer endpoint's request lifetime
to 500 milliseconds and its timeout value to 500 milliseconds.</p><div
class="code panel pdl" style="border-width: 1px;"><div class="codeHeader
panelHeader pdl" style="border-bottom-width: 1px;"><b>JMS Consumer Endpoint
Runtime Configuration</b></div><div class="codeContent panelContent pdl">
-<pre class="brush: bash; gutter: false; theme: Confluence"
style="font-size:12px;"><jms:conduit
name="{http://cxf.apache.org/jms_endpt}HelloWorldJMSPort.jms-conduit">
+<pre class="brush: java; gutter: false; theme: Default"
style="font-size:12px;"><jms:conduit
name="{http://cxf.apache.org/jms_endpt}HelloWorldJMSPort.jms-conduit">
...
<jms:clientConfig clientReceiveTimeout="500"
messageTimeToLive="500" />
</jms:conduit>
</pre>
</div></div><h3
id="CXF2.xJMSconfiguration(removedinCXF3)-ServiceSpecificRuntimeConfiguration">Service
Specific Runtime Configuration</h3><p>The JMS service configuration allows you
to specify to runtime behaviors:</p><ul><li>the amount of time a response
message can remain unreceived before the JMS broker can delete it.</li><li>the
client identifier used when creating and accessing durable
subscriptions.</li></ul><p>The <code><a shape="rect" class="external-link"
href="http://jmsserverConfig" rel="nofollow">jms:serverConfig</a></code>
element is used to specify the service runtime configuration. This element's
attributes, listed below, specify the configuration values that control the
service's runtime behavior.</p><div class="table-wrap"><table
class="confluenceTable"><tbody><tr><th colspan="1" rowspan="1"
class="confluenceTh"><p>Attribute</p></th><th colspan="1" rowspan="1"
class="confluenceTh"><p>Description</p></th></tr><tr><td colspan="1"
rowspan="1" class="confluenceTd"><p><c
ode>messageTimeToLive</code></p></td><td colspan="1" rowspan="1"
class="confluenceTd"><p>Specifies the amount of time, in milliseconds, that a
response can remain unread before the JMS broker is allowed to delete it. The
default is 0 which specifies that the message can live
forever.</p></td></tr><tr><td colspan="1" rowspan="1"
class="confluenceTd"><p><code>durableSubscriptionClientId</code></p></td><td
colspan="1" rowspan="1" class="confluenceTd"><p>Specifies the client identifier
the endpoint uses to create and access durable
subscriptions.</p></td></tr></tbody></table></div><p>The following example
shows a configuration fragment that sets the service endpoint's response
lifetime to 500 milliseconds and its durable subscription client identifier to
<code>jms-test-id</code>.</p><div class="code panel pdl" style="border-width:
1px;"><div class="codeHeader panelHeader pdl" style="border-bottom-width:
1px;"><b>JMS Service Endpoint Runtime Configuration</b></div><div
class="codeContent
panelContent pdl">
-<pre class="brush: bash; gutter: false; theme: Confluence"
style="font-size:12px;"><jms:destination
id="{http://cxf.apache.org/jms_endpt}HelloWorldJMSPort.jms-destination">
+<pre class="brush: java; gutter: false; theme: Default"
style="font-size:12px;"><jms:destination
id="{http://cxf.apache.org/jms_endpt}HelloWorldJMSPort.jms-destination">
<jms:address ... >
...
</jms:address>
Modified: websites/production/cxf/content/docs/cxf-architecture.html
==============================================================================
--- websites/production/cxf/content/docs/cxf-architecture.html (original)
+++ websites/production/cxf/content/docs/cxf-architecture.html Wed Sep 13
15:05:52 2017
@@ -117,11 +117,11 @@ Apache CXF -- CXF Architecture
<!-- Content -->
<div class="wiki-content">
<div id="ConfluenceContent"><h1
id="CXFArchitecture-ApacheCXFSoftwareArchitectureGuide">Apache CXF Software
Architecture Guide</h1><p>This document provides an architectural overview of
the Apache CXF services framework.</p><h2
id="CXFArchitecture-TableofContents">Table of Contents</h2><p><style
type="text/css">/*<![CDATA[*/
-div.rbtoc1505311230758 {padding: 0px;}
-div.rbtoc1505311230758 ul {list-style: outline;margin-left: 0px;}
-div.rbtoc1505311230758 li {margin-left: 0px;padding-left: 0px;}
+div.rbtoc1505314941124 {padding: 0px;}
+div.rbtoc1505314941124 ul {list-style: outline;margin-left: 0px;}
+div.rbtoc1505314941124 li {margin-left: 0px;padding-left: 0px;}
-/*]]>*/</style></p><div class="toc-macro rbtoc1505311230758">
+/*]]>*/</style></p><div class="toc-macro rbtoc1505314941124">
<ul class="toc-indentation"><li><a shape="rect"
href="#CXFArchitecture-ApacheCXFSoftwareArchitectureGuide">Apache CXF Software
Architecture Guide</a>
<ul class="toc-indentation"><li><a shape="rect"
href="#CXFArchitecture-TableofContents">Table of Contents</a></li><li><a
shape="rect"
href="#CXFArchitecture-ArchitecturalGoalsandConstraints">Architectural Goals
and Constraints</a></li><li><a shape="rect"
href="#CXFArchitecture-CXF-API">CXF-API</a>
<ul class="toc-indentation"><li><a shape="rect"
href="#CXFArchitecture-Bus">Bus</a></li><li><a shape="rect"
href="#CXFArchitecture-Howservicecallsareprocessed">How service calls are
processed</a></li><li><a shape="rect"
href="#CXFArchitecture-Front-ends">Front-ends</a></li><li><a shape="rect"
href="#CXFArchitecture-Messaging&Interceptors">Messaging &
Interceptors</a></li><li><a shape="rect"
href="#CXFArchitecture-TheServiceModel">The Service Model</a></li><li><a
shape="rect" href="#CXFArchitecture-DataBindings">Data Bindings</a></li><li><a
shape="rect" href="#CXFArchitecture-ProtocolBindings">Protocol
Bindings</a></li><li><a shape="rect"
href="#CXFArchitecture-Transports">Transports</a></li><li><a shape="rect"
href="#CXFArchitecture-AJAX-WSexample">A JAX-WS example</a></li></ul>
@@ -134,13 +134,13 @@ div.rbtoc1505311230758 li {margin-left:
-<span class="gliffy-container" id="gliffy-container-25591945-3741"
data-fullwidth="1269" data-ceoid="44806"
data-edit="${diagramEditLink.getLinkUrl()}"
data-full="${diagramZoomLink.getLinkUrl()}"
data-filename="MessageFlowOnClientSide">
+<span class="gliffy-container" id="gliffy-container-25591945-1842"
data-fullwidth="1269" data-ceoid="44806"
data-edit="${diagramEditLink.getLinkUrl()}"
data-full="${diagramZoomLink.getLinkUrl()}"
data-filename="MessageFlowOnClientSide">
- <map id="gliffy-map-25591945-1563" name="gliffy-map-25591945-1563"></map>
+ <map id="gliffy-map-25591945-9232" name="gliffy-map-25591945-9232"></map>
- <img class="gliffy-image" id="gliffy-image-25591945-3741" width="600"
height="274" data-full-width="1269" data-full-height="580"
src="https://cwiki.apache.org/confluence/download/attachments/44806/MessageFlowOnClientSide.png?version=4&modificationDate=1298215366000&api=v2"
alt="MessageFlowOnClientSide" usemap="#gliffy-map-25591945-1563">
+ <img class="gliffy-image" id="gliffy-image-25591945-1842" width="600"
height="274" data-full-width="1269" data-full-height="580"
src="https://cwiki.apache.org/confluence/download/attachments/44806/MessageFlowOnClientSide.png?version=4&modificationDate=1298215366000&api=v2"
alt="MessageFlowOnClientSide" usemap="#gliffy-map-25591945-9232">
- <map class="gliffy-dynamic" id="gliffy-dynamic-map-25591945-3741"
name="gliffy-dynamic-map-25591945-3741"></map>
+ <map class="gliffy-dynamic" id="gliffy-dynamic-map-25591945-1842"
name="gliffy-dynamic-map-25591945-1842"></map>
</span>
@@ -149,18 +149,18 @@ div.rbtoc1505311230758 li {margin-left:
-<span class="gliffy-container" id="gliffy-container-25591953-3149"
data-fullwidth="1222" data-ceoid="44806"
data-edit="${diagramEditLink.getLinkUrl()}"
data-full="${diagramZoomLink.getLinkUrl()}"
data-filename="MessageFlowOnServerSide">
+<span class="gliffy-container" id="gliffy-container-25591953-6810"
data-fullwidth="1222" data-ceoid="44806"
data-edit="${diagramEditLink.getLinkUrl()}"
data-full="${diagramZoomLink.getLinkUrl()}"
data-filename="MessageFlowOnServerSide">
- <map id="gliffy-map-25591953-553" name="gliffy-map-25591953-553"></map>
+ <map id="gliffy-map-25591953-2558" name="gliffy-map-25591953-2558"></map>
- <img class="gliffy-image" id="gliffy-image-25591953-3149" width="600"
height="295" data-full-width="1222" data-full-height="600"
src="https://cwiki.apache.org/confluence/download/attachments/44806/MessageFlowOnServerSide.png?version=4&modificationDate=1298310696000&api=v2"
alt="MessageFlowOnServerSide" usemap="#gliffy-map-25591953-553">
+ <img class="gliffy-image" id="gliffy-image-25591953-6810" width="600"
height="295" data-full-width="1222" data-full-height="600"
src="https://cwiki.apache.org/confluence/download/attachments/44806/MessageFlowOnServerSide.png?version=4&modificationDate=1298310696000&api=v2"
alt="MessageFlowOnServerSide" usemap="#gliffy-map-25591953-2558">
- <map class="gliffy-dynamic" id="gliffy-dynamic-map-25591953-3149"
name="gliffy-dynamic-map-25591953-3149"></map>
+ <map class="gliffy-dynamic" id="gliffy-dynamic-map-25591953-6810"
name="gliffy-dynamic-map-25591953-6810"></map>
</span>
</p><p>Server Side</p><h3
id="CXFArchitecture-Front-ends">Front-ends</h3><p>Front-ends provide a
programming model to interact with CXF. JAX-WS, JAX-RS, Simple and Javascript
front-end APIs are provided by CXF . Each implementation is cleanly separated
from the rest of CXF, just like the bindings and the core. Front-ends provide
functionality through interceptors that are added to Services and Endpoints.
See also <a shape="rect" href="frontends.html">Front-ends</a></p><h3
id="CXFArchitecture-Messaging&Interceptors">Messaging &
Interceptors</h3><p>CXF is built on a generic messaging layer comprised of
Messages, Interceptors, and InterceptorChains. Interceptors are the fundamental
unit of functionality. By dividing up how messages are processed and sent, this
gives CXF a very flexible architecture. It can be reconfigured at any point in
the processing. This also gives CXF the ability to pause & resume
interceptor chains.</p><p>Interceptors have a method, <code>handleMessag
e</code>, which allows them to act on the Message.These Interceptors can then
be built up into chains of interceptors, straightforwardly called
InterceptorChains. Some examples include:</p><ul><li>An interceptor which
parses just the headers of a SOAP message into DOM elements</li><li>A
WS-Security interceptor which decrypts or authenticates an incoming
message.</li><li>An outgoing data binding interceptor which serializes the
result</li></ul><p>Interceptors are uni-directional and are inherently unaware
of whether they are dealing with a request, response, or fault.</p><h4
id="CXFArchitecture-PhaseInterceptors">Phase Interceptors</h4><p>CXF provides
an <code>InterceptorChain</code> implementation called the
<code>PhaseInterceptorChain</code>. When Interceptors are added to the chain,
they are grouped into ordered phases.  A <code>PhaseInterceptor</code> may
provide guidance as to how it is to be ordered within the phase.</p><p>Let us
take a hypothetical simplified example (NOT
E: these phases and interceptors don't necessarily exist in CXF). Let us say
we are parsing a SOAP message. We may want to have two phases. First, a
dispatch phase which parses the soap headers and determines which service to
route the Message to. Second, an unmarshal phase which binds the SOAP body to
JAXB objects. In the first dispatch phase we could implement this via two
interceptors, first a ReadHeadersInterceptor which parses the headers and
second a WS-AddressingInInterceptor which determines which service we're
invoking from the WS-Addressing header. In the second unmarshal phase, we have
just a single JAXBUnmarshallerIntercptor. Both the
<code>ReadHeadersInterceptor</code> and <code>AddressingInInterceptor</code>
would tell the <code>PhaseInterceptorChain</code> they are in the "dispatch"
phase by returning "dispatch" when <code>getPhase()</code> is called.
Additionally, the <code>ReadHeadersInterceptor</code> could specify that it
wants to run before the <code>AddressingIn
Interceptor</code> by returning the interceptor id when
<code>Interceptor.getBefore()</code> is called.</p><p>Before it was mentioned
how chains were very dynamic and flexible. In our above example, we could add
interceptors specific to that service once it is resolved. Or we could pause
the chain once while we wait for some external chain, like an asynchronous
service response.</p><h4 id="CXFArchitecture-FaultHandling">Fault
Handling</h4><p>At any point during processing, an interceptor may throw a
Fault, or a derivative of a Fault like the <code>SoapFault</code>. This will
cause the chain to stop invoking and unwind it. Unwinding consists of calling
handleFault on each interceptor that was invoked in reverse
order.</p><p>InterceptorChains have the concept of a fault observer. Once the
chain is unwound, the fault interceptor is invoked with the message that caused
the fault. The fault observer may trigger a new chain which then invokes a
specified set of interceptors meant to handl
e faults.</p><h4 id="CXFArchitecture-Exchanges">Exchanges</h4><p>In addition
to the concept of a Message, there is the concept of the <code>Exchange</code>.
The exchange class holds a references to the in, out and fault messages for the
current message exchange.</p><p>It also holds properties specific to the
exchange, and not just the message. For instance the <code>Exchange</code>
holds the <code>Service</code> that is current being invoked in it.</p><h4
id="CXFArchitecture-ReentrantInterceptorChains">Reentrant
InterceptorChains</h4><p>An interesting feature of the
<code>PhaseInterceptorChain</code> is that it is reentrant. This can be
powerful and slightly dangerous. This feature is only used in CXF during the
sending of an outgoing message, The <code>SoapOutInterceptor</code> is the best
example:</p><div class="code panel pdl" style="border-width: 1px;"><div
class="codeContent panelContent pdl">
-<pre class="brush: bash; gutter: false; theme: Confluence"
style="font-size:12px;">public void handleMessage(Message m) {
+<pre class="brush: java; gutter: false; theme: Default"
style="font-size:12px;">public void handleMessage(Message m) {
writeSoapEnvelopeStart();
writeSoapBodyStart();
@@ -172,11 +172,11 @@ div.rbtoc1505311230758 li {margin-left:
}
</pre>
</div></div><h3 id="CXFArchitecture-TheServiceModel">The Service
Model</h3><p>The Service model is the representation of a service within CXF.
It is made up of two parts. First there is the <code>ServiceInfo</code> which
contains a WSDL-like model of the service and its operations, bindings,
endpoints and schema. Second, there is the Service itself, which contains the
<code>ServiceInfo</code>, data-binding information, service interceptors,
service properties and more.</p><p>A service can be constructed from many
different sources including classes and WSDLs (1.1 or 2.0). Typically
front-ends are responsible for creating a service via service factories.
Factory components such as <code>ServerFactoryBean</code> and
<code>ClientProxyFactoryBean</code> can used with the front-end to create,
publish and consume web services. The factory classes build up the service
model and configure the service interceptors, data bindings and more.</p><p>The
Service model itself is contained in the <c
ode>ServiceInfo</code> class. The following image depicts a subset of the
Service Model's packaged API:</p><p><span
class="confluence-embedded-file-wrapper"><img class="confluence-embedded-image
confluence-thumbnail"
src="cxf-architecture.data/service_model.png"></span></p><h3
id="CXFArchitecture-DataBindings">Data Bindings</h3><p>Data bindings implement
the mapping between XML elements and Java objects. Data bindings convert data
to and from XML, produce XML schema, and provide support for wsdl2java code
generation. Not all data bindings support all of this functionality. At very
least, a data binding must provide the data conversion. See <a shape="rect"
href="data-binding-architecture.html">Data Binding Architecture</a> for
details. Currently supported data bindings include JAXB 2.x (default), Aegis,
Apache XMLBeans, Service Data Objects (SDO) and JiBX (under
development).</p><h3 id="CXFArchitecture-ProtocolBindings">Protocol
Bindings</h3><p>Bindings provide ways to map concrete f
ormats and protocols on top of transports. A binding contains two main parts,
a <code>BindingFactory</code> and a <code>Binding</code>. A
<code>BindingFactory</code> builds a <code>Binding</code> from the service
model's <code>BindingInfo</code>. The binding contains interceptors specific to
the binding and also implements the <code>createMessage()</code> method, which
creates a <code>Message</code> implementation specific for that
binding.</p><p>CXF currently supported the following bindings protocols: SOAP
1.1, SOAP 1.2, REST/HTTP, pure XML and CORBA.</p><h4
id="CXFArchitecture-TheSoapBinding">The Soap Binding</h4><p>The prototypical
binding is SOAP. It has its own <code>Message</code> class called the
<code>SoapMessage</code>. It adds the ability to hold the current
<code>SoapVersion</code> and the headers for the message.</p><p>The
<code>Soap</code> binding also adds a special type of interceptor called the
<code>SoapInterceptor</code>. The <code>SoapInterceptor</code> adds two
methods to the <code>Interceptor</code> class:</p><div class="code panel pdl"
style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<pre class="brush: bash; gutter: false; theme: Confluence"
style="font-size:12px;">Set<URI> getRoles();
+<pre class="brush: java; gutter: false; theme: Default"
style="font-size:12px;">Set<URI> getRoles();
Set<QName> getUnderstoodHeaders();
</pre>
</div></div><p>These inform the SOAP interceptors as to what headers and roles
the particular SOAP interceptor understands.</p><p>It has many interceptors
designed to handle SOAP messages:</p><ol><li><code>StaxInInterceptor</code>:
Creates an <code>XMLStreamReader</code> from an incoming
<code>InputStream</code></li><li><code>ReadHeadersInterceptor</code>: Reads the
headers into the
<code>SoapMessage</code></li><li><code>MustUnderstandInterceptor</code>: Checks
the <code>MustUnderstand</code> attributes of all the headers against all the
<code>SoapInterceptor</code>'s <code>getUnderstoodHeaders</code>
method.</li><li><code>SoapOutInterceptor</code>:</li></ol><h4
id="CXFArchitecture-AdditionalBindings">Additional Bindings</h4><p>Other
bindings include REST/HTTP binding, pure XML binding, and the CORBA
binding.</p><h3 id="CXFArchitecture-Transports">Transports</h3><p>CXF includes
its own transport abstraction layer to hide transport specific details from the
binding and front end laye
rs. Currently supported transports include: HTTP, HTTPs, HTTP-Jetty,
HTTP-OSGI, Servlet, local, JMS, In-VM and many others via the Camel transport
for CXF such as SMTP/POP3, TCP and Jabber. Learn more about transports <a
shape="rect" href="http://cxf.apache.org/docs/transports.html">here</a>.</p><h4
id="CXFArchitecture-Conduits">Conduits</h4><p>Conduits provide the basis for
outgoing message sending. A <code>Conduit</code> is created from a
<code>ConduitInitiator</code>. Sending a message is a multistep
pocess:</p><ol><li>Call conduit.prepare(message): this starts the message
sending. At this point a <code>Conduit</code> may initiate a connection and set
the OutputStream for the outgoing message.</li><li>Writing of the actual
message to the <code>OutputStream</code></li><li>Call to
<code>conduit.close(message)</code>: this closes and disposes of any existing
resources for the message sending.<br clear="none"> A message sender may also
register a <code>MessageObserver</code> with the
Conduit. If the <code>Conduit</code> is synchronous, the
<code>MessageObserver</code> will be notified once a response has been
received.</li></ol><h4
id="CXFArchitecture-Destinations">Destinations</h4><p>Destinations are the
basis for receiving incoming messages. A destination is created from a
<code>DestinationFactory</code>:</p><div class="code panel pdl"
style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<pre class="brush: bash; gutter: false; theme: Confluence"
style="font-size:12px;">DestinationFactoryManager dfManager =
bus.getExtension(DestinationFactoryManager.class);
+<pre class="brush: java; gutter: false; theme: Default"
style="font-size:12px;">DestinationFactoryManager dfManager =
bus.getExtension(DestinationFactoryManager.class);
// Find a DestinationFactory for the SOAP HTTP transport
DestinationFactory df =
dfManager.getDestinationFactory("http://schemas.xmlsoap.org/wsdl/soap/http");
@@ -186,7 +186,7 @@ EndpointInfo endpointInfo = ...;
Destination destination = df.getDestination(endpointInfo);
</pre>
</div></div><p>MessageObservers can then be registered with Destinations.
These listen for incoming messages:</p><div class="code panel pdl"
style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<pre class="brush: bash; gutter: false; theme: Confluence"
style="font-size:12px;">MessageObserver myObserver = ...;
+<pre class="brush: java; gutter: false; theme: Default"
style="font-size:12px;">MessageObserver myObserver = ...;
destination.setMessageObserver(myObserver);
</pre>
</div></div><p>The most common <code>MessageObserver</code> used in CXF is the
<code>ChainInitiationObserver</code>. This takes the incoming message, creates
a message Exchange & <code>PhaseInterceptorChain</code>, then starts the
chain.</p><h3 id="CXFArchitecture-AJAX-WSexample">A JAX-WS
example</h3><p>Here's a small example of what might happen when we publish a
service via the JAX-WS <code>Endpoint.publish()</code> method.</p><ol><li>Call
to <code>Endpoint.publish("http://localhost/service",
myService)</code></li><li>The <code>EndpointImpl</code> creates a Service from
the <code>myService</code> object using the
<code>JaxWsServiceFactoryBean</code> using the class and/or WSDL</li><li>An
<code>EndpointInfo</code> is created for the <code>Endpoint.publish</code>
URL</li><li>A <code>JaxWsEndpointImpl</code> is created from the
<code>EndpointInfo</code>. This contains the JAX-WS endpoint specific
interceptors</li><li>The <code>JaxWsEndpointImpl</code> creates a
<code>Binding</cod
e> and <code>Destination</code> to listen on.</li></ol><h2
id="CXFArchitecture-Dependencies">Dependencies</h2><p><a shape="rect"
href="http://cxf.apache.org/docs/cxf-dependency-graphs.html">CXF's
dependencies</a></p><h2 id="CXFArchitecture-Quality">Quality</h2><p>CXF's
Software Quality approach is detailed <a shape="rect"
href="http://cxf.apache.org/coding-guidelines.html">here</a>.</p><h3
id="CXFArchitecture-References">References</h3><ul><li><a shape="rect"
class="external-link" href="http://en.wikipedia.org/wiki/Software_architecture"
rel="nofollow">Software Architecture</a>, <em>Wikipedia</em></li><li><a
shape="rect" class="external-link"
href="http://www.ecs.csun.edu/~rlingard/COMP684/Example2SoftArch.htm#Logical%20View"
rel="nofollow">Sample S/W Architecture Document</a>, <em>Rational Software
Corporation</em></li><li><a shape="rect" class="external-link"
href="http://www.oreillynet.com/xml/blog/2006/03/documenting_your_software_arch.html"
rel="nofollow">Documenting your Softw
are Architecture</a>, <em>by Jim Alateras</em> (March 2006)</li></ul></div>
Modified: websites/production/cxf/content/docs/cxf-oauth-10.html
==============================================================================
--- websites/production/cxf/content/docs/cxf-oauth-10.html (original)
+++ websites/production/cxf/content/docs/cxf-oauth-10.html Wed Sep 13 15:05:52
2017
@@ -32,8 +32,8 @@
<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 src='/resources/highlighter/scripts/shBrushBash.js'></script>
+<script src='/resources/highlighter/scripts/shBrushJava.js'></script>
<script>
SyntaxHighlighter.defaults['toolbar'] = false;
SyntaxHighlighter.all();
@@ -138,7 +138,7 @@ Apache CXF -- CXF OAuth 1.0
<p>Configuration is exatcly this same as for every JAX-RS service:</p>
<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent
panelContent pdl">
-<pre class="brush: bash; gutter: false; theme: Confluence"
style="font-size:12px;">
+<pre class="brush: java; gutter: false; theme: Default"
style="font-size:12px;">
<!-- Publish OAuth endpoints-->
    <jaxrs:server id="oauthServer" address="/oauth/">
        <jaxrs:serviceBeans>
@@ -166,7 +166,7 @@ Apache CXF -- CXF OAuth 1.0
<p>To make that transparent to the developers, CXF uses:</p>
<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent
panelContent pdl">
-<pre class="brush: bash; gutter: false; theme: Confluence"
style="font-size:12px;">
+<pre class="brush: java; gutter: false; theme: Default"
style="font-size:12px;">
org.apache.cxf.auth.oauth.provider.OAuthDataProvider
</pre>
</div></div>
@@ -174,7 +174,7 @@ org.apache.cxf.auth.oauth.provider.OAuth
<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent
panelContent pdl">
-<pre class="brush: bash; gutter: false; theme: Confluence"
style="font-size:12px;">
+<pre class="brush: java; gutter: false; theme: Default"
style="font-size:12px;">
org.apache.cxf.auth.oauth.provider.MemoryOauthDataProvider
</pre>
</div></div>
@@ -182,7 +182,7 @@ org.apache.cxf.auth.oauth.provider.Memor
<p>that is located in core OAuth module and </p>
<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent
panelContent pdl">
-<pre class="brush: bash; gutter: false; theme: Confluence"
style="font-size:12px;">
+<pre class="brush: java; gutter: false; theme: Default"
style="font-size:12px;">
org.apache.cxf.auth.oauth.demo.server.oauth.SampleOAuthDataProvider
</pre>
</div></div>
@@ -226,7 +226,7 @@ Client need to attach access token with
<p>OAuthSecurityFilter</p>
<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent
panelContent pdl">
-<pre class="brush: bash; gutter: false; theme: Confluence"
style="font-size:12px;">
+<pre class="brush: java; gutter: false; theme: Default"
style="font-size:12px;">
org.apache.cxf.auth.oauth.interceptors.OAuthSecurityFilter
</pre>
</div></div>
@@ -245,14 +245,14 @@ org.apache.cxf.auth.oauth.interceptors.O
<p>The only thing that needs to be done is adding</p>
<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent
panelContent pdl">
-<pre class="brush: bash; gutter: false; theme: Confluence"
style="font-size:12px;">
+<pre class="brush: java; gutter: false; theme: Default"
style="font-size:12px;">
org.apache.cxf.auth.oauth.integration.spring.security.SpringOAuthAuthenticationFilter
</pre>
</div></div>
<p>configuration in web.xml file <strong>following</strong>
OAuthSecurityFilter. SpringOAuthAuthenticationFilter initializes
SpringSecurityContext and allows to benefit from Spring Security framework.<br
clear="none">
Sample JAX-RS service could looks like:</p>
<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent
panelContent pdl">
-<pre class="brush: bash; gutter: false; theme: Confluence"
style="font-size:12px;">
+<pre class="brush: java; gutter: false; theme: Default"
style="font-size:12px;">
@Path("/")
public class SampleResourceProvider {
Modified: websites/production/cxf/content/docs/data-binding-architecture.html
==============================================================================
--- websites/production/cxf/content/docs/data-binding-architecture.html
(original)
+++ websites/production/cxf/content/docs/data-binding-architecture.html Wed Sep
13 15:05:52 2017
@@ -32,8 +32,8 @@
<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 src='/resources/highlighter/scripts/shBrushBash.js'></script>
+<script src='/resources/highlighter/scripts/shBrushJava.js'></script>
<script>
SyntaxHighlighter.defaults['toolbar'] = false;
SyntaxHighlighter.all();
@@ -138,7 +138,7 @@ Apache CXF -- Data Binding Architecture
<p>Each data binding supports one or more formats for the data in transit. A
'format' is a Java representation of XML. CXF works, primarily, with STaX.
Thus, all data bindings must support XMLStreamReader and XMLStreamWriter as
formats. Some interceptors expect to be able to read or write DOM Nodes. Thus,
new data bindings should also support this format. Data bindings advertise
their supported data formats via their implementation of two functions from
DataBinding, e.g.:</p>
<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent
panelContent pdl">
-<pre class="brush: bash; gutter: false; theme: Confluence"
style="font-size:12px;">
+<pre class="brush: java; gutter: false; theme: Default"
style="font-size:12px;">
public Class<?>[] getSupportedReaderFormats() {
return new Class[] {XMLStreamReader.class, Node.class};
}
@@ -153,7 +153,7 @@ Apache CXF -- Data Binding Architecture
<p>All the work of mapping is done by objects that implement
DataReader<Format> and DataWriter<Format>, where 'Format' is a
representation class as defined above. CXF code obtains readers and writers
from data binding objects via </p>
<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent
panelContent pdl">
-<pre class="brush: bash; gutter: false; theme: Confluence"
style="font-size:12px;">
+<pre class="brush: java; gutter: false; theme: Default"
style="font-size:12px;">
<T> DataReader<T> createReader(Class<T> cls);
<T> DataWriter<T> createWriter(Class<T> cls);
</pre>
@@ -161,7 +161,7 @@ Apache CXF -- Data Binding Architecture
<p>Such a call might look like:</p>
<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent
panelContent pdl">
-<pre class="brush: bash; gutter: false; theme: Confluence"
style="font-size:12px;">
+<pre class="brush: java; gutter: false; theme: Default"
style="font-size:12px;">
DataReader<XMLStreamReader> reader =
binding.createReader(XMLStreamReader.class);
</pre>
</div></div>
Modified: websites/production/cxf/content/docs/debugging-and-logging.html
==============================================================================
--- websites/production/cxf/content/docs/debugging-and-logging.html (original)
+++ websites/production/cxf/content/docs/debugging-and-logging.html Wed Sep 13
15:05:52 2017
@@ -32,8 +32,8 @@
<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 src='/resources/highlighter/scripts/shBrushBash.js'></script>
+<script src='/resources/highlighter/scripts/shBrushJava.js'></script>
<script>
SyntaxHighlighter.defaults['toolbar'] = false;
SyntaxHighlighter.all();
@@ -118,7 +118,7 @@ Apache CXF -- Debugging and Logging
<!-- Content -->
<div class="wiki-content">
<div id="ConfluenceContent"><ul class="childpages-macro"><li><a shape="rect"
href="general-cxf-logging.html">General CXF Logging</a></li><li><a shape="rect"
href="message-logging.html">Message Logging</a></li><li><a shape="rect"
href="old-message-logging.html">Old Message Logging</a></li><li><a shape="rect"
href="atom-logging.html">ATOM Logging</a></li></ul><h1
id="DebuggingandLogging-DebuggingTools">Debugging Tools</h1><h2
id="DebuggingandLogging-EclipseIDE">Eclipse IDE</h2><p>See this <a shape="rect"
class="external-link"
href="https://web-gmazza.rhcloud.com/blog/entry/eclipse-debug-web-services"
rel="nofollow">blog entry</a> for information on debugging web services using
Eclipse. Note this is primarily for tracing/debugging source code; you will
probably still want to use one of the tools below to capture network traffic,
view SOAP requests and responses, etc.</p><h2
id="DebuggingandLogging-NetBeansIDE">NetBeans IDE</h2><p>NetBeans include a <a
shape="rect" class="external-link"
href="http://www.netbeans.org/features/java/debugger.html"
rel="nofollow">debugger</a>, profiler, and an HTTP monitor that can assist
in troubleshooting SOA applications.</p><h2
id="DebuggingandLogging-tcpmonplus">tcpmonplus</h2><p><a shape="rect"
class="external-link" href="https://sourceforge.net/projects/tcpmonplus/"
rel="nofollow">tcpmonplus</a> allows you to easily view messages as they go
back and forth on the wire.</p><h2
id="DebuggingandLogging-WSMonitor">WSMonitor</h2><p><a shape="rect"
class="external-link"
href="https://java.net/projects/wsmonitor/sources/svn/show/trunk/wsmonitor?rev=97"
rel="nofollow">WSMonitor</a> in another option to Tcpmon with slightly more
functionality.</p><h2 id="DebuggingandLogging-NetSniffer">NetSniffer</h2><p><a
shape="rect" class="external-link"
href="http://www.miray.de/products/sat.netsniffer.html"
rel="nofollow">NetSniffer</a> makes it possible to track the network traffic
between arbitrary devices within a LAN segment.</p><h2 id="Deb
uggingandLogging-Wireshark">Wireshark</h2><p><a shape="rect"
class="external-link" href="http://www.wireshark.org/"
rel="nofollow">Wireshark</a>, a network packet analyzer, is useful for
following the routing of SOAP messages. It can also help when you are getting
an HTML error message from the server that your CXF client cannot normally
process, by allowing you to see the non-SOAP error message.</p><h2
id="DebuggingandLogging-SOAPUI">SOAP UI</h2><p><a shape="rect"
class="external-link" href="http://soapui.org" rel="nofollow">SOAP UI</a> can
also be used for debugging. In addition to viewing messages, it allows you send
messages and load test your services. It also has plugins for the <a
shape="rect" class="external-link"
href="http://soapui.org/IDE-Plugins/eclipse-plugin.html" rel="nofollow">Eclipse
IDE</a>, <a shape="rect" class="external-link"
href="http://www.soapui.org/IDE-Plugins/netbean.html" rel="nofollow">NetBeans
IDE</a> and <a shape="rect" class="external-link" href="http
://www.soapui.org/IDE-Plugins/intellij.html" rel="nofollow">IntelliJ
IDEA</a>.</p><h1 id="DebuggingandLogging-OtherHelpfulTools">Other Helpful
Tools</h1><h2 id="DebuggingandLogging-WSDLViewer">WSDL Viewer</h2><p><a
shape="rect" class="external-link"
href="http://tomi.vanek.sk/index.php?page=wsdl-viewer" rel="nofollow">WSDL
Viewer</a> is a small tool to visualize web-services in a more intuitive
way.</p><h1 id="DebuggingandLogging-SOAPFaultfordebugging">SOAP Fault for
debugging</h1><h2 id="DebuggingandLogging-Stacktraceinfaultdetails">Stack trace
in fault details</h2><p>CXF supports the ability to put server stack trace
information into the fault message fault details, if you enable the option of
'faultStackTraceEnabled'. It is useful for debugging if the soap fault message
is not defined in the WSDL operation.</p><div class="code panel pdl"
style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<pre class="brush: bash; gutter: false; theme: Confluence"
style="font-size:12px;"><jaxws:endpoint id="server"
address="http://localhost:9002/TestMessage"
+<pre class="brush: java; gutter: false; theme: Default"
style="font-size:12px;"><jaxws:endpoint id="server"
address="http://localhost:9002/TestMessage"
wsdlURL="ship.wsdl"
endpointName="s:TestSoapEndpoint"
serviceName="s:TestService"
@@ -129,7 +129,7 @@ Apache CXF -- Debugging and Logging
</jaxws:endpoint>
</pre>
</div></div><h2
id="DebuggingandLogging-Showingthecauseexceptionmessage">Showing the cause
exception message</h2><p>CXF doesn't show the cause exception message in the
fault message due to security consideration. However, this could potentially
cause some trouble on the client side, as the client will not be able to see
what the real cause of the exception is. You can let the CXF server return the
fault message with the embedded cause exception message by enabling the option
of 'exceptionMessageCauseEnabled' like this:</p><div class="code panel pdl"
style="border-width: 1px;"><div class="codeContent panelContent pdl">
-<pre class="brush: bash; gutter: false; theme: Confluence"
style="font-size:12px;"><jaxws:endpoint id="server"
address="http://localhost:9002/TestMessage"
+<pre class="brush: java; gutter: false; theme: Default"
style="font-size:12px;"><jaxws:endpoint id="server"
address="http://localhost:9002/TestMessage"
wsdlURL="ship.wsdl"
endpointName="s:TestSoapEndpoint"
serviceName="s:TestService"
Modified:
websites/production/cxf/content/docs/defining-contract-first-webservices-with-wsdl-generation-from-java.html
==============================================================================
---
websites/production/cxf/content/docs/defining-contract-first-webservices-with-wsdl-generation-from-java.html
(original)
+++
websites/production/cxf/content/docs/defining-contract-first-webservices-with-wsdl-generation-from-java.html
Wed Sep 13 15:05:52 2017
@@ -32,9 +32,9 @@
<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 src='/resources/highlighter/scripts/shBrushXml.js'></script>
<script src='/resources/highlighter/scripts/shBrushBash.js'></script>
+<script src='/resources/highlighter/scripts/shBrushXml.js'></script>
+<script src='/resources/highlighter/scripts/shBrushJava.js'></script>
<script>
SyntaxHighlighter.defaults['toolbar'] = false;
SyntaxHighlighter.all();
@@ -136,7 +136,7 @@ Apache CXF -- Defining Contract first we
<h3
id="DefiningContractfirstwebserviceswithwsdlgenerationfromjava-Customerdatatype">Customer
datatype</h3>
<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent
panelContent pdl">
-<pre class="brush: bash; gutter: false; theme: Confluence"
style="font-size:12px;">
+<pre class="brush: java; gutter: false; theme: Default"
style="font-size:12px;">
package com.example.customerservice;
@XmlAccessorType( XmlAccessType.FIELD )
@@ -157,7 +157,7 @@ public class Customer {
<p>Shows how enumerations are handled:</p>
<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent
panelContent pdl">
-<pre class="brush: bash; gutter: false; theme: Confluence"
style="font-size:12px;">
+<pre class="brush: java; gutter: false; theme: Default"
style="font-size:12px;">
package com.example.customerservice;
public enum CustomerType {
@@ -170,7 +170,7 @@ public enum CustomerType {
<p> Defining Exceptions is a little tricky as the default behaviour is to
create Exception_Exception classes in the later generated Java code. So we have
to use the @WebFault annotation to give the Bean for the data a name that is
separate from the Exception name.</p>
<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent
panelContent pdl">
-<pre class="brush: bash; gutter: false; theme: Confluence"
style="font-size:12px;">
+<pre class="brush: java; gutter: false; theme: Default"
style="font-size:12px;">
package com.example.customerservice;
@WebFault(name="NoSuchCustomer")
@@ -188,7 +188,7 @@ public class NoSuchCustomerException ext
<h3
id="DefiningContractfirstwebserviceswithwsdlgenerationfromjava-Servicedefinition">Service
definition</h3>
<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent
panelContent pdl">
-<pre class="brush: bash; gutter: false; theme: Confluence"
style="font-size:12px;">
+<pre class="brush: java; gutter: false; theme: Default"
style="font-size:12px;">
package com.example.customerservice;
@WebService
@@ -208,7 +208,7 @@ public interface CustomerService {
<p>You can <a shape="rect"
href="defining-contract-first-webservices-with-wsdl-generation-from-java.data/CustomerService.wsdl?version=2&modificationDate=1219326152000&api=v2"
data-linked-resource-id="59672633" data-linked-resource-version="2"
data-linked-resource-type="attachment"
data-linked-resource-default-alias="CustomerService.wsdl"
data-linked-resource-content-type="application/wsdl+xml"
data-linked-resource-container-id="93162"
data-linked-resource-container-version="15">download the wsdl this example
creates here</a>.</p>
<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent
panelContent pdl">
-<pre class="brush: bash; gutter: false; theme: Confluence"
style="font-size:12px;">
+<pre class="brush: java; gutter: false; theme: Default"
style="font-size:12px;">
<xs:complexType name="customer">
<xs:sequence>
<xs:element minOccurs="0" name="name" type="xs:string"/>
@@ -232,7 +232,7 @@ public interface CustomerService {
<p>The enumeration customerType is described as a simple type with a
restriction:</p>
<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent
panelContent pdl">
-<pre class="brush: bash; gutter: false; theme: Confluence"
style="font-size:12px;">
+<pre class="brush: java; gutter: false; theme: Default"
style="font-size:12px;">
<xs:simpleType name="customerType">
<xs:restriction base="xs:string">
<xs:enumeration value="PRIVATE"/>
@@ -246,7 +246,7 @@ public interface CustomerService {
<p>The Exception we defined is generated as a complexType with the defined
details and a message for the fault. It is important here that the Element and
the Message have different names. We ensure this by using the @Webfault
Annotation above. Else the later Java Code generation will produce an ugly
Exception name NoSuchCustomerException_Exception.</p>
<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent
panelContent pdl">
-<pre class="brush: bash; gutter: false; theme: Confluence"
style="font-size:12px;">
+<pre class="brush: java; gutter: false; theme: Default"
style="font-size:12px;">
<xs:element name="NoSuchCustomer" type="tns:NoSuchCustomer"/>
<xs:complexType name="NoSuchCustomer">
<xs:sequence>