servicemix-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From conflue...@apache.org
Subject [CONF] Apache ServiceMix: Integrate CXF with ServiceMix (page edited)
Date Fri, 07 Mar 2008 06:33:00 GMT
<html>
<head>
    <base href="http://cwiki.apache.org/confluence" />
    <style type="text/css">
    <!--
    body, p, td, table, tr, .bodytext, .stepfield {
	font-family: Verdana, arial, sans-serif;
	font-size: 11px;
	line-height: 16px;
	color: #000000;
	font-weight: normal;
}
#PageContent {
	text-align: left;
	background-color: #fff;
	padding: 0px;
	margin: 0px;
    padding-bottom:20px;
}
/*
** when this stylesheet is used for the Tiny MCE Wysiwyg editor's edit area, we can't
** use an id=PageContent or class=wiki-content, so we must
** set the body style to that used for PageContent, and p to that used for wiki-content.
*/

body {
	margin: 0px;
	padding: 0px;
	text-align: center;
    background-color: #f0f0f0;
}

@media print {

body {
    background-color: #fff;
}

}

.monospaceInput {
    font:12px monospace
}

.wiki-content p, .commentblock p {
    margin: 16px 0px 16px 0px;
    padding: 0px;
}

.wiki-content-preview {
    padding: 5px;
    border-left: 1px solid #3c78b5;
    border-right: 1px solid #3c78b5;
}

ul, ol {
    margin-top: 2px;
    margin-bottom: 2px;
    padding-top: 0px;
    padding-bottom: 0px;
}

pre {
    padding: 0px;
    margin-top: 5px;
    margin-left: 15px;
    margin-bottom: 5px;
    margin-right: 5px;
    text-align: left;
}

.helpheading {
    font-weight: bold;
    background-color: #D0D9BD;
        border-bottom: 1px solid #3c78b5;
        padding: 4px 4px 4px 4px;
        margin: 0px;
        margin-top: 10px;
}
.helpcontent {
        padding: 4px 4px 20px 4px;
    background-color: #f5f7f1;
}

.code {
 	border: 1px dashed #3c78b5;
    font-size: 11px;
	font-family: Courier;
    margin: 10px;
	line-height: 13px;
}

.focusedComment {
    background: #ffffce;
}

.commentBox, .focusedComment {
    padding: 10px;
    margin: 5px 0 5px 0;
    border: 1px #bbb solid;
}

.codeHeader {
    background-color: #f0f0f0;
 	border-bottom: 1px dashed #3c78b5;
    padding: 3px;
	text-align: center;
}

.codeContent {
    text-align: left;
    background-color: #f0f0f0;
    padding: 3px;
}

.preformatted {
 	border: 1px dashed #3c78b5;
    font-size: 11px;
	font-family: Courier;
    margin: 10px;
	line-height: 13px;
}

.preformattedHeader {
    background-color: #f0f0f0;
 	border-bottom: 1px dashed #3c78b5;
    padding: 3px;
	text-align: center;
}

.preformattedContent {
    background-color: #f0f0f0;
    padding: 3px;
}

.panel {
 	border: 1px dashed #3c78b5;
    margin: 10px;
    margin-top: 0px;
}

.panelHeader {
    background-color: #f0f0f0;
 	border-bottom: 1px dashed #3c78b5;
    padding: 3px;
	text-align: center;
}

.panelContent {
    background-color: #f0f0f0;
    padding: 5px;
}

.anonymousAlert {
    background-color: #f0f0f0;
 	border: 1px dashed red;
    font-size: 11px;
    padding: 10px 5px 10px 5px;
    margin: 4px;
	line-height: 13px;
}

.lockAlert {
    background-color: #f0f0f0;
    width: 50%;
 	border: 1px dashed red;
    font-size: 11px;
    padding: 10px 5px 10px 5px;
    margin: 4px;
	line-height: 13px;
}


.code-keyword {
  color: #000091;
  background-color: inherit;
}

.code-object {
  color: #910091;
  background-color: inherit;
}

.code-quote {
  color: #009100;
  background-color: inherit;
}

.code-comment {
  color: #808080;
  background-color: inherit;
}


.code-xml .code-keyword {
  color: inherit;
  font-weight: bold;
}

.code-tag {
  color: #000091;
  background-color: inherit;
}

.breadcrumbs {
    background-color: #f0f0f0;
 	border-color: #3c78b5;
	border-width: 1px 0px 1px 0px;
	border-style: solid;
    font-size: 11px;
    padding: 3px 0px 3px 0px;
}

.navmenu {
    border: 1px solid #ccc;
}

.menuheading {
    font-weight: bold;
    background-color: #f0f0f0;
 	border-bottom: 1px solid #3c78b5;
	padding: 4px 4px 2px 4px;
}

.menuitems {
	padding: 4px 4px 20px 4px;
}

.rightpanel {
    border-left: 1px solid #ccc;
    border-bottom: 1px solid #ccc;
}

#helpheading {
    text-align: left;
    font-weight: bold;
    background-color: #D0D9BD;
 	border-bottom: 1px solid #3c78b5;
	padding: 4px 4px 4px 4px;
	margin: 0px;
}
#helpcontent {
	padding: 4px 4px 4px 4px;
    background-color: #f5f7f1;
}
.helptab-unselected {
    font-weight: bold;
	padding: 5px;
    background-color: #f5f7f1;
}
.helptab-selected {
    font-weight: bold;
    background-color: #D0D9BD;
	padding: 5px;
}
.helptabs {
    margin: 0px;
    background-color: #f5f7f1;
	padding: 5px;
}
.infopanel-heading {
    font-weight: bold;
	padding: 4px 0px 2px 0px;
}

.pagebody {
}

.pageheader {
	padding: 5px 5px 5px 0px;
 	border-bottom: 1px solid #3c78b5;
}

.pagetitle {
	font-size: 22px;
	font-weight: bold;
	font-family: Arial, sans-serif;
	color: #003366;
}

.newpagetitle {
    color: #ccc !important;
}

.steptitle {
	font-size: 18px;
	font-weight: bold;
	font-family: Arial, sans-serif;
	color: #003366;
	margin-bottom: 7px;
}

.substeptitle {
    font-size: 12px;
    font-weight: bold;
    font-family: Arial, sans-serif;
    color: #003366;
    margin: 2px 4px 4px 4px;
    padding: 2px 4px 1px 4px;
}

.stepdesc {
    font-family: Verdana, arial, sans-serif;
	font-size: 11px;
	line-height: 16px;
	font-weight: normal;
    color: #666666;
    margin-top: 7px;
    margin-bottom: 7px;
}

.steplabel {
    font-weight: bold;
    margin-right: 4px;
    color: black;
    float: left;
    width: 15%;
    text-align: right;
}

.stepfield {
    background: #f0f0f0;
    padding: 5px;
}

.submitButtons{
    margin-top:5px;
    text-align:right;
}

.formtitle {
	font-size: 12px;
	font-weight: bold;
	font-family: Arial, sans-serif;
	color: #003366;
}

.sectionbottom {
    border-bottom: 1px solid #3c78b5;
}

.topRow {
    border-top: 2px solid #3c78b5;
}

.tabletitle {
	font-size: 14px;
	font-weight: bold;
	font-family: Arial, sans-serif;
    padding: 3px 0px 2px 0px;
    margin: 8px 4px 2px 0px;
	color: #003366;
	border-bottom: 2px solid #3c78b5;
}
.pagesubheading {
    color: #666666;
    font-size: 10px;
    padding: 0px 0px 5px 0px;
}

HR {
	color: 3c78b5;
	height: 1;
}

A:link, A:visited, A:active, A:hover {
	color: #003366;
}

h1 A:link, h1 A:visited, h1 A:active {
	text-decoration: none;
}

h1 A:hover {
    border-bottom: 1px dotted #003366;
}

.wiki-content > :first-child, .commentblock > :first-child {
    margin-top: 3px;
}

.logocell {
    padding: 10px;
}

input {
	font-family: verdana, geneva, arial, sans-serif;
	font-size: 11px;
	color: #000000;
}

textarea, textarea.editor {
	font-family: verdana, geneva, arial, sans-serif;
	font-size: 11px;
	color: #333333;
}

/* use logoSpaceLink instead.
.spacenametitle {
	font: 21px/31px Impact, Arial, Helvetica;
    font-weight: 100;
    color: #999999;
	margin: 0px;
}
.spacenametitle img {
  margin: 0 0 -4px 0;
}
.spacenametitle a {
    text-decoration: none;
    color: #999999;
}
.spacenametitle a:visited {
    text-decoration: none;
    color: #999999;
}*/

.spacenametitle-printable {
	font: 20px/25px Impact, Arial, Helvetica;
    font-weight: 100;
    color: #999999;
	margin: 0px;
}
.spacenametitle-printable a {
    text-decoration: none;
    color: #999999;
}
.spacenametitle-printable a:visited {
    text-decoration: none;
    color: #999999;
}

.blogDate {
	font-weight: bold;
	text-decoration: none;
	color: black;
}

.blogSurtitle {
    background: #f0f0f0;
 	border: 1px solid #ddd;
	padding: 3px;
	margin: 1px 1px 10px 1px;
}

.blogHeading {
    font-size: 20px;
    line-height: normal;
    font-weight: bold;
    padding: 0px;
    margin: 0px;
}

.blogHeading a {
   text-decoration: none;
   color: black;
}

.endsection {
	align: right;
	color: #666666;
	margin-top: 10px;
}
.endsectionleftnav {
	align: right;
	color: #666666;
	margin-top: 10px;
}

h1 {
	font-size: 24px;
	line-height: normal;
	font-weight: bold;
	background-color: #f0f0f0;
	color: #003366;
 	border-bottom: 1px solid #3c78b5;
	padding: 2px;
	margin: 36px 0px 4px 0px;
}

h2 {
	font-size: 18px;
	line-height: normal;
	font-weight: bold;
	background-color: #f0f0f0;
 	border-bottom: 1px solid #3c78b5;
	padding: 2px;
	margin: 27px 0px 4px 0px;
}

h3 {
	font-size: 14px;
	line-height: normal;
	font-weight: bold;
	background-color: #f0f0f0;
	padding: 2px;
	margin: 21px 0px 4px 0px;
}

h4 {
	font-size: 12px;
	line-height: normal;
	font-weight: bold;
	background-color: #f0f0f0;
	padding: 2px;
	margin: 18px 0px 4px 0px;
}

h4.search {
	font-size: 12px;
	line-height: normal;
	font-weight: normal;
	background-color: #f0f0f0;
	padding: 4px;
	margin: 18px 0px 4px 0px;
}

h5 {
	font-size: 10px;
	line-height: normal;
	font-weight: bold;
	background-color: #f0f0f0;
	padding: 2px;
	margin: 14px 0px 4px 0px;
}

h6 {
	font-size: 8px;
	line-height: normal;
	font-weight: bold;
	background-color: #f0f0f0;
	padding: 2px;
	margin: 14px 0px 4px 0px;
}

.smallfont {
    font-size: 10px;
}
.descfont {
    font-size: 10px;
    color: #666666;
}
.smallerfont {
    font-size: 9px;
}
.smalltext {
    color: #666666;
    font-size: 10px;
}
.smalltext a {
    color: #666666;
}
.smalltext-blue {
    color: #3c78b5;
    font-size: 10px;
}
.surtitle {
    margin-left: 1px;
    margin-bottom: 5px;
    font-size: 14px;
    color: #666666;
}

/* css hack found here:  http://www.fo3nix.pwp.blueyonder.co.uk/tutorials/css/hacks/ */
.navItemOver { font-size: 10px; font-weight: bold; color: #ffffff; background-color: #003366; cursor: hand; voice-family: '\'}\''; voice-family:inherit; cursor: pointer;}
.navItemOver a { color: #ffffff; background-color:#003366; text-decoration: none; }
.navItemOver a:visited { color: #ffffff; background-color:#003366; text-decoration: none; }
.navItemOver a:hover { color: #ffffff; background-color:#003366; text-decoration: none; }
.navItem { font-size: 10px; font-weight: bold; color: #ffffff; background-color: #3c78b5; }
.navItem a { color: #ffffff; text-decoration: none; }
.navItem a:hover { color: #ffffff; text-decoration: none; }
.navItem a:visited { color: #ffffff; text-decoration: none; }

div.padded { padding: 4px; }
div.thickPadded { padding: 10px; }
h3.macrolibrariestitle {
    margin: 0px 0px 0px 0px;
}

div.centered { text-align: center; margin: 10px; }
div.centered table {margin: 0px auto; text-align: left; }

.tableview table {
    margin: 0;
}

.tableview th {
    text-align: left;
    color: #003366;
    font-size: 12px;
    padding: 5px 0px 0px 5px;
    border-bottom: 2px solid #3c78b5;
}
.tableview td {
    text-align: left;
    border-color: #ccc;
    border-width: 0px 0px 1px 0px;
    border-style: solid;
    margin: 0;
    padding: 4px 10px 4px 5px;
}

.grid {
    margin: 2px 0px 5px 0px;
    border-collapse: collapse;
}
.grid th  {
    border: 1px solid #ccc;
    padding: 2px 4px 2px 4px;
    background: #f0f0f0;
    text-align: center;
}
.grid td  {
    border: 1px solid #ccc;
    padding: 3px 4px 3px 4px;
}
.gridHover {
	background-color: #f9f9f9;
}

td.infocell {
    background-color: #f0f0f0;
}
.label {
	font-weight: bold;
	color: #003366;
}

label {
	font-weight: bold;
	color: #003366;
}

.error {
	background-color: #fcc;
}

.errorBox {
	background-color: #fcc;
    border: 1px solid #c00;
    padding: 5px;
    margin: 5px;
}

.errorMessage {
	color: #c00;
}

.success {
	background-color: #dfd;
}

.successBox {
	background-color: #dfd;
    border: 1px solid #090;
    padding: 5px;
    margin-top:5px;
    margin-bottom:5px;
}

blockquote {
	padding-left: 10px;
	padding-right: 10px;
	margin-left: 5px;
	margin-right: 0px;
	border-left: 1px solid #3c78b5;
}

table.confluenceTable
{
    margin: 5px;
    border-collapse: collapse;
}

/* Added as a temporary fix for CONF-4223. The table elements appear to be inheriting the border: none attribute from the sectionMacro class */
table.confluenceTable td.confluenceTd
{
    border-width: 1px;
    border-style: solid;
    border-color: #ccc;
    padding: 3px 4px 3px 4px;
}

/* Added as a temporary fix for CONF-4223. The table elements appear to be inheriting the border: none attribute from the sectionMacro class */
table.confluenceTable th.confluenceTh
{
    border-width: 1px;
    border-style: solid;
    border-color: #ccc;
    padding: 3px 4px 3px 4px;
    background-color: #f0f0f0;
    text-align: center;
}

td.confluenceTd
{
    border-width: 1px;
    border-style: solid;
    border-color: #ccc;
    padding: 3px 4px 3px 4px;
}

th.confluenceTh
{
    border-width: 1px;
    border-style: solid;
    border-color: #ccc;
    padding: 3px 4px 3px 4px;
    background-color: #f0f0f0;
    text-align: center;
}

DIV.small {
	font-size: 9px;
}

H1.pagename {
	margin-top: 0px;
}

IMG.inline  {}

.loginform {
    margin: 5px;
    border: 1px solid #ccc;
}

/* The text how the "This is a preview" comment should be shown. */
.previewnote { text-align: center;
                font-size: 11px;
                    color: red; }

/* How the preview content should be shown */
.previewcontent { background: #E0E0E0; }

/* How the system messages should be shown (DisplayMessage.jsp) */
.messagecontent { background: #E0E0E0; }

/* How the "This page has been modified..." -comment should be shown. */
.conflictnote { }

.createlink {
    color: maroon;
}
a.createlink {
    color: maroon;
}
.templateparameter {
    font-size: 9px;
    color: darkblue;
}

.diffadded {
    background: #ddffdd;
    padding: 1px 1px 1px 4px;
	border-left: 4px solid darkgreen;
}
.diffdeleted {
    color: #999;
    background: #ffdddd;
    padding: 1px 1px 1px 4px;
	border-left: 4px solid darkred;
}
.diffnochange {
    padding: 1px 1px 1px 4px;
	border-left: 4px solid lightgrey;
}
.differror {
    background: brown;
}
.diff {
    font-family: lucida console, courier new, fixed-width;
	font-size: 12px;
	line-height: 14px;
}
.diffaddedchars {
    background-color:#99ff99;
    font-weight:bolder;
}
.diffremovedchars {
    background-color:#ff9999;
    text-decoration: line-through;
    font-weight:bolder;
}

.greybackground {
    background: #f0f0f0
}

.greybox {
 	border: 1px solid #ddd;
	padding: 3px;
	margin: 1px 1px 10px 1px;
}

.borderedGreyBox {
    border: 1px solid #cccccc;
    background-color: #f0f0f0;
    padding: 10px;
}

.greyboxfilled {
 	border: 1px solid #ddd;
    background: #f0f0f0;
    padding: 3px;
	margin: 1px 1px 10px 1px;
}

.navBackgroundBox {
    padding: 5px 5px 5px 5px;
    font-size: 22px;
	font-weight: bold;
	font-family: Arial, sans-serif;
	color: white;
    background: #3c78b5;
    text-decoration: none;
}

.previewBoxTop {
	background-color: #f0f0f0;
    border-width: 1px 1px 0px 1px;
    border-style: solid;
    border-color: #3c78b5;
    padding: 5px;
    margin: 5px 0px 0px 0px;
    text-align: center;
}
.previewContent {
    background-color: #fff;
 	border-color: #3c78b5;
	border-width: 0px 1px 0px 1px;
	border-style: solid;
	padding: 10px;
	margin: 0px;
}
.previewBoxBottom {
	background-color: #f0f0f0;
    border-width: 0px 1px 1px 1px;
    border-style: solid;
    border-color: #3c78b5;
    padding: 5px;
    margin: 0px 0px 5px 0px;
    text-align: center;
}

.functionbox {
    background-color: #f0f0f0;
 	border: 1px solid #3c78b5;
	padding: 3px;
	margin: 1px 1px 10px 1px;
}

.functionbox-greyborder {
    background-color: #f0f0f0;
 	border: 1px solid #ddd;
	padding: 3px;
	margin: 1px 1px 10px 1px;
}

.search-highlight {
    background-color: #ffffcc;
}

/* normal (white) background */
.rowNormal {
    background-color: #ffffff;
 }

/* alternate (pale yellow) background */
.rowAlternate {
    background-color: #f7f7f7;
}

/* used in the list attachments table */
.rowAlternateNoBottomColor {
    background-color: #f7f7f7;
}

.rowAlternateNoBottomNoColor {
}

.rowAlternateNoBottomColor td {
    border-bottom: 0px;
}

.rowAlternateNoBottomNoColor td {
    border-bottom: 0px;
}

/* row highlight (grey) background */
.rowHighlight {
    background-color: #f0f0f0;

}

TD.greenbar {FONT-SIZE: 2px; BACKGROUND: #00df00; BORDER: 1px solid #9c9c9c; PADDING: 0px; }
TD.redbar {FONT-SIZE: 2px; BACKGROUND: #df0000; BORDER: 1px solid #9c9c9c; PADDING: 0px; }
TD.darkredbar {FONT-SIZE: 2px; BACKGROUND: #af0000; BORDER: 1px solid #9c9c9c; PADDING: 0px; }

TR.testpassed {FONT-SIZE: 2px; BACKGROUND: #ddffdd; PADDING: 0px; }
TR.testfailed {FONT-SIZE: 2px; BACKGROUND: #ffdddd; PADDING: 0px; }

.toolbar  {
    margin: 0px;
    border-collapse: collapse;
}

.toolbar td  {
    border: 1px solid #ccc;
    padding: 2px 2px 2px 2px;
    color: #ccc;
}

td.noformatting {
    border-width: 0px;
    border-style: none;
    text-align: center;
	padding: 0px;
}

.commentblock {
    margin: 12px 0 12px 0;
}

/*
 * Divs displaying the license information, if necessary.
 */
.license-eval, .license-none, .license-nonprofit {
    border-top: 1px solid #bbbbbb;
    text-align: center;
    font-size: 10px;
    font-family: Verdana, Arial, Helvetica, sans-serif;
}

.license-eval, .license-none {
    background-color: #ffcccc;
}

.license-eval b, .license-none b {
    color: #990000
}

.license-nonprofit {
    background-color: #ffffff;
}

/*
 * The shadow at the bottom of the page between the main content and the
 * "powered by" section.
 */
.bottomshadow {
    height: 12px;
    background-image: url("$req.contextPath/images/border/border_bottom.gif");
    background-repeat: repeat-x;
}

/*
 * Styling of the operations box
 */
.navmenu .operations li, .navmenu .operations ul {
    list-style: none;
    margin-left: 0;
    padding-left: 0;
}

.navmenu .operations ul {
    margin-bottom: 9px;
}

.navmenu .label {
    font-weight: inherit;
}

/*
 * Styling of ops as a toolbar
 */
.toolbar div {
    display: none;
}

.toolbar .label {
    display: none;
}

.toolbar .operations {
    display: block;
}

.toolbar .operations ul {
    display: inline;
    list-style: none;
    margin-left: 10px;
    padding-left: 0;
}

.toolbar .operations li {
    list-style: none;
    display: inline;
}

/* list page navigational tabs */
#foldertab {
padding: 3px 0px 3px 8px;
margin-left: 0;
border-bottom: 1px solid #3c78b5;
font: bold 11px Verdana, sans-serif;
}

#foldertab li {
list-style: none;
margin: 0;
display: inline;
}

#foldertab li a {
padding: 3px 0.5em;
margin-left: 3px;
border: 1px solid #3c78b5;
border-bottom: none;
background: #3c78b5;
text-decoration: none;
}

#foldertab li a:link { color: #ffffff; }
#foldertab li a:visited { color: #ffffff; }

#foldertab li a:hover {
color: #ffffff;
background: #003366;
border-color: #003366;
}

#foldertab li a.current {
background: white;
border-bottom: 1px solid white;
color: black;
}

#foldertab li a.current:link { color: black; }
#foldertab li a.current:visited { color: black; }
#foldertab li a.current:hover {
background: white;
border-bottom: 1px solid white;
color: black;
}

/* alphabet list */
ul#squaretab {
margin-left: 0;
padding-left: 0;
white-space: nowrap;
font: bold 8px Verdana, sans-serif;
}

#squaretab li {
display: inline;
list-style-type: none;
}

#squaretab a {
padding: 2px 6px;
border: 1px solid #3c78b5;
}

#squaretab a:link, #squaretab a:visited {
color: #fff;
background-color: #3c78b5;
text-decoration: none;
}

#squaretab a:hover {
color: #ffffff;
background-color: #003366;
border-color: #003366;
text-decoration: none;
}

#squaretab li a#current {
background: white;
color: black;
}

.blogcalendar * {
    font-family:verdana, arial, sans-serif;
    font-size:x-small;
    font-weight:normal;
    line-height:140%;
    padding:2px;
}


table.blogcalendar {
    border: 1px solid #3c78b5;
}

.blogcalendar th.calendarhead, a.calendarhead {
    font-size:x-small;
    font-weight:bold;
    padding:2px;
    text-transform:uppercase;
    background-color: #3c78b5;
    color: #ffffff;
    letter-spacing: .3em;
    text-transform: uppercase;
}

.calendarhead:visited {color: white;}
.calendarhead:active {color: white;}
.calendarhead:hover {color: white;}

.blogcalendar th {
    font-size:x-small;
    font-weight:bold;
    padding:2px;
    background-color:#f0f0f0;
}

.blogcalendar td {
    font-size:x-small;
    font-weight:normal;
}

.searchGroup { padding: 0 0 10px 0; background: #f0f0f0; }
.searchGroupHeading { font-size: 10px; font-weight: bold; color: #ffffff; background-color: #3c78b5; padding: 2px 4px 1px 4px; }
.searchItem { padding: 1px 4px 1px 4px; }
.searchItemSelected { padding: 1px 4px 1px 4px; font-weight: bold; background: #ddd; }

/* permissions page styles */
.permissionHeading {
    border-bottom: #bbb; border-width: 0 0 1px 0; border-style: solid; font-size: 16px; text-align: left;
}
.permissionTab {
    border-width: 0 0 0 1px; border-style: solid; background: #3c78b5; color: #ffffff; font-size: 10px;
}
.permissionSuperTab {
    border-width: 0 0 0 1px; border-style: solid; background: #003366; color: #ffffff;
}
.permissionCell {
    border-left: #bbb; border-width: 0 0 0 1px; border-style: solid;
}

/* warning panel */
.warningPanel { background: #FFFFCE; border:#F0C000 1px solid; padding: 8px; margin: 10px; }
/* alert panel */
.alertPanel { background: #FFCCCC; border:#C00 1px solid; padding: 8px; margin: 10px; }
/* info panel */
.infoPanel { background: #D8E4F1; border:#3c78b5 1px solid; padding: 8px; margin: 10px; }

/* side menu highlighting (e.g. space content screen) */
.optionPadded { padding: 2px; }
.optionSelected { background-color: #ffffcc; padding: 2px; border: 1px solid #ddd; margin: -1px; }
.optionSelected a { font-weight: bold; text-decoration: none; color: black; }

/* information macros */
.noteMacro { border-style: solid; border-width: 1px; border-color: #F0C000; background-color: #FFFFCE; text-align:left; margin-top: 5px; margin-bottom: 5px}
.warningMacro { border-style: solid; border-width: 1px; border-color: #c00; background-color: #fcc; text-align:left; margin-top: 5px; margin-bottom: 5px}
.infoMacro { border-style: solid; border-width: 1px; border-color: #3c78b5; background-color: #D8E4F1; text-align:left; margin-top: 5px; margin-bottom: 5px}
.tipMacro { border-style: solid; border-width: 1px; border-color: #090; background-color: #dfd; text-align:left; margin-top: 5px; margin-bottom: 5px}
.informationMacroPadding { padding: 5px 0 0 5px; }

table.infoMacro td, table.warningMacro td, table.tipMacro td, table.noteMacro td, table.sectionMacro td {
    border: none;
}

table.sectionMacroWithBorder td.columnMacro { border-style: dashed; border-width: 1px; border-color: #cccccc;}

.pagecontent
{
    padding: 10px;
    text-align: left;
}

/* styles for links in the top bar */
.topBarDiv a:link {color: #ffffff;}
.topBarDiv a:visited {color: #ffffff;}
.topBarDiv a:active {color: #ffffff;}
.topBarDiv a:hover {color: #ffffff;}
.topBarDiv {color: #ffffff;}

.topBar {
    background-color: #003366;
}


/* styles for extended operations */
.greyLinks a:link {color: #666666; text-decoration:underline;}
.greyLinks a:visited {color: #666666; text-decoration:underline;}
.greyLinks a:active {color: #666666; text-decoration:underline;}
.greyLinks a:hover {color: #666666; text-decoration:underline;}
.greyLinks {color: #666666; display:block; padding: 10px}

.logoSpaceLink {color: #999999; text-decoration: none}
.logoSpaceLink a:link {color: #999999; text-decoration: none}
.logoSpaceLink a:visited {color: #999999; text-decoration: none}
.logoSpaceLink a:active {color: #999999; text-decoration: none}
.logoSpaceLink a:hover {color: #003366; text-decoration: none}

/* basic panel (basicpanel.vmd) style */
.basicPanelContainer {border: 1px solid #3c78b5; margin-top: 2px; margin-bottom: 8px; width: 100%}
.basicPanelTitle {padding: 5px; margin: 0px; background-color: #f0f0f0; color: black; font-weight: bold;}
.basicPanelBody {padding: 5px; margin: 0px}

.separatorLinks a:link {color: white}
.separatorLinks a:visited {color: white}
.separatorLinks a:active {color: white}

.greynavbar {background-color: #f0f0f0; border-top: 1px solid #3c78b5; margin-top: 2px}

div.headerField {
    float: left;
    width: auto;
    height: 100%;
}

.headerFloat {
    margin-left: auto;
    width: 50%;
}

.headerFloatLeft {
    float: left;
    margin-right: 20px;
    margin-bottom: 10px;
}

#headerRow {
    padding: 10px;
}

div.license-personal {
   background-color: #003366;
   color: #ffffff;
}

div.license-personal a {
   color: #ffffff;
}

.greyFormBox {
    border: 1px solid #cccccc;
    padding: 5px;
}

/* IE automatically adds a margin before and after form tags. Use this style to remove that */
.marginlessForm {
    margin: 0px;
}

.openPageHighlight {
    background-color: #ffffcc;
    padding: 2px;
    border: 1px solid #ddd;
}

.editPageInsertLinks, .editPageInsertLinks a
{
    color: #666666;
    font-weight: bold;
    font-size: 10px;
}

/* Style for label heatmap. */
.top10 a {
    font-weight: bold;
    font-size: 2em;
    color: #003366;
}
.top25 a {
    font-weight: bold;
    font-size: 1.6em;
    color: #003366;
}
.top50 a {
    font-size: 1.4em;
    color: #003366;
}
.top100 a {
    font-size: 1.2em;
    color: #003366;
}

.heatmap {
    list-style:none;
    width: 95%;
    margin: 0px auto;
}

.heatmap a {
    text-decoration:none;
}

.heatmap a:hover {
    text-decoration:underline;
}

.heatmap li {
    display: inline;
}

.minitab {
padding: 3px 0px 3px 8px;
margin-left: 0;
margin-top: 1px;
margin-bottom: 0px;
border-bottom: 1px solid #3c78b5;
font: bold 9px Verdana, sans-serif;
text-decoration: none;
float:none;
}
.selectedminitab {
padding: 3px 0.5em;
margin-left: 3px;
margin-top: 1px;
border: 1px solid #3c78b5;
background: white;
border-bottom: 1px solid white;
color: #000000;
text-decoration: none;
}
.unselectedminitab {
padding: 3px 0.5em;
margin-left: 3px;
margin-top: 1px;
border: 1px solid #3c78b5;
border-bottom: none;
background: #3c78b5;
color: #ffffff;
text-decoration: none;
}

a.unselectedminitab:hover {
color: #ffffff;
background: #003366;
border-color: #003366;
}

a.unselectedminitab:link { color: white; }
a.unselectedminitab:visited { color: white; }

a.selectedminitab:link { color: black; }
a.selectedminitab:visited { color: black; }

.linkerror { background-color: #fcc;}

a.labelOperationLink:link {text-decoration: underline}
a.labelOperationLink:active {text-decoration: underline}
a.labelOperationLink:visited {text-decoration: underline}
a.labelOperationLink:hover {text-decoration: underline}

a.newLabel:link {background-color: #ddffdd}
a.newLabel:active {background-color: #ddffdd}
a.newLabel:visited {background-color: #ddffdd}
a.newLabel:hover {background-color: #ddffdd}

ul.square {list-style-type: square}

.inline-control-link {
    background: #ffc;
    font-size: 9px;
    color: #666;
    padding: 2px;
    text-transform: uppercase;
    text-decoration: none;
}


.inline-control-link a:link {text-decoration: none}
.inline-control-link a:active {text-decoration: none}
.inline-control-link a:visited {text-decoration: none}
.inline-control-link a:hover {text-decoration: none}

.inline-control-link {
    background: #ffc;
    font-size: 9px;
    color: #666;
    padding: 2px;
    text-transform: uppercase;
    text-decoration: none;
    cursor: pointer;
}

div.auto_complete {
    width: 350px;
    background: #fff;
}
div.auto_complete ul {
    border: 1px solid #888;
    margin: 0;
    padding: 0;
    width: 100%;
    list-style-type: none;
}
div.auto_complete ul li {
    margin: 0;
    padding: 3px;
}
div.auto_complete ul li.selected {
    background-color: #ffb;
}
div.auto_complete ul strong.highlight {
    color: #800;
    margin: 0;
    padding: 0;
}

/******* Edit Page Styles *******/
.toogleFormDiv{
    border:1px solid #A7A6AA;
    background-color:white;
    padding:5px;
    margin-top: 5px;
}

.toogleInfoDiv{
    border:1px solid #A7A6AA;
    background-color:white;
    display:none;
    padding:5px;
    margin-top: 10px;
}

.inputSection{
    margin-bottom:20px;
}

#editBox{
   border:1px solid lightgray;
   background-color:#F0F0F0;
}

/******* Left Navigation Theme Styles ********/
.leftnav li a {
    text-decoration:none;
    color:white;
    margin:0px;
    display:block;
    padding:2px;
    padding-left:5px;
    background-color: #3c78b5;
    border-top:1px solid #3c78b5;
}

.leftnav li a:active {color:white;}
.leftnav li a:visited {color:white;}
.leftnav li a:hover {background-color: #003366; color:white;}

/* Added by Shaun during i18n */
.replaced
{
    background-color: #33CC66;
}

.topPadding
{
    margin-top: 20px;
}

/* new form style */
.form-block {
    padding: 6px;
}
.form-error-block {
    padding: 6px;
    background: #fcc;
    border-top: #f0f0f0 1px solid;
    border-bottom: #f0f0f0 1px solid;
    margin-bottom: 6px;
    padding: 0 12px 0 12px;
}
.form-element-large {
    font-size: 16px;
    font-weight: bold;
    font-family: Arial, sans-serif;
    color: #003366;
}

.form-element-small {
    font-size: 12px;
    font-weight: bold;
    font-family: Arial, sans-serif;
    color: #003366;
}

.form-header {
    background: lightyellow;
    border-top: #f0f0f0 1px solid;
    border-bottom: #f0f0f0 1px solid;
    margin-bottom: 6px;
    padding: 0 12px 0 12px;
}
.form-header p, .form-block p, .form-error-block p {
    line-height: normal;
    margin: 12px 0 12px 0;
}
.form-example {
    color: #888;
    font-size: 11px;
}
.form-divider {
    border-bottom: #ccc 1px solid;
    margin-bottom: 6px;
}
.form-buttons {
    margin-top: 6px;
    border-top: #ccc 1px solid;
    border-bottom: #ccc 1px solid;
    background: #f0f0f0;
    padding: 10px;
    text-align: center;
}
.form-buttons input {
    width: 100px;
}
.form-block .error {
    padding: 6px;
    margin-bottom: 6px;
}
    -->
    </style>
</head>
<body>

<div id="PageContent">
<table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%"><tr>
<td valign="top" class="pagebody">

    <div class="pageheader">
        <span class="pagetitle">
            Page Edited :
            <a href="http://cwiki.apache.org/confluence/display/SM">SM</a> :
            <a href="http://cwiki.apache.org/confluence/display/SM/Integrate+CXF+with+ServiceMix">Integrate CXF with ServiceMix</a>
        </span>
    </div>

     <p>
        <a href="http://cwiki.apache.org/confluence/display/SM/Integrate+CXF+with+ServiceMix">Integrate CXF with ServiceMix</a>
        has been edited by             <a href="http://cwiki.apache.org/confluence/display/~ffang">Freeman Fang</a>
            <span class="smallfont">(Mar 06, 2008)</span>.
     </p>
    
     <p>
                 <a href="http://cwiki.apache.org/confluence/pages/diffpagesbyversion.action?pageId=78602&originalVersion=4&revisedVersion=5">(View changes)</a>
     </p>

    <span class="label">Content:</span><br/>
    <div class="greybox wiki-content"><h1><a name="IntegrateCXFwithServiceMix-Requirements"></a>Requirements</h1>

<p>We should support to deploy cxf client(as service consumer) and cxf server (as service provider) easilly into servicemix.<br/>
We need a cxf service engine where we can deploy cxf client and server into. As a service engine (SE) provides some type of logic inside the JBI environment and only communicates with the NMR. If a Cxf SE needs to communicate outside the JBI environment (e.g. the client inside servicemix but server outside servicemix or vice verse), it must send a message to a binding component (via the NMR), so we also need a cxf binding component to bridge the incoming/outgoing message. Also we should leverage ws-&#42; feature of CXF by cxf binding component.</p>

<h1><a name="IntegrateCXFwithServiceMix-keycomponents"></a>key components</h1>


<h2><a name="IntegrateCXFwithServiceMix-cxfserviceengine"></a>cxf service engine</h2>


<h3><a name="IntegrateCXFwithServiceMix-overview"></a>overview</h3>

<p>ServiceMix Cxf Se component is a JBI Service Engine exposing (annotated) POJO as services on the JBI Bus.<br/>
It reuses <span class="nobr"><a href="http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/bindings/jbi/" title="Visit page outside Confluence" rel="nofollow">JBI binding<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span> and <span class="nobr"><a href="http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/transports/jbi" title="Visit page outside Confluence" rel="nofollow">JBI transport<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span> of <span class="nobr"><a href="http://incubator.apache.org/cxf/" title="Visit page outside Confluence" rel="nofollow">apache cxf<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span> internally to perform service invocations and xml marshaling.<br/>
<span class="nobr"><a href="http://servicemix.apache.org/servicemix-cxf-se.html" title="Visit page outside Confluence" rel="nofollow">Here<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span> for how-to-use cxf se.</p>

<h3><a name="IntegrateCXFwithServiceMix-featuresforcxfserviceengine"></a>features for cxf service engine</h3>

<ul>
	<li>jsr181 annotations</li>
	<li>jaxb2 binding</li>
	<li>wsdl auto generation</li>
	<li>java proxy support</li>
	<li>MTOM / attachments support</li>
</ul>


<h3><a name="IntegrateCXFwithServiceMix-mainclassforcxfserviceengine"></a>main class for cxf service engine</h3>


<h4><a name="IntegrateCXFwithServiceMix-CxfSeComponent"></a><span class="nobr"><a href="http://svn.apache.org/repos/asf/servicemix/smx3/trunk/deployables/serviceengines/servicemix-cxf-se/src/main/java/org/apache/servicemix/cxfse/CxfSeComponent.java" title="Visit page outside Confluence" rel="nofollow">CxfSeComponent<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span></h4>
<p>We use maven-xbean-plugin to generate component xbean schema, so we need add comment to specify the xml element name firstly</p>
<div class="code"><div class="codeContent">
<pre class="code-java">/**
 * 
 * @org.apache.xbean.XBean element=<span class="code-quote">"component"</span>
 */</pre>
</div></div>

<p>This class just extends servicemix <span class="nobr"><a href="http://svn.apache.org/repos/asf/servicemix/smx3/trunk/common/servicemix-common/src/main/java/org/apache/servicemix/common/DefaultComponent.java" title="Visit page outside Confluence" rel="nofollow">DefaultComponent<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span><br/>
Which is JBI spec compitable component. By extends servicemix DefaultComponent, we can only focus cxf specific issue for our cxf service engine since all JBI spec details is handled by servicemix DefaultComponent. Here we just init cxf bus when CxfSeComponent init.</p>
<div class="code"><div class="codeContent">
<pre class="code-java">@Override
    <span class="code-keyword">protected</span> void doInit() <span class="code-keyword">throws</span> Exception {
        bus = BusFactory.getDefaultBus();
        <span class="code-keyword">super</span>.doInit();
    }</pre>
</div></div> 


<h4><a name="IntegrateCXFwithServiceMix-CxfSeEndpoint"></a><span class="nobr"><a href="http://svn.apache.org/repos/asf/servicemix/smx3/trunk/deployables/serviceengines/servicemix-cxf-se/src/main/java/org/apache/servicemix/cxfse/CxfSeEndpoint.java" title="Visit page outside Confluence" rel="nofollow">CxfSeEndpoint<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span></h4>
<p>We use maven-xbean-plugin to generate endpoint xbean schema, so we need add comment to specify the xml element name firstly</p>
<div class="code"><div class="codeContent">
<pre class="code-java">/**
 * 
 * @org.apache.xbean.XBean element=<span class="code-quote">"endpoint"</span>
 */</pre>
</div></div>
<p>In this class we init and publish jaxws endpoint with cxf JBI transport and JBI binding, and also register this endpoint to servicemix.</p>
<div class="code"><div class="codeContent">
<pre class="code-java">/*
     * (non-Javadoc)
     * 
     * @see org.apache.servicemix.common.Endpoint#validate()
     */
    @Override
    <span class="code-keyword">public</span> void validate() <span class="code-keyword">throws</span> DeploymentException {
        <span class="code-keyword">if</span> (getPojo() == <span class="code-keyword">null</span>) {
            <span class="code-keyword">throw</span> <span class="code-keyword">new</span> DeploymentException(<span class="code-quote">"pojo must be set"</span>);
        }
        JaxWsServiceFactoryBean serviceFactory = <span class="code-keyword">new</span> JaxWsServiceFactoryBean();
        serviceFactory.setPopulateFromClass(<span class="code-keyword">true</span>);
        endpoint = <span class="code-keyword">new</span> EndpointImpl(getBus(), getPojo(),
                <span class="code-keyword">new</span> JaxWsServerFactoryBean(serviceFactory));
        endpoint.setBindingUri(org.apache.cxf.binding.jbi.JBIConstants.NS_JBI_BINDING);<span class="code-comment">//using cxf jbi binding, so the message use JBI wrapper
</span>        endpoint.setInInterceptors(getInInterceptors());
        endpoint.setInFaultInterceptors(getInFaultInterceptors());
        endpoint.setOutInterceptors(getOutInterceptors());
        endpoint.setOutFaultInterceptors(getOutFaultInterceptors());
        endpoint.getOutInterceptors().add(<span class="code-keyword">new</span> WrapperOutInterceptor());
        <span class="code-keyword">if</span> (isMtomEnabled()) {
            endpoint.getInInterceptors().add(<span class="code-keyword">new</span> AttachmentInInterceptor());
        }
        JaxWsImplementorInfo implInfo = <span class="code-keyword">new</span> JaxWsImplementorInfo(getPojo()
                .getClass());
        
        setService(implInfo.getServiceName()); <span class="code-comment">// register servicename to NMR
</span>        setInterfaceName(implInfo.getInterfaceName()); <span class="code-comment">// register interfacename(portType) to NMR 
</span>        setEndpoint(implInfo.getEndpointName().getLocalPart()); <span class="code-comment">// register Endpoint(Port) name to NMR
</span>        <span class="code-keyword">super</span>.validate();
    }</pre>
</div></div>  
<p>We publish the endpoint when endpoint start in servicemix</p>
<div class="code"><div class="codeContent">
<pre class="code-java">/*
     * (non-Javadoc)
     * 
     * @see org.apache.servicemix.common.endpoints.ProviderEndpoint#start()
     */
    @Override
    <span class="code-keyword">public</span> void start() <span class="code-keyword">throws</span> Exception {
        <span class="code-keyword">super</span>.start();
        address = <span class="code-quote">"jbi:<span class="code-comment">//"</span> + ID_GENERATOR.generateSanitizedId();//use jbi prefix <span class="code-keyword">for</span> the endpoint address to pick up cxf JBI transport
</span>        endpoint.publish(address);
        setService(endpoint.getServer().getEndpoint().getService().getName());
        setEndpoint(endpoint.getServer().getEndpoint().getEndpointInfo()
                .getName().getLocalPart());
    }</pre>
</div></div>
<p>We just get MessageExchange from Servicemix NMR and delegate it to cxf JBI transport</p>
<div class="code"><div class="codeContent">
<pre class="code-java">/*
     * (non-Javadoc)
     * 
     * @see org.apache.servicemix.common.endpoints.ProviderEndpoint#process(javax.jbi.messaging.MessageExchange)
     */
    @Override
    <span class="code-keyword">public</span> void process(MessageExchange exchange) <span class="code-keyword">throws</span> Exception {
        JBITransportFactory jbiTransportFactory = (JBITransportFactory) getBus()
                .getExtension(ConduitInitiatorManager.class)
                .getConduitInitiator(CxfSeComponent.JBI_TRANSPORT_ID);<span class="code-comment">//load JBITransportFactory from cxf bus
</span>        QName serviceName = exchange.getService();
        <span class="code-keyword">if</span> (serviceName == <span class="code-keyword">null</span>) {
            serviceName = getService();
            exchange.setService(serviceName);
        }
        QName interfaceName = exchange.getInterfaceName();
        <span class="code-keyword">if</span> (interfaceName == <span class="code-keyword">null</span>) {
            interfaceName = getInterfaceName();
            exchange.setInterfaceName(interfaceName);
        }
        JBIDestination jbiDestination = jbiTransportFactory
                .getDestination(serviceName.toString()
                        + interfaceName.toString());<span class="code-comment">// each endpoint should have its own JBIDestination, so just query it by serviceName and interfaceName
</span>        DeliveryChannel dc = getContext().getDeliveryChannel();
        jbiTransportFactory.setDeliveryChannel(dc);
        jbiDestination.setDeliveryChannel(dc);
        <span class="code-keyword">if</span> (exchange.getStatus() == ExchangeStatus.ACTIVE) {
            jbiDestination.getJBIDispatcherUtil().dispatch(exchange);<span class="code-comment">//delegate MessageExchange to cxf JBI transport, cxf in charge of message unmarshalling and service invocation 
</span>        }
        
    }</pre>
</div></div>


<h4><a name="IntegrateCXFwithServiceMix-CxfSeProxyFactoryBean"></a><span class="nobr"><a href="http://svn.apache.org/repos/asf/servicemix/smx3/trunk/deployables/serviceengines/servicemix-cxf-se/src/main/java/org/apache/servicemix/cxfse/CxfSeProxyFactoryBean.java" title="Visit page outside Confluence" rel="nofollow">CxfSeProxyFactoryBean<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span></h4>
<p>We use maven-xbean-plugin to generate proxy xbean schema, so we need add comment to specify the xml element name firstly</p>
<div class="code"><div class="codeContent">
<pre class="code-java">/**
 * 
 * @org.apache.xbean.XBean element=<span class="code-quote">"proxy"</span> description=<span class="code-quote">"A CXF proxy"</span>
 * 
 */</pre>
</div></div>
<p>We create client proxy exactly the same as we do in cxf</p>
<div class="code"><div class="codeContent">
<pre class="code-java"><span class="code-keyword">private</span> <span class="code-object">Object</span> createProxy() <span class="code-keyword">throws</span> Exception {
        JaxWsProxyFactoryBean cf = <span class="code-keyword">new</span> JaxWsProxyFactoryBean();
        cf.setServiceName(getService());
        cf.setServiceClass(type);
        cf.setAddress(<span class="code-quote">"jbi:<span class="code-comment">//"</span> + <span class="code-keyword">new</span> IdGenerator().generateSanitizedId());//use jbi prefix <span class="code-keyword">for</span> the endpoint address to pick up cxf JBI transport
</span>        cf.setBindingId(org.apache.cxf.binding.jbi.JBIConstants.NS_JBI_BINDING);<span class="code-comment">//use cxf JBI binding
</span>        Bus bus = BusFactory.getDefaultBus();
        JBITransportFactory jbiTransportFactory = (JBITransportFactory) bus
                .getExtension(ConduitInitiatorManager.class)
                .getConduitInitiator(CxfSeComponent.JBI_TRANSPORT_ID);
        <span class="code-keyword">if</span> (getInternalContext() != <span class="code-keyword">null</span>) { 
            DeliveryChannel dc = getInternalContext().getDeliveryChannel();
            <span class="code-keyword">if</span> (dc != <span class="code-keyword">null</span>) {
                jbiTransportFactory.setDeliveryChannel(dc);
            }
        }
        <span class="code-keyword">return</span> cf.create();
    }</pre>
</div></div>


<h3><a name="IntegrateCXFwithServiceMix-configureation"></a>configureation</h3>
<h4><a name="IntegrateCXFwithServiceMix-interceptorsconfiguration"></a>interceptors configuration</h4>
<p>Since cxfse is using <span class="nobr"><a href="http://incubator.apache.org/cxf/" title="Visit page outside Confluence" rel="nofollow">apache cxf<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span> internally, so customer can configure cxf se endpoint with inteceptors which follow cxf inteceptor api.<br/>
example per as below</p>
<div class="code"><div class="codeContent">
<pre class="code-xml"><span class="code-tag">&lt;cxfse:endpoint&gt;</span>
        <span class="code-tag">&lt;cxfse:pojo&gt;</span>
          <span class="code-tag">&lt;bean class=<span class="code-quote">"org.apache.cxf.calculator.CalculatorImpl"</span>&gt;</span>
          <span class="code-tag">&lt;/bean&gt;</span>

        <span class="code-tag">&lt;/cxfse:pojo&gt;</span>
        <span class="code-tag">&lt;cxfse:inInterceptors&gt;</span>
          <span class="code-tag">&lt;bean class=<span class="code-quote">"org.apache.cxf.interceptor.LoggingInInterceptor"</span>/&gt;</span>
        <span class="code-tag">&lt;/cxfse:inInterceptors&gt;</span>
        <span class="code-tag">&lt;cxfse:outInterceptors&gt;</span>
          <span class="code-tag">&lt;bean class=<span class="code-quote">"org.apache.cxf.interceptor.LoggingOutInterceptor"</span>/&gt;</span>
        <span class="code-tag">&lt;/cxfse:outInterceptors&gt;</span>
        <span class="code-tag">&lt;cxfse:inFaultInterceptors&gt;</span>
          <span class="code-tag">&lt;bean class=<span class="code-quote">"org.apache.cxf.interceptor.LoggingInInterceptor"</span>/&gt;</span>
        <span class="code-tag">&lt;/cxfse:inFaultInterceptors&gt;</span>
        <span class="code-tag">&lt;cxfse:outFaultInterceptors&gt;</span>
          <span class="code-tag">&lt;bean class=<span class="code-quote">"org.apache.cxf.interceptor.LoggingOutInterceptor"</span>/&gt;</span>
        <span class="code-tag">&lt;/cxfse:outFaultInterceptors&gt;</span>
      <span class="code-tag">&lt;/cxfse:endpoint&gt;</span></pre>
</div></div>
<h4><a name="IntegrateCXFwithServiceMix-proxyconfiguration"></a>proxy configuration</h4>
<p>Customer can use proxy from one of the client bean, or from inside another component, and call the JBI endpoint as a plain Java object.</p>
<div class="code"><div class="codeContent">
<pre class="code-xml"><span class="code-tag">&lt;bean class=<span class="code-quote">"org.apache.servicemix.cxfse.GreeterImplForClientProxy"</span>&gt;</span>
       <span class="code-tag">&lt;property name=<span class="code-quote">"calculator"</span>&gt;</span>
          <span class="code-tag">&lt;cxfse:proxy service=<span class="code-quote">"calculator:CalculatorService"</span> type=<span class="code-quote">"org.apache.cxf.calculator.CalculatorPortType"</span> /&gt;</span>
       <span class="code-tag">&lt;/property&gt;</span>
     <span class="code-tag">&lt;/bean&gt;</span></pre>
</div></div>

<h2><a name="IntegrateCXFwithServiceMix-cxfbindingcomponent"></a>cxf binding component</h2>


<h3><a name="IntegrateCXFwithServiceMix-overview"></a>overview</h3>

<p>ServiceMix ships with a JBI compliant HTTP/SOAP or JMS/SOAP binding component named servicemix-cxf-bc which use <span class="nobr"><a href="http://incubator.apache.org/cxf" title="Visit page outside Confluence" rel="nofollow">apache cxf<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span> internally.<br/>
<span class="nobr"><a href="http://servicemix.apache.org/servicemix-cxf-bc.html" title="Visit page outside Confluence" rel="nofollow">Here<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span> for how-to-use cxf bc.</p>

<h3><a name="IntegrateCXFwithServiceMix-featuresforcxfbindingcomponent"></a>features for cxf binding component</h3>

<ul>
	<li>JBI compliant Binding Component</li>
	<li>SOAP 1.1 and 1.2 support</li>
	<li>MIME attachments</li>
	<li>Support for InOut or InOnly MEPs as consumers or providers</li>
	<li>SSL support</li>
	<li>WS-Security support</li>
	<li>WS-Policy support</li>
	<li>WS-RM support</li>
	<li>WS-Addressing support</li>
</ul>


<h3><a name="IntegrateCXFwithServiceMix-mainclassforcxfbindingcomponent"></a>main class for cxf binding component</h3>
<h4><a name="IntegrateCXFwithServiceMix-CxfBcComponent"></a><span class="nobr"><a href="http://svn.apache.org/repos/asf/servicemix/smx3/trunk/deployables/bindingcomponents/servicemix-cxf-bc/src/main/java/org/apache/servicemix/cxfbc/CxfBcComponent.java" title="Visit page outside Confluence" rel="nofollow">CxfBcComponent<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span></h4>
<p>We use maven-xbean-plugin to generate component xbean schema, so we need add comment to specify the xml element name firstly</p>
<div class="code"><div class="codeContent">
<pre class="code-java">/**
 * 
 * @org.apache.xbean.XBean element=<span class="code-quote">"component"</span>
 */</pre>
</div></div>

<p>This class just extends servicemix <span class="nobr"><a href="http://svn.apache.org/repos/asf/servicemix/smx3/trunk/common/servicemix-common/src/main/java/org/apache/servicemix/common/DefaultComponent.java" title="Visit page outside Confluence" rel="nofollow">DefaultComponent<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span><br/>
Which is JBI spec compitable component. By extends servicemix DefaultComponent, we can only focus cxf specific issue for our cxf binding component since all JBI spec details is handled by servicemix DefaultComponent. Here we just init cxf bus when CxfBcComponent init.</p>
<div class="code"><div class="codeContent">
<pre class="code-java">@Override
    <span class="code-keyword">protected</span> void doInit() <span class="code-keyword">throws</span> Exception {
        <span class="code-keyword">if</span> (getBusConfig() != <span class="code-keyword">null</span>) {<span class="code-comment">//<span class="code-keyword">for</span> the cxf bc, we need pass in cxf bus configuration file sometimes, e.g. we need configure bus to support ws-*
</span>            SpringBusFactory bf = <span class="code-keyword">new</span> SpringBusFactory();
            bus = bf.createBus(getBusConfig());
        } <span class="code-keyword">else</span> {
            bus = BusFactory.newInstance().createBus();
        }
        <span class="code-keyword">super</span>.doInit();
    }</pre>
</div></div> 

<h4><a name="IntegrateCXFwithServiceMix-CxfBcConsumer"></a><span class="nobr"><a href="http://svn.apache.org/repos/asf/servicemix/smx3/trunk/deployables/bindingcomponents/servicemix-cxf-bc/src/main/java/org/apache/servicemix/cxfbc/CxfBcConsumer.java" title="Visit page outside Confluence" rel="nofollow">CxfBcConsumer<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span></h4>
<p>We use maven-xbean-plugin to generate consumer xbean schema, so we need add comment to specify the xml element name firstly</p>
<div class="code"><div class="codeContent">
<pre class="code-java">/**
 * 
 * @org.apache.xbean.XBean element=<span class="code-quote">"consumer"</span>
 */</pre>
</div></div>
<p>Consumer of binding component means expose JBI internal endpoint to outside client, for example<br/>
standalone cxf client ===&gt; cxf bc consumer===&gt; service in cxf se<br/>
CxfBcConsumer play two role in the message process</p>
<ul>
	<li>cxf server</li>
	<li>servicemix consumer<br/>
As cxf server, just init a dummy server without real service class. This cxf server init the proper transport(http or jms) from the service model which  is built from the wsdl. Since there is no service class for this server, this server will do no real service invocation, just transform message format between soap binding and jbi binding. <br/>
For a request message, need transform soap message to jbi message, two main interceptors get involved<br/>
<span class="nobr"><a href="http://svn.apache.org/repos/asf/servicemix/smx3/trunk/deployables/bindingcomponents/servicemix-cxf-bc/src/main/java/org/apache/servicemix/cxfbc/interceptors/JbiInInterceptor.java" title="Visit page outside Confluence" rel="nofollow">JbiInInterceptor<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span><br/>
JbiInInterceptor mainly create JBI NormalizedMessage and copy headers and attachments from soap message to JBI message<br/>
<span class="nobr"><a href="http://svn.apache.org/repos/asf/servicemix/smx3/trunk/deployables/bindingcomponents/servicemix-cxf-bc/src/main/java/org/apache/servicemix/cxfbc/interceptors/JbiInWsdl1Interceptor.java" title="Visit page outside Confluence" rel="nofollow">JbiInWsdl1Interceptor<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span> <br/>
JbiInWsdl1Interceptor transform soap messasge to jbi message according to the service model<br/>
For a reponse message, need transform jbi message to soap message, also two main interceptors get involved<br/>
<span class="nobr"><a href="http://svn.apache.org/repos/asf/servicemix/smx3/trunk/deployables/bindingcomponents/servicemix-cxf-bc/src/main/java/org/apache/servicemix/cxfbc/interceptors/JbiOutInterceptor.java" title="Visit page outside Confluence" rel="nofollow">JbiOutInterceptor<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span><br/>
JbiOutInterceptor mainly copy attachments and headers from jbi message to soap message<br/>
<span class="nobr"><a href="http://svn.apache.org/repos/asf/servicemix/smx3/trunk/deployables/bindingcomponents/servicemix-cxf-bc/src/main/java/org/apache/servicemix/cxfbc/interceptors/JbiOutWsdl1Interceptor.java" title="Visit page outside Confluence" rel="nofollow">JbiOutWsdl1Interceptor<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span> <br/>
JbiOutWsdl1Interceptor transform jbi mesage to soap message based on the service model<br/>
As servicemix consumer, send jbi message which transformed from the soap message to NMR and need process the response jbi message from the NMR.<br/>
CxfBcConsumer use its own JbiInvokerInterceptor to wire these two role together.<br/>
Main part of JbiInvokerInterceptor
<div class="code"><div class="codeContent">
<pre class="code-java">ublic class JbiInvokerInterceptor <span class="code-keyword">extends</span>
            AbstractPhaseInterceptor&lt;Message&gt; {

        <span class="code-keyword">public</span> JbiInvokerInterceptor() {
            <span class="code-keyword">super</span>(Phase.INVOKE);
        }

        <span class="code-keyword">public</span> void handleMessage(<span class="code-keyword">final</span> Message message) <span class="code-keyword">throws</span> Fault {

            <span class="code-keyword">final</span> Exchange cxfExchange = message.getExchange();
            <span class="code-keyword">final</span> Endpoint endpoint = cxfExchange.get(Endpoint.class);
            <span class="code-keyword">final</span> Service service = endpoint.getService();
            <span class="code-keyword">final</span> Invoker invoker = service.getInvoker();

            MessageExchange exchange = message
                    .getContent(MessageExchange.class);
            ComponentContext context = message.getExchange().get(
                    ComponentContext.class);
            CxfBcConsumer.<span class="code-keyword">this</span>.configureExchangeTarget(exchange);
            CxfBcConsumer.<span class="code-keyword">this</span>.messages.put(exchange.getExchangeId(), message);
            CxfBcConsumer.<span class="code-keyword">this</span>.isOneway = message.getExchange().get(
                    BindingOperationInfo.class).getOperationInfo().isOneWay();
            message.getExchange().setOneWay(CxfBcConsumer.<span class="code-keyword">this</span>.isOneway);

            <span class="code-keyword">try</span> {
                <span class="code-keyword">if</span> (CxfBcConsumer.<span class="code-keyword">this</span>.synchronous
                        &amp;&amp; !CxfBcConsumer.<span class="code-keyword">this</span>.isOneway) {
                    message.getInterceptorChain().pause();<span class="code-comment">//just pause the incoming intercepor chain of cxf server, the mesage transformation from soap to jbi is done now
</span>                    context.getDeliveryChannel().sendSync(exchange, 10000);<span class="code-comment">//send exchange which contain jbi message to NMR
</span>                    process(exchange);
                } <span class="code-keyword">else</span> {
                    context.getDeliveryChannel().send(exchange);

                }
            } <span class="code-keyword">catch</span> (Exception e) {
                <span class="code-keyword">throw</span> <span class="code-keyword">new</span> Fault(e);
            }
        }

    }</pre>
</div></div>
<p>Also the code for processing response jbi message looks like</p>
<div class="code"><div class="codeContent">
<pre class="code-java"><span class="code-keyword">public</span> void process(MessageExchange exchange) <span class="code-keyword">throws</span> Exception {
        Message message = messages.remove(exchange.getExchangeId());
        message.getInterceptorChain().resume();<span class="code-comment">//resume the cxf outgoing interceptor chain, will <span class="code-keyword">do</span> the message transformation from jbi to soap
</span>        <span class="code-keyword">if</span> (exchange.getStatus() == ExchangeStatus.ACTIVE) {
            exchange.setStatus(ExchangeStatus.DONE);
            message.getExchange().get(ComponentContext.class)
                    .getDeliveryChannel().send(exchange);
        }
    }</pre>
</div></div></li>
</ul>


<h4><a name="IntegrateCXFwithServiceMix-"></a></h4>
<p><span class="nobr"><a href="http://svn.apache.org/repos/asf/servicemix/smx3/trunk/deployables/bindingcomponents/servicemix-cxf-bc/src/main/java/org/apache/servicemix/cxfbc/CxfBcProvider.java" title="Visit page outside Confluence" rel="nofollow">CxfBcProvider<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span><br/>
We use maven-xbean-plugin to generate provider xbean schema, so we need add comment to specify the xml element name first</p>
<div class="code"><div class="codeContent">
<pre class="code-java">/**
 * 
 * @org.apache.xbean.XBean element=<span class="code-quote">"provider"</span>
 */</pre>
</div></div>
<p>Provider of binding component means bridge internal request to outside server, for example<br/>
cxf proxy inside servicemix ===&gt; cxf bc provider===&gt; standalone cxf server outside servicemix<br/>
Similiar as CxfBcConsumer, CxfBcProvider also play two role in the message process</p>
<ul>
	<li>servicemix provider</li>
	<li>cxf client<br/>
The message process looks like<br/>
 provider get incoming jbi message from NMR==&gt; transform it to soap message==&gt; send out to external service==&gt; in the registered <span class="nobr"><a href="http://svn.apache.org/repos/asf/servicemix/smx3/trunk/deployables/bindingcomponents/servicemix-cxf-bc/src/main/java/org/apache/servicemix/cxfbc/CxfBcProviderMessageObserver.java" title="Visit page outside Confluence" rel="nofollow">MessageObserver<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span>, get response soap message from external service==&gt; transform it to jbi message==&gt; send back to the NMR.<br/>
This process splitted into two classes, <br/>
The first half in CxfBcProvider
<div class="code"><div class="codeContent">
<pre class="code-java"><span class="code-keyword">public</span> void process(MessageExchange exchange) <span class="code-keyword">throws</span> Exception {
        NormalizedMessage nm = exchange.getMessage(<span class="code-quote">"in"</span>);<span class="code-comment">//get incoming jbi message
</span>               
        CxfBcProviderMessageObserver obs = <span class="code-keyword">new</span> CxfBcProviderMessageObserver(exchange, <span class="code-keyword">this</span>);
        conduit.setMessageObserver(obs);<span class="code-comment">// register message observer <span class="code-keyword">for</span> cxf client
</span>        Message message = ep.getBinding().createMessage();<span class="code-comment">//create outgoing cxf message based on the service model, both soap11 and soap12 is supported
</span>        message.put(MessageExchange.class, exchange);
        Exchange cxfExchange = <span class="code-keyword">new</span> ExchangeImpl();
        message.setExchange(cxfExchange);
        cxfExchange.setOutMessage(message);       
          ...
          ...        
        message.setInterceptorChain(outChain);
        InputStream is = JBIMessageHelper.convertMessageToInputStream(nm.getContent());
        
        StreamSource source = <span class="code-keyword">new</span> StreamSource(is);
        message.setContent(Source.class, source);
        
        message.setContent(InputStream.class, is);
        
        conduit.prepare(message);
        OutputStream os = message.getContent(OutputStream.class);
        XMLStreamWriter writer = message.getContent(XMLStreamWriter.class);
        

        <span class="code-object">String</span> encoding = getEncoding(message);
        
        <span class="code-keyword">try</span> {
            writer = StaxOutInterceptor.getXMLOutputFactory(message).createXMLStreamWriter(os, encoding);
        } <span class="code-keyword">catch</span> (XMLStreamException e) {
            <span class="code-comment">//
</span>        }
        message.setContent(XMLStreamWriter.class, writer);
        message.put(org.apache.cxf.message.Message.REQUESTOR_ROLE, <span class="code-keyword">true</span>);
        outChain.doIntercept(message);<span class="code-comment">//transform jbi message to soap message
</span>        XMLStreamWriter xtw = message.getContent(XMLStreamWriter.class);
        <span class="code-keyword">if</span> (xtw != <span class="code-keyword">null</span>) {
            xtw.writeEndDocument();
            xtw.close();
        }

        os.flush();
        is.close();
        os.close();<span class="code-comment">//send out message to external service
</span>
    }</pre>
</div></div>   </li>
</ul>


<p>The second half in CxfBcProviderMessageObserver</p>
<div class="code"><div class="codeContent">
<pre class="code-java"><span class="code-keyword">public</span> void onMessage(Message message) {
        <span class="code-keyword">try</span> {
             ...
             ...
            inChain.add(providerEndpoint.getInInterceptors());
            inChain.add(providerEndpoint.getInFaultInterceptors());
            soapMessage.setInterceptorChain(inChain);
            inChain.doIntercept(soapMessage);<span class="code-comment">//transform soap message to jbi message
</span>           
            <span class="code-comment">//send back jbi message to nmr
</span>            <span class="code-keyword">if</span> (boi.getOperationInfo().isOneWay()) {
                messageExchange.setStatus(ExchangeStatus.DONE);
            } <span class="code-keyword">else</span> <span class="code-keyword">if</span> (soapMessage.get(<span class="code-quote">"jbiFault"</span>) != <span class="code-keyword">null</span>
                    &amp;&amp; soapMessage.get(<span class="code-quote">"jbiFault"</span>).equals(<span class="code-keyword">true</span>)) {
                ...
                ...
            } <span class="code-keyword">else</span> {
                messageExchange.setStatus(ExchangeStatus.DONE);

            }
            <span class="code-object">boolean</span> txSync = messageExchange.getStatus() == ExchangeStatus.ACTIVE
                    &amp;&amp; messageExchange.isTransacted()
                    &amp;&amp; <span class="code-object">Boolean</span>.TRUE.equals(messageExchange
                            .getProperty(JbiConstants.SEND_SYNC));
            <span class="code-keyword">if</span> (txSync) {
                providerEndpoint.getContext().getDeliveryChannel().sendSync(
                        messageExchange);
            } <span class="code-keyword">else</span> {
                providerEndpoint.getContext().getDeliveryChannel().send(
                        messageExchange);
            }

        } <span class="code-keyword">catch</span> (Exception e) {
            e.printStackTrace();
        } 
        ...
        ...
    }</pre>
</div></div>

<h3><a name="IntegrateCXFwithServiceMix-configuration"></a>configuration</h3>
<p>Since cxfbc is using <span class="nobr"><a href="http://incubator.apache.org/cxf/" title="Visit page outside Confluence" rel="nofollow">apache cxf<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span> internally, so customer can configure cxf bc provider or consumer with inteceptors which follow cxf inteceptor api. A full <span class="nobr"><a href="http://svn.apache.org/repos/asf/servicemix/smx3/trunk/deployables/bindingcomponents/servicemix-cxf-bc/src/test/resources/org/apache/servicemix/cxfbc/ws/security/xbean.xml" title="Visit page outside Confluence" rel="nofollow">example<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span></p>

<h1><a name="IntegrateCXFwithServiceMix-typicalusecase"></a>typical use case</h1>
<p>We have test cases almost cover all features of cxf bc and se, such as</p>
<ul>
	<li>proxy</li>
	<li>ws-policy</li>
	<li>ws-security</li>
	<li>ws-rm</li>
	<li>ws-addressing</li>
	<li>MTOM</li>
	<li>multiple transport support</li>
	<li>oneway</li>
	<li>Exception<br/>
Go through these tests for <span class="nobr"><a href="http://svn.apache.org/repos/asf/servicemix/smx3/trunk/deployables/serviceengines/servicemix-cxf-se/src/test/" title="Visit page outside Confluence" rel="nofollow">servicemix-cxf-se<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span> and <span class="nobr"><a href="http://svn.apache.org/repos/asf/servicemix/smx3/trunk/deployables/bindingcomponents/servicemix-cxf-bc/src/test/" title="Visit page outside Confluence" rel="nofollow">servicemix-cxf-bc<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span>
<h1><a name="IntegrateCXFwithServiceMix-sometips"></a>some tips</h1>
<h2><a name="IntegrateCXFwithServiceMix-whatJBIbindingmessagelookslike"></a>what JBI binding message looks like</h2>
<div class="code"><div class="codeContent">
<pre class="code-xml"><span class="code-tag">&lt;jbi:message <span class="code-keyword">xmlns:jbi</span>=<span class="code-quote">"http://java.sun.com/xml/ns/jbi/wsdl-11-wrapper"</span> <span class="code-keyword">xmlns:msg</span>=<span class="code-quote">"http://apache.org/cxf/calculator"</span> name=<span class="code-quote">"add"</span> type=<span class="code-quote">"msg:add"</span> version=<span class="code-quote">"1.0"</span>&gt;</span>
    <span class="code-tag">&lt;jbi:part&gt;</span>
        <span class="code-tag">&lt;add xmlns=<span class="code-quote">"http://apache.org/cxf/calculator/types"</span>&gt;</span>
            <span class="code-tag">&lt;arg0&gt;</span>1<span class="code-tag">&lt;/arg0&gt;</span>
            <span class="code-tag">&lt;arg1&gt;</span>2<span class="code-tag">&lt;/arg1&gt;</span>
        <span class="code-tag">&lt;/add&gt;</span>
    <span class="code-tag">&lt;/jbi:part&gt;</span>
<span class="code-tag">&lt;/jbi:message&gt;</span></pre>
</div></div>
<h2><a name="IntegrateCXFwithServiceMix-whatSOAPbindingmessagelookslike"></a>what SOAP binding message looks like</h2>
<div class="code"><div class="codeContent">
<pre class="code-xml"><span class="code-tag">&lt;soap:Envelope <span class="code-keyword">xmlns:soap</span>=<span class="code-quote">"http://www.w3.org/2003/05/soap-envelope"</span>&gt;</span>
    <span class="code-tag">&lt;soap:Body&gt;</span>
        <span class="code-tag">&lt;add xmlns=<span class="code-quote">"http://apache.org/cxf/calculator/types"</span>&gt;</span>
            <span class="code-tag">&lt;arg0&gt;</span>1<span class="code-tag">&lt;/arg0&gt;</span>
            <span class="code-tag">&lt;arg1&gt;</span>2<span class="code-tag">&lt;/arg1&gt;</span>
        <span class="code-tag">&lt;/add&gt;</span>
    <span class="code-tag">&lt;/soap:Body&gt;</span>
<span class="code-tag">&lt;/soap:Envelope&gt;</span></pre>
</div></div>
<h2><a name="IntegrateCXFwithServiceMix-cancxfcomponentworkwithothercomponentinsideservicemix"></a>can cxf component work with other component inside servicemix</h2>
<p>Yes, provided those components can hanle the normalized JBI message.</p></li>
</ul>
</div>


</td></tr></table></div>
<p>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
    <tr>
        <td height="12" background="http://cwiki.apache.org/confluence/images/border/border_bottom.gif"><img src="http://cwiki.apache.org/confluence/images/border/spacer.gif" width="1" height="1" border="0"/></td>
    </tr>
</table>

<div class="smalltext">
    Powered by
    <a href="http://www.atlassian.com/software/confluence/default.jsp?clicked=footer" class="smalltext">Atlassian Confluence</a>
    (Version: 2.2.9 Build:#527 Sep 07, 2006)
    -
    <a href="http://jira.atlassian.com/secure/BrowseProject.jspa?id=10470" class="smalltext">Bug/feature request</a><br/>
    <br>
    <a href="http://cwiki.apache.org/confluence/users/viewnotifications.action">Unsubscribe or edit your notifications preferences</a>

</div>

</body>
</html>


Mime
View raw message