servicemix-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From conflue...@apache.org
Subject [CONF] Apache ServiceMix: servicemix-eip (page edited)
Date Thu, 19 Jun 2008 13:41:03 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/servicemix-eip">servicemix-eip</a>
        </span>
    </div>

     <p>
        <a href="http://cwiki.apache.org/confluence/display/SM/servicemix-eip">servicemix-eip</a>
        has been edited by             <a href="http://cwiki.apache.org/confluence/display/~tmielke">Torsten Mielke</a>
            <span class="smallfont">(Jun 19, 2008)</span>.
     </p>
    <p>
      Change summary:
      <div class="greybox wiki-content"><p>additional information for AsyncBridge</p></div>
    </p>
     <p>
                 <a href="http://cwiki.apache.org/confluence/pages/diffpagesbyversion.action?pageId=39133&originalVersion=27&revisedVersion=28">(View changes)</a>
     </p>

    <span class="label">Content:</span><br/>
    <div class="greybox wiki-content"><h1><a name="servicemix-eip-servicemixeip"></a>servicemix-eip </h1>

<p>The servicemix-eip component is a routing container where different routing patterns can be deployed as service unit.<br/>
This component is based on the great <span class="nobr"><a href="http://www.enterpriseintegrationpatterns.com/index.html" title="Visit page outside Confluence" rel="nofollow">Enterprise Integration Patterns<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span> book.</p>
<table cellpadding='5' width='85%' cellspacing='8px' class='infoMacro' border="0" align='center'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="/confluence/images/icons/emoticons/information.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td><b class="strong">Apache Camel</b><br />
<p>Note that <span class="nobr"><a href="http://activemq.apache.org/camel/" title="a powerful rule based routing and mediation engine which provides a POJO based implementation of the Enterprise Integration Patterns using an extremely powerful fluent API" rel="nofollow">Apache Camel<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span> provides a full set of <span class="nobr"><a href="http://activemq.apache.org/camel/enterprise-integration-patterns.html" title="Visit page outside Confluence" rel="nofollow">Enterprise Integration Patterns<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span> both from <span class="nobr"><a href="http://activemq.apache.org/camel/dsl.html" title="Visit page outside Confluence" rel="nofollow">Java code<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span> or <span class="nobr"><a href="http://activemq.apache.org/camel/spring.html" title="Visit page outside Confluence" rel="nofollow">Spring XML<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span> which you may want to consider as an alternative to ServiceMix EIP. </p>

<p>For more details see the <a href="/confluence/display/SM/servicemix-camel" title="servicemix-camel">servicemix&#45;camel</a> component, the <span class="nobr"><a href="http://activemq.apache.org/camel/how-does-camel-compare-to-servicemix-eip.html" title="Visit page outside Confluence" rel="nofollow">comparison of ServiceMix EIP and Camel<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://activemq.apache.org/camel/jbi.html" title="Visit page outside Confluence" rel="nofollow">how Camel works with JBI endpoints<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span>.</p></td></tr></table>

<p>Supported patterns:</p>
<ul>
	<li><a href="#servicemix-eip-ContentBasedrouter" title="Content-Based router on servicemix-eip">Content-Based Router</a></li>
	<li><a href="#servicemix-eip-MessageFilter" title="Message Filter on servicemix-eip">Message Filter</a></li>
	<li><a href="#servicemix-eip-Pipeline" title="Pipeline on servicemix-eip">Pipeline</a></li>
	<li><a href="#servicemix-eip-StaticRecipientList" title="Static Recipient List on servicemix-eip">Static Recipient List</a></li>
	<li><a href="#servicemix-eip-StaticRoutingSlip" title="Static Routing Slip on servicemix-eip">Static Routing Slip</a></li>
	<li><a href="#servicemix-eip-WireTap" title="Wire Tap on servicemix-eip">Wire Tap</a></li>
	<li><a href="#servicemix-eip-XPathSplitter" title="XPath Splitter on servicemix-eip">XPath Splitter</a></li>
	<li><a href="#servicemix-eip-SplitAggregator" title="Split Aggregator on servicemix-eip">Aggregator</a></li>
	<li><a href="#servicemix-eip-ContentEnricher" title="Content Enricher on servicemix-eip">Content Enricher</a></li>
	<li><a href="#servicemix-eip-Resequencer" title="Resequencer on servicemix-eip">Resequencer</a></li>
	<li><a href="#servicemix-eip-AsyncBridge" title="AsyncBridge on servicemix-eip">AsyncBridge</a></li>
</ul>


<p>In addition, this component can use all ServiceMix flows (including clustered and transactional flows), can be configured to be resilient to crashes and supports full fail-over to another node when clustered.</p>

<h2><a name="servicemix-eip-UsingservicemixeipasastandardJBIcomponent"></a>Using servicemix-eip as a standard JBI component</h2>


<h3><a name="servicemix-eip-Installation"></a>Installation</h3>

<p>Installing the servicemix-eip component can be done in several ways:</p>
<ul>
	<li>drop the installer zip in an hotdeploy directory monitored by ServiceMix</li>
	<li>using <a href="/confluence/display/SM/Ant+Tasks" title="Ant Tasks">ant tasks</a></li>
</ul>


<p>Note that when using ant tasks, the component is not started, you will have to start it manually using ant tasks or a console.</p>

<h3><a name="servicemix-eip-Configuration"></a>Configuration</h3>

<p>For a complete list of configuration options for the supported EIPs, take a look at the XSD and generated HTML for this component on the <a href="/confluence/display/SM/Xml+schemas" title="Xml schemas">Xml schemas</a> page.<br/>
TODO: configure a persistent / clustered store</p>

<h3><a name="servicemix-eip-ServiceUnitpackaging"></a>Service Unit packaging</h3>

<p>Content of xbean.xml file to be packaged as a SU</p>
<div class="code"><div class="codeContent">
<pre class="code-xml"><span class="code-tag">&lt;beans <span class="code-keyword">xmlns:eip</span>=<span class="code-quote">"http://servicemix.apache.org/eip/1.0"</span>&gt;</span>

  ... add eip patterns here ...

<span class="code-tag">&lt;/beans&gt;</span></pre>
</div></div>

<h2><a name="servicemix-eip-UsingservicemixeipinaServiceMixxmlconfigurationfile"></a>Using servicemix-eip in a ServiceMix xml configuration file</h2>

<div class="code"><div class="codeContent">
<pre class="code-xml">&lt;beans <span class="code-keyword">xmlns:sm</span>=<span class="code-quote">"http://servicemix.apache.org/config/1.0"</span>
       <span class="code-keyword">xmlns:eip</span>=<span class="code-quote">"http://servicemix.apache.org/eip/1.0"</span>&gt;

  <span class="code-tag">&lt;sm:container ...&gt;</span>
    <span class="code-tag">&lt;sm:activationSpecs&gt;</span>
      <span class="code-tag">&lt;sm:activationSpec&gt;</span>
        <span class="code-tag">&lt;sm:component&gt;</span>
          <span class="code-tag">&lt;eip:component&gt;</span>
            <span class="code-tag">&lt;eip:endpoints&gt;</span>

              ... add eip patterns here ...

            <span class="code-tag">&lt;/eip:endpoints&gt;</span>
          <span class="code-tag">&lt;/eip:component&gt;</span>
        <span class="code-tag">&lt;/sm:component&gt;</span>
      <span class="code-tag">&lt;/sm:activationSpec&gt;</span>
      ...
    <span class="code-tag">&lt;/sm:activationSpecs&gt;</span>
  <span class="code-tag">&lt;/sm:container&gt;</span>
  ...

<span class="code-tag">&lt;/beans&gt;</span></pre>
</div></div>

<h2><a name="servicemix-eip-Patterns"></a>Patterns</h2>


<h3><a name="servicemix-eip-ContentBasedrouter"></a>Content-Based router</h3>

<p>ContentBasedRouter can be used for all kind of content-based routing.<br/>
This pattern implements the <span class="nobr"><a href="http://www.enterpriseintegrationpatterns.com/ContentBasedRouter.html" title="Visit page outside Confluence" rel="nofollow">Content-Based Router<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span> pattern.</p>

<p><img src="http://www.enterpriseintegrationpatterns.com/img/ContentBasedRouter.gif" align="absmiddle" border="0" /></p>
<div class="code"><div class="codeContent">
<pre class="code-xml"><span class="code-tag">&lt;eip:content-based-router service=<span class="code-quote">"test:router"</span> endpoint=<span class="code-quote">"endpoint"</span>&gt;</span>
  <span class="code-tag">&lt;eip:rules&gt;</span>
    <span class="code-tag">&lt;eip:routing-rule&gt;</span>
      <span class="code-tag">&lt;eip:predicate&gt;</span>
        <span class="code-tag">&lt;eip:xpath-predicate xpath=<span class="code-quote">"count(/test:echo) = 1"</span> namespaceContext=<span class="code-quote">"#nsContext"</span> /&gt;</span>
      <span class="code-tag">&lt;/eip:predicate&gt;</span>
      <span class="code-tag">&lt;eip:target&gt;</span>
        <span class="code-tag">&lt;eip:exchange-target uri=<span class="code-quote">"endpoint:http://test/pipeline/endpoint"</span> /&gt;</span>
      <span class="code-tag">&lt;/eip:target&gt;</span>
    <span class="code-tag">&lt;/eip:routing-rule&gt;</span>
    <span class="code-tag">&lt;eip:routing-rule&gt;</span>
      <span class="code-tag"><span class="code-comment">&lt;!-- there is no predicate, so this is the default destination --&gt;</span></span>
      <span class="code-tag">&lt;eip:target&gt;</span>
        <span class="code-tag">&lt;eip:exchange-target service=<span class="code-quote">"test:recipients"</span> /&gt;</span>
      <span class="code-tag">&lt;/eip:target&gt;</span>
    <span class="code-tag">&lt;/eip:routing-rule&gt;</span>
  <span class="code-tag">&lt;/eip:rules&gt;</span>
<span class="code-tag">&lt;/eip:content-based-router&gt;</span></pre>
</div></div>

<h3><a name="servicemix-eip-MessageFilter"></a>Message Filter</h3>

<p>MessageFilter allows filtering incoming JBI exchanges. As it drops unwanted messages and in an InOut exchange a response is required, MessageFilter and InOut MEPs cannot be used together.<br/>
This pattern implements the <span class="nobr"><a href="http://www.enterpriseintegrationpatterns.com/Filter.html" title="Visit page outside Confluence" rel="nofollow">Message Filter<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span> pattern.</p>

<p><img src="http://www.enterpriseintegrationpatterns.com/img/MessageFilter.gif" align="absmiddle" border="0" /></p>
<div class="code"><div class="codeContent">
<pre class="code-xml"><span class="code-tag">&lt;eip:message-filter service=<span class="code-quote">"test:messageFilter"</span> endpoint=<span class="code-quote">"endpoint"</span>&gt;</span>
  <span class="code-tag">&lt;eip:target&gt;</span>
    <span class="code-tag">&lt;eip:exchange-target service=<span class="code-quote">"test:trace3"</span> /&gt;</span>
  <span class="code-tag">&lt;/eip:target&gt;</span>
  <span class="code-tag">&lt;eip:filter&gt;</span>
    <span class="code-tag">&lt;eip:xpath-predicate xpath=<span class="code-quote">"count(/test:world) = 1"</span> namespaceContext=<span class="code-quote">"#nsContext"</span>/&gt;</span>
  <span class="code-tag">&lt;/eip:filter&gt;</span>
<span class="code-tag">&lt;/eip:message-filter&gt;</span></pre>
</div></div>

<h3><a name="servicemix-eip-Pipeline"></a>Pipeline</h3>

<p>The Pipeline component is a bridge between an In-Only (or Robust-In-Only) MEP and an In-Out MEP.  When the Pipeline receives an In-Only MEP, it will send the input in an In-Out MEP to the tranformer destination and forward the response in an In-Only MEP to the target destination.</p>

<p>The old org.apache.servicemix.components.util.PipelineComponent will be deprecated.  This one offers the same feature but can be safely clustered and use in a transactional enviromnent.</p>
<div class="code"><div class="codeContent">
<pre class="code-xml"><span class="code-tag">&lt;eip:pipeline service=<span class="code-quote">"test:pipeline"</span> endpoint=<span class="code-quote">"endpoint"</span>&gt;</span>
  <span class="code-tag">&lt;eip:transformer&gt;</span>
    <span class="code-tag">&lt;eip:exchange-target service=<span class="code-quote">"test:routingSlip"</span> /&gt;</span>
  <span class="code-tag">&lt;/eip:transformer&gt;</span>
  <span class="code-tag">&lt;eip:target&gt;</span>
    <span class="code-tag">&lt;eip:exchange-target service=<span class="code-quote">"test:trace2"</span> /&gt;</span>
  <span class="code-tag">&lt;/eip:target&gt;</span>
<span class="code-tag">&lt;/eip:pipeline&gt;</span></pre>
</div></div>
<p>In the default configuration, faults sent by the transformer component are sent back to the consumer as faults if the exchange MEP supports them, or as errors (for InOnly exchanges).  This behavior can be changed by setting the <tt>sendFaultsToTarget</tt> attribute to <tt>true</tt>, in which case faults will be sent to the target component, or by adding a <tt>faultsTarget</tt> element where faults should be sent.</p>

<h3><a name="servicemix-eip-StaticRecipientList"></a>Static Recipient List</h3>

<p>The StaticRecipientList component will forward an input In-Only or Robust-In-Only exchange to a list of known recipients.<br/>
This component implements the <span class="nobr"><a href="http://www.enterpriseintegrationpatterns.com/RecipientList.html" title="Visit page outside Confluence" rel="nofollow">Recipient List<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span> pattern, with the limitation that the recipient list is static.</p>

<p><img src="http://www.enterpriseintegrationpatterns.com/img/RecipientList.gif" align="absmiddle" border="0" /></p>
<div class="code"><div class="codeContent">
<pre class="code-xml"><span class="code-tag">&lt;eip:static-recipient-list service=<span class="code-quote">"test:recipients"</span> endpoint=<span class="code-quote">"endpoint"</span>&gt;</span>
  <span class="code-tag">&lt;eip:recipients&gt;</span>
    <span class="code-tag">&lt;eip:exchange-target service=<span class="code-quote">"test:messageFilter"</span> /&gt;</span>
    <span class="code-tag">&lt;eip:exchange-target service=<span class="code-quote">"test:trace4"</span> /&gt;</span>
  <span class="code-tag">&lt;/eip:recipients&gt;</span>
<span class="code-tag">&lt;/eip:static-recipient-list&gt;</span></pre>
</div></div>

<h3><a name="servicemix-eip-StaticRoutingSlip"></a>Static Routing Slip</h3>

<p>A RoutingSlip component can be used to route an incoming In-Out exchange through a series of target services.<br/>
This component implements the <span class="nobr"><a href="http://www.enterpriseintegrationpatterns.com/RoutingTable.html" title="Visit page outside Confluence" rel="nofollow">Routing Slip<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span> pattern, with the limitation that the routing table is static.<br/>
This component only uses In-Out MEPs and errors or faults sent by targets are reported back to the consumer, thus interrupting the routing process.</p>

<p><img src="http://www.enterpriseintegrationpatterns.com/img/RoutingTableSimple.gif" align="absmiddle" border="0" /></p>
<div class="code"><div class="codeContent">
<pre class="code-xml"><span class="code-tag">&lt;eip:static-routing-slip service=<span class="code-quote">"test:routingSlip"</span> endpoint=<span class="code-quote">"endpoint"</span>&gt;</span>
  <span class="code-tag">&lt;eip:targets&gt;</span>
    <span class="code-tag">&lt;eip:exchange-target service=<span class="code-quote">"test:echo"</span> /&gt;</span>
    <span class="code-tag">&lt;eip:exchange-target service=<span class="code-quote">"test:echo"</span> /&gt;</span>
  <span class="code-tag">&lt;/eip:targets&gt;</span>
<span class="code-tag">&lt;/eip:static-routing-slip&gt;</span></pre>
</div></div>

<h3><a name="servicemix-eip-WireTap"></a>Wire Tap</h3>

<p>A WireTap component can be used to forward a copy of the input message to a listener in a proxy fashion.<br/>
This component implements the <span class="nobr"><a href="http://www.enterpriseintegrationpatterns.com/WireTap.html" title="Visit page outside Confluence" rel="nofollow">WireTap<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span> pattern.<br/>
It can handle all four standard MEPs, but will only send an In-Only MEP to the listener.<br/>
The originating service must be configured to send messages to the WireTap directly.<br/>
In the case of an In-Out MEP, this means that the WireTap needs to be configured to send the exchange along to the destination service.</p>

<p><img src="http://www.enterpriseintegrationpatterns.com/img/WireTap.gif" align="absmiddle" border="0" /></p>
<div class="code"><div class="codeContent">
<pre class="code-xml"><span class="code-tag">&lt;eip:wire-tap service=<span class="code-quote">"test:wireTap"</span> endpoint=<span class="code-quote">"endpoint"</span>&gt;</span>
  <span class="code-tag">&lt;eip:target&gt;</span>
    <span class="code-tag">&lt;eip:exchange-target service=<span class="code-quote">"test:xpathSplitter"</span> /&gt;</span>
  <span class="code-tag">&lt;/eip:target&gt;</span>
  <span class="code-tag">&lt;eip:inListener&gt;</span>
    <span class="code-tag">&lt;eip:exchange-target service=<span class="code-quote">"test:trace1"</span> /&gt;</span>
  <span class="code-tag">&lt;/eip:inListener&gt;</span>
<span class="code-tag">&lt;/eip:wire-tap&gt;</span></pre>
</div></div>

<p>Similar to the example above, the WireTap can also be used:</p>
<ul>
	<li>to forward the output message of an exchange using &lt;eip:outListener/&gt;</li>
	<li>to forward the fault message of an exchange using &lt;eip:faultListener/&gt;</li>
</ul>


<h3><a name="servicemix-eip-XPathSplitter"></a>XPath Splitter</h3>

<p>The XPathSplitter component implements the <span class="nobr"><a href="http://www.enterpriseintegrationpatterns.com/Sequencer.html" title="Visit page outside Confluence" rel="nofollow">Splitter<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span> pattern using an xpath expression to split the incoming xml.</p>

<p><img src="http://www.enterpriseintegrationpatterns.com/img/Sequencer.gif" align="absmiddle" border="0" /></p>
<div class="code"><div class="codeContent">
<pre class="code-xml">&lt;eip:xpath-splitter service=<span class="code-quote">"test:xpathSplitter"</span> endpoint=<span class="code-quote">"endpoint"</span> 
                    xpath=<span class="code-quote">"/*/*"</span> namespaceContext=<span class="code-quote">"#nsContext"</span>&gt;
  <span class="code-tag">&lt;eip:target&gt;</span>
    <span class="code-tag">&lt;eip:exchange-target uri=<span class="code-quote">"service:http://test/router"</span> /&gt;</span>
  <span class="code-tag">&lt;/eip:target&gt;</span>
<span class="code-tag">&lt;/eip:xpath-splitter&gt;</span></pre>
</div></div>

<h3><a name="servicemix-eip-SplitAggregator"></a>SplitAggregator</h3>

<p>The SplitAggregator is an aggregator mainly usefull to collect messages that have been created using a splitter.<br/>
It relies on several properties that should be set on the exchanges (count, index, correlationId).</p>

<p><img src="http://www.enterpriseintegrationpatterns.com/img/Aggregator.gif" align="absmiddle" border="0" /></p>
<div class="code"><div class="codeContent">
<pre class="code-xml"><span class="code-tag">&lt;eip:split-aggregator service=<span class="code-quote">"test:aggregator"</span> endpoint=<span class="code-quote">"endpoint"</span>&gt;</span>
  <span class="code-tag">&lt;eip:target&gt;</span>
    <span class="code-tag">&lt;eip:exchange-target service=<span class="code-quote">"test:trace5"</span> /&gt;</span>
  <span class="code-tag">&lt;/eip:target&gt;</span>
<span class="code-tag">&lt;/eip:split-aggregator&gt;</span></pre>
</div></div>

<h3><a name="servicemix-eip-ContentEnricher"></a>Content Enricher</h3>

<p>With a Content Enricher you can extract additional information from a source and add this information to your message. This is useful if the calling service for example extracts a 'userID' and your target system is only aware of a 'userName'. By using the Content-Enricher you could extract this information from a source system and add this additional information ('userName') to your message.</p>

<p><img src="http://www.enterpriseintegrationpatterns.com/img/DataEnricher.gif" align="absmiddle" border="0" /></p>
<div class="code"><div class="codeContent">
<pre class="code-xml"><span class="code-tag">&lt;eip:content-enricher service=<span class="code-quote">"test:contentEnricher"</span> endpoint=<span class="code-quote">"endpoint"</span>&gt;</span>
  <span class="code-tag">&lt;eip:enricherTarget&gt;</span>
    <span class="code-tag">&lt;eip:exchange-target service=<span class="code-quote">"test:additionalInformationExtracter"</span> /&gt;</span>
  <span class="code-tag">&lt;/eip:enricherTarget&gt;</span>
  <span class="code-tag">&lt;eip:target&gt;</span>
    <span class="code-tag">&lt;eip:exchange-target service=<span class="code-quote">"test:myTarget"</span> /&gt;</span>
  <span class="code-tag">&lt;/eip:target&gt;</span>
<span class="code-tag">&lt;/eip:content-enricher&gt;</span></pre>
</div></div>

<h3><a name="servicemix-eip-Resequencer"></a>Resequencer</h3>

<p>A resequencer re-orders incoming In-Only or Robust-In-Only exchanges and sends them synchronously to a targets service. Synchronous sending ensures that messages arrive in correct order at the target service. This component implements the <span class="nobr"><a href="http://www.enterpriseintegrationpatterns.com/Resequencer.html" title="Visit page outside Confluence" rel="nofollow">Resequencer<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span> pattern.</p>

<p><img src="http://www.enterpriseintegrationpatterns.com/img/Resequencer.gif" align="absmiddle" border="0" /></p>

<p>It works on (continuous) streams of message exchanges using a timeout policy. Since the resequencer doesn't make batch reads there's no need to know the number of messages to be re-ordered in advance (although a <tt>capacity</tt> parameter prevents the resequencer from running out of memory). If the maximum out-of-sequence time difference between messages in a message stream is known, the resequencer's <tt>timeout</tt> parameter should be set to this value (milliseconds). In this case it is guaranteed that all elements of a stream are delivered in correct order to the target service. The lower the <tt>timeout</tt> value is compared to the out-of-sequence time difference the higher is the probability for out-of-sequence messages sent by this resequencer. Large <tt>timeout</tt> values should be supported by sufficiently high <tt>capacity</tt> values.</p>

<p>For comparing elements of a sequence the resequencer component can be configured with a sequence element comparator. A default comparator is provided that compares message exchanges based on <tt>Long</tt> sequence numbers. This comparator expects the sequence number to be the value of the <tt>org.apache.servicemix.eip.sequence.number</tt> property of the exchanges's <tt>in</tt>&#45;NormalizedMessage. The name of the property can be customized in the comparator configuration (see below). You may also provide a custom comparator by implementing the <span class="nobr"><a href="http://svn.apache.org/viewvc/incubator/servicemix/smx3/trunk/deployables/serviceengines/servicemix-eip/src/main/java/org/apache/servicemix/eip/support/resequence/SequenceElementComparator.java?view=markup" title="Visit page outside Confluence" rel="nofollow">SequenceElementComparator<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span> interface.</p>
<div class="code"><div class="codeContent">
<pre class="code-xml">&lt;eip:resequencer
  service=<span class="code-quote">"sample:Resequencer"</span>
  endpoint=<span class="code-quote">"ResequencerEndpoint"</span>
  comparator=<span class="code-quote">"#comparator"</span>
  capacity=<span class="code-quote">"100"</span>
  timeout=<span class="code-quote">"2000"</span>&gt;
  <span class="code-tag">&lt;eip:target&gt;</span>
    <span class="code-tag">&lt;eip:exchange-target service=<span class="code-quote">"sample:SampleTarget"</span> /&gt;</span>
  <span class="code-tag">&lt;/eip:target&gt;</span>
<span class="code-tag">&lt;/eip:resequencer&gt;</span>

<span class="code-tag"><span class="code-comment">&lt;!-- Configure default comparator with custom sequence number property --&gt;</span></span>
<span class="code-tag">&lt;eip:default-comparator id=<span class="code-quote">"comparator"</span> sequenceNumberKey=<span class="code-quote">"seqnum"</span>/&gt;</span></pre>
</div></div>
<p>A running example can be downloaded from <span class="nobr"><a href="/confluence/download/attachments/39133/resequencer-sample.zip?version=1" title="resequencer-sample.zip attached to servicemix-eip">here<sup><img class="rendericon" src="/confluence/images/icons/link_attachment_7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span>. In this example, a custom-coded message sender sends messages in "wrong" order to the resequencer. The resequencer re-orders these messages and (synchronously) sends them to a file sender-endpoint. The file sender-enpoint writes the messages (in proper order) to the <tt>work/output</tt> directory.</p>

<h3><a name="servicemix-eip-AsyncBridge"></a>AsyncBridge</h3>

<p>The AsyncBridge is the opposite of the Pipeline: it bridges an InOut exchange with two InOnly exchanges.<br/>
The AsyncBridge expects an InOut mep as input. It then uses the exchange id of the InOut mep as the correlation id and creates an InOnly message by copying the input message and sends it to the target (with the correlation id set as a property). Next it expects an InOnly to come back with the same correlation id property. When this happens, the message is copied to the out message of the original exchange and sent back. If no response is received during the configured amount of time (timeout property in milliseconds), an error will be sent back to the original consumer.</p>
<div class="code"><div class="codeContent">
<pre class="code-xml">&lt;eip:async-bridge
  service=<span class="code-quote">"sample:AsyncBridge"</span>
  endpoint=<span class="code-quote">"AsyncBridgeEndpoint"</span>
  <span class="code-tag">&lt;eip:target&gt;</span>
    <span class="code-tag">&lt;eip:exchange-target service=<span class="code-quote">"sample:SampleTarget"</span> /&gt;</span>
  <span class="code-tag">&lt;/eip:target&gt;</span>
<span class="code-tag">&lt;/eip:async-bridge&gt;</span></pre>
</div></div> 

<h2><a name="servicemix-eip-Tips"></a>Tips</h2>


<h3><a name="servicemix-eip-ExchangeTarget"></a>ExchangeTarget</h3>

<p>All patterns use the <b>&lt;exchange-target /&gt;</b> tag to specify the target of a JBI exchange.<br/>
This element has the following attributes:</p>
<table class='confluenceTable'><tbody>
<tr>
<th class='confluenceTh'> Name </th>
<th class='confluenceTh'> Type </th>
<th class='confluenceTh'> Description </th>
</tr>
<tr>
<td class='confluenceTd'> interface </td>
<td class='confluenceTd'> QName </td>
<td class='confluenceTd'> the QName of the target interface. One of service or interface attribute is required </td>
</tr>
<tr>
<td class='confluenceTd'> operation </td>
<td class='confluenceTd'> QName </td>
<td class='confluenceTd'> the QName of the target operation (optional) </td>
</tr>
<tr>
<td class='confluenceTd'> service </td>
<td class='confluenceTd'> QName </td>
<td class='confluenceTd'> the QName of the target service. One of service or interface attribute is required </td>
</tr>
<tr>
<td class='confluenceTd'> endpoint </td>
<td class='confluenceTd'> String </td>
<td class='confluenceTd'> the name of the target JBI endpoint, only used when service is set </td>
</tr>
<tr>
<td class='confluenceTd'> uri </td>
<td class='confluenceTd'> String </td>
<td class='confluenceTd'> uri used to target the exchange (see <a href="/confluence/display/SM/URIs" title="URIs">URIs</a>) </td>
</tr>
</tbody></table>
<p>If you want to target a given interface, just set the interface attribute.  Else you have to set the service attribute, and optionally the endpoint attribute if you want to specify the JBI endpoint instead of a service name.</p>

<h3><a name="servicemix-eip-NamespaceContext"></a>NamespaceContext</h3>

<p>Some patterns use XPath expression.  To use such expressions on an xml with namespaces, you need to define a NamespaceContext.</p>
<div class="code"><div class="codeContent">
<pre class="code-xml"><span class="code-tag">&lt;eip:namespace-context id=<span class="code-quote">"nsContext"</span>&gt;</span>
  <span class="code-tag">&lt;eip:namespaces&gt;</span>
    <span class="code-tag">&lt;eip:namespace prefix=<span class="code-quote">"test"</span>&gt;</span>http://test<span class="code-tag">&lt;/eip:namespace&gt;</span>
  <span class="code-tag">&lt;/eip:namespaces&gt;</span>
<span class="code-tag">&lt;/eip:namespace-context&gt;</span></pre>
</div></div>
<p>This NamespaceContext can be referenced by a <b>namespaceContext</b> attribute as shown in the XPathSplitter or MessageFilter examples.</p>

<h3><a name="servicemix-eip-Predicates"></a>Predicates</h3>

<p>Some patterns uses predicates to test a given JBI exchange.  The only predicate currently implemented is the XPathPredicate, but you can implement your own and deploy it with the service unit.</p>

<p>TODO: link to a page documenting the classpath / location elements for deploying code inside xbean SU</p>

<h3><a name="servicemix-eip-Creatingyourownpatterns"></a>Creating your own patterns</h3>

<p>Some classes have been designed to be extensible, this includes:</p>
<ul>
	<li>org.apache.servicemix.eip.support.AbstractAggregator</li>
	<li>org.apache.servicemix.eip.support.AbstractSplitter</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