camel-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From conflue...@apache.org
Subject [CONF] Apache Camel: Tutorial-AXIS-Camel (page edited)
Date Sat, 06 Sep 2008 13:05: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/CAMEL">CAMEL</a> :
            <a href="http://cwiki.apache.org/confluence/display/CAMEL/Tutorial-AXIS-Camel">Tutorial-AXIS-Camel</a>
        </span>
    </div>

     <p>
        <a href="http://cwiki.apache.org/confluence/display/CAMEL/Tutorial-AXIS-Camel">Tutorial-AXIS-Camel</a>
        has been edited by             <a href="http://cwiki.apache.org/confluence/display/~davsclaus">Claus Ibsen</a>
            <span class="smallfont">(Sep 06, 2008)</span>.
     </p>
    
     <p>
                 <a href="http://cwiki.apache.org/confluence/pages/diffpagesbyversion.action?pageId=96474&originalVersion=17&revisedVersion=18">(View changes)</a>
     </p>

    <span class="label">Content:</span><br/>
    <div class="greybox wiki-content"><h1><a name="Tutorial-AXIS-Camel-TutorialforusingAXIS1.4withApacheCamel"></a>Tutorial for using AXIS 1.4 with Apache Camel</h1>

<h2><a name="Tutorial-AXIS-Camel-Introduction"></a>Introduction</h2>
<p>Apache AXIS is/was widely used as a webservice framework. So in line with some of the other tutorials to demonstrate how Camel is not an invasive framework but is flexible and integrates well with existing solution. </p>

<p>We have an existing solution that exposes a webservice using AXIS 1.4 deployed as web applications. This is a common solution. We use contract first so we have AXIS generated source code from an existing wsdl file. Then we show how we introduce Spring and Camel to integrate with AXIS.</p>

<p>This tutorial uses the following frameworks:</p>
<ul>
	<li>Maven 2.0.9</li>
	<li>Apache Camel 1.4.0</li>
	<li>Apache AXIS 1.4</li>
	<li>Spring 2.5.5</li>
</ul>


<h2><a name="Tutorial-AXIS-Camel-SettinguptheprojecttorunAXIS"></a>Setting up the project to run AXIS</h2>
<p>This first part is about getting the project up to speed with Axis. We are not touching Camel or Spring at this time.</p>

<h3><a name="Tutorial-AXIS-Camel-Maven2"></a>Maven 2</h3>
<p>AXIS dependencies is available for maven 2 so we configure our pom.xml as:</p>
<div class="code"><div class="codeContent">
<pre class="code-xml"><span class="code-tag">&lt;dependency&gt;</span>
            <span class="code-tag">&lt;groupId&gt;</span>org.apache.axis<span class="code-tag">&lt;/groupId&gt;</span>
            <span class="code-tag">&lt;artifactId&gt;</span>axis<span class="code-tag">&lt;/artifactId&gt;</span>
            <span class="code-tag">&lt;version&gt;</span>1.4<span class="code-tag">&lt;/version&gt;</span>
        <span class="code-tag">&lt;/dependency&gt;</span>

        <span class="code-tag">&lt;dependency&gt;</span>
            <span class="code-tag">&lt;groupId&gt;</span>org.apache.axis<span class="code-tag">&lt;/groupId&gt;</span>
            <span class="code-tag">&lt;artifactId&gt;</span>axis-jaxrpc<span class="code-tag">&lt;/artifactId&gt;</span>
            <span class="code-tag">&lt;version&gt;</span>1.4<span class="code-tag">&lt;/version&gt;</span>
        <span class="code-tag">&lt;/dependency&gt;</span>

        <span class="code-tag">&lt;dependency&gt;</span>
            <span class="code-tag">&lt;groupId&gt;</span>org.apache.axis<span class="code-tag">&lt;/groupId&gt;</span>
            <span class="code-tag">&lt;artifactId&gt;</span>axis-saaj<span class="code-tag">&lt;/artifactId&gt;</span>
            <span class="code-tag">&lt;version&gt;</span>1.4<span class="code-tag">&lt;/version&gt;</span>
        <span class="code-tag">&lt;/dependency&gt;</span>

	<span class="code-tag">&lt;dependency&gt;</span>
	    <span class="code-tag">&lt;groupId&gt;</span>axis<span class="code-tag">&lt;/groupId&gt;</span>
	    <span class="code-tag">&lt;artifactId&gt;</span>axis-wsdl4j<span class="code-tag">&lt;/artifactId&gt;</span>
	    <span class="code-tag">&lt;version&gt;</span>1.5.1<span class="code-tag">&lt;/version&gt;</span>
	<span class="code-tag">&lt;/dependency&gt;</span>

	<span class="code-tag">&lt;dependency&gt;</span>
	    <span class="code-tag">&lt;groupId&gt;</span>commons-discovery<span class="code-tag">&lt;/groupId&gt;</span>
	    <span class="code-tag">&lt;artifactId&gt;</span>commons-discovery<span class="code-tag">&lt;/artifactId&gt;</span>
	    <span class="code-tag">&lt;version&gt;</span>0.4<span class="code-tag">&lt;/version&gt;</span>
	<span class="code-tag">&lt;/dependency&gt;</span> 

        <span class="code-tag">&lt;dependency&gt;</span>
            <span class="code-tag">&lt;groupId&gt;</span>log4j<span class="code-tag">&lt;/groupId&gt;</span>
            <span class="code-tag">&lt;artifactId&gt;</span>log4j<span class="code-tag">&lt;/artifactId&gt;</span>
            <span class="code-tag">&lt;version&gt;</span>1.2.14<span class="code-tag">&lt;/version&gt;</span>
        <span class="code-tag">&lt;/dependency&gt;</span></pre>
</div></div>

<p>Then we need to configure maven to use Java 1.5 and the axis maven plugin that generates the source code based on the wsdl file:</p>
<div class="code"><div class="codeContent">
<pre class="code-xml"><span class="code-tag"><span class="code-comment">&lt;!-- to compile with 1.5 --&gt;</span></span>
	<span class="code-tag">&lt;plugin&gt;</span>
		<span class="code-tag">&lt;groupId&gt;</span>org.apache.maven.plugins<span class="code-tag">&lt;/groupId&gt;</span>
		<span class="code-tag">&lt;artifactId&gt;</span>maven-compiler-plugin<span class="code-tag">&lt;/artifactId&gt;</span>
		<span class="code-tag">&lt;configuration&gt;</span>
			<span class="code-tag">&lt;source&gt;</span>1.5<span class="code-tag">&lt;/source&gt;</span>
			<span class="code-tag">&lt;target&gt;</span>1.5<span class="code-tag">&lt;/target&gt;</span>
		<span class="code-tag">&lt;/configuration&gt;</span>
	<span class="code-tag">&lt;/plugin&gt;</span>

            <span class="code-tag">&lt;plugin&gt;</span>
               <span class="code-tag">&lt;groupId&gt;</span>org.codehaus.mojo<span class="code-tag">&lt;/groupId&gt;</span>
               <span class="code-tag">&lt;artifactId&gt;</span>axistools-maven-plugin<span class="code-tag">&lt;/artifactId&gt;</span>
               <span class="code-tag">&lt;configuration&gt;</span>
	          <span class="code-tag">&lt;sourceDirectory&gt;</span>src/main/resources/<span class="code-tag">&lt;/sourceDirectory&gt;</span>
                  <span class="code-tag">&lt;packageSpace&gt;</span>com.mycompany.myschema<span class="code-tag">&lt;/packageSpace&gt;</span>
                  <span class="code-tag">&lt;testCases&gt;</span>false<span class="code-tag">&lt;/testCases&gt;</span>
                  <span class="code-tag">&lt;serverSide&gt;</span>true<span class="code-tag">&lt;/serverSide&gt;</span>
                  <span class="code-tag">&lt;subPackageByFileName&gt;</span>false<span class="code-tag">&lt;/subPackageByFileName&gt;</span>
               <span class="code-tag">&lt;/configuration&gt;</span>
               <span class="code-tag">&lt;executions&gt;</span>
                 <span class="code-tag">&lt;execution&gt;</span>
                   <span class="code-tag">&lt;goals&gt;</span>
                     <span class="code-tag">&lt;goal&gt;</span>wsdl2java<span class="code-tag">&lt;/goal&gt;</span>
                   <span class="code-tag">&lt;/goals&gt;</span>
                 <span class="code-tag">&lt;/execution&gt;</span>
               <span class="code-tag">&lt;/executions&gt;</span>
            <span class="code-tag">&lt;/plugin&gt;</span></pre>
</div></div>

<h3><a name="Tutorial-AXIS-Camel-wsdl"></a>wsdl</h3>
<p>We use the same .wsdl file as the <a href="/confluence/display/CAMEL/Tutorial-Example-ReportIncident" title="Tutorial-Example-ReportIncident">Tutorial&#45;Example&#45;ReportIncident</a> and copy it to <tt>src/main/webapp/WEB-INF/wsdl</tt></p>
<div class="code"><div class="codeContent">
<pre class="code-xml"><span class="code-tag">&lt;?xml version=<span class="code-quote">"1.0"</span> encoding=<span class="code-quote">"ISO-8859-1"</span>?&gt;</span>
&lt;wsdl:definitions <span class="code-keyword">xmlns:soap</span>=<span class="code-quote">"http://schemas.xmlsoap.org/wsdl/soap/"</span>
	<span class="code-keyword">xmlns:tns</span>=<span class="code-quote">"http://reportincident.example.camel.apache.org"</span>
	<span class="code-keyword">xmlns:xs</span>=<span class="code-quote">"http://www.w3.org/2001/XMLSchema"</span>
	<span class="code-keyword">xmlns:http</span>=<span class="code-quote">"http://schemas.xmlsoap.org/wsdl/http/"</span>
	<span class="code-keyword">xmlns:wsdl</span>=<span class="code-quote">"http://schemas.xmlsoap.org/wsdl/"</span>
	targetNamespace=<span class="code-quote">"http://reportincident.example.camel.apache.org"</span>&gt;

	<span class="code-tag"><span class="code-comment">&lt;!-- Type definitions for input- and output parameters for webservice --&gt;</span></span>
	<span class="code-tag">&lt;wsdl:types&gt;</span>
	<span class="code-tag">&lt;xs:schema targetNamespace=<span class="code-quote">"http://reportincident.example.camel.apache.org"</span>&gt;</span>
			<span class="code-tag">&lt;xs:element name=<span class="code-quote">"inputReportIncident"</span>&gt;</span>
				<span class="code-tag">&lt;xs:complexType&gt;</span>
					<span class="code-tag">&lt;xs:sequence&gt;</span>
						<span class="code-tag">&lt;xs:element type=<span class="code-quote">"xs:string"</span>  name=<span class="code-quote">"incidentId"</span>/&gt;</span>
						<span class="code-tag">&lt;xs:element type=<span class="code-quote">"xs:string"</span>  name=<span class="code-quote">"incidentDate"</span>/&gt;</span>
						<span class="code-tag">&lt;xs:element type=<span class="code-quote">"xs:string"</span>  name=<span class="code-quote">"givenName"</span>/&gt;</span>
						<span class="code-tag">&lt;xs:element type=<span class="code-quote">"xs:string"</span>  name=<span class="code-quote">"familyName"</span>/&gt;</span>
						<span class="code-tag">&lt;xs:element type=<span class="code-quote">"xs:string"</span>  name=<span class="code-quote">"summary"</span>/&gt;</span>
						<span class="code-tag">&lt;xs:element type=<span class="code-quote">"xs:string"</span>  name=<span class="code-quote">"details"</span>/&gt;</span>
						<span class="code-tag">&lt;xs:element type=<span class="code-quote">"xs:string"</span>  name=<span class="code-quote">"email"</span>/&gt;</span>
						<span class="code-tag">&lt;xs:element type=<span class="code-quote">"xs:string"</span>  name=<span class="code-quote">"phone"</span>/&gt;</span>
					<span class="code-tag">&lt;/xs:sequence&gt;</span>
				<span class="code-tag">&lt;/xs:complexType&gt;</span>
			<span class="code-tag">&lt;/xs:element&gt;</span>
			<span class="code-tag">&lt;xs:element name=<span class="code-quote">"outputReportIncident"</span>&gt;</span>
				<span class="code-tag">&lt;xs:complexType&gt;</span>
					<span class="code-tag">&lt;xs:sequence&gt;</span>
						<span class="code-tag">&lt;xs:element type=<span class="code-quote">"xs:string"</span> name=<span class="code-quote">"code"</span>/&gt;</span>
					<span class="code-tag">&lt;/xs:sequence&gt;</span>
				<span class="code-tag">&lt;/xs:complexType&gt;</span>
			<span class="code-tag">&lt;/xs:element&gt;</span>
		<span class="code-tag">&lt;/xs:schema&gt;</span>
	<span class="code-tag">&lt;/wsdl:types&gt;</span>

	<span class="code-tag"><span class="code-comment">&lt;!-- Message definitions for input and output --&gt;</span></span>
	<span class="code-tag">&lt;wsdl:message name=<span class="code-quote">"inputReportIncident"</span>&gt;</span>
		<span class="code-tag">&lt;wsdl:part name=<span class="code-quote">"parameters"</span> element=<span class="code-quote">"tns:inputReportIncident"</span>/&gt;</span>
	<span class="code-tag">&lt;/wsdl:message&gt;</span>
	<span class="code-tag">&lt;wsdl:message name=<span class="code-quote">"outputReportIncident"</span>&gt;</span>
		<span class="code-tag">&lt;wsdl:part name=<span class="code-quote">"parameters"</span> element=<span class="code-quote">"tns:outputReportIncident"</span>/&gt;</span>
	<span class="code-tag">&lt;/wsdl:message&gt;</span>

	<span class="code-tag"><span class="code-comment">&lt;!-- Port (interface) definitions --&gt;</span></span>
	<span class="code-tag">&lt;wsdl:portType name=<span class="code-quote">"ReportIncidentEndpoint"</span>&gt;</span>
		<span class="code-tag">&lt;wsdl:operation name=<span class="code-quote">"ReportIncident"</span>&gt;</span>
			<span class="code-tag">&lt;wsdl:input message=<span class="code-quote">"tns:inputReportIncident"</span>/&gt;</span>
			<span class="code-tag">&lt;wsdl:output message=<span class="code-quote">"tns:outputReportIncident"</span>/&gt;</span>
		<span class="code-tag">&lt;/wsdl:operation&gt;</span>
	<span class="code-tag">&lt;/wsdl:portType&gt;</span>

	<span class="code-tag"><span class="code-comment">&lt;!-- Port bindings to transports and encoding - HTTP, document literal encoding is used --&gt;</span></span>
	<span class="code-tag">&lt;wsdl:binding name=<span class="code-quote">"ReportIncidentBinding"</span> type=<span class="code-quote">"tns:ReportIncidentEndpoint"</span>&gt;</span>
		<span class="code-tag">&lt;soap:binding transport=<span class="code-quote">"http://schemas.xmlsoap.org/soap/http"</span>/&gt;</span>
		<span class="code-tag">&lt;wsdl:operation name=<span class="code-quote">"ReportIncident"</span>&gt;</span>
			&lt;soap:operation
				soapAction=<span class="code-quote">"http://reportincident.example.camel.apache.org/ReportIncident"</span>
				style=<span class="code-quote">"document"</span>/&gt;
			<span class="code-tag">&lt;wsdl:input&gt;</span>
				<span class="code-tag">&lt;soap:body parts=<span class="code-quote">"parameters"</span> use=<span class="code-quote">"literal"</span>/&gt;</span>
			<span class="code-tag">&lt;/wsdl:input&gt;</span>
			<span class="code-tag">&lt;wsdl:output&gt;</span>
				<span class="code-tag">&lt;soap:body parts=<span class="code-quote">"parameters"</span> use=<span class="code-quote">"literal"</span>/&gt;</span>
			<span class="code-tag">&lt;/wsdl:output&gt;</span>
		<span class="code-tag">&lt;/wsdl:operation&gt;</span>
	<span class="code-tag">&lt;/wsdl:binding&gt;</span>

	<span class="code-tag"><span class="code-comment">&lt;!-- Service definition --&gt;</span></span>
	<span class="code-tag">&lt;wsdl:service name=<span class="code-quote">"ReportIncidentService"</span>&gt;</span>
		<span class="code-tag">&lt;wsdl:port name=<span class="code-quote">"ReportIncidentPort"</span> binding=<span class="code-quote">"tns:ReportIncidentBinding"</span>&gt;</span>
			<span class="code-tag">&lt;soap:address location=<span class="code-quote">"http://reportincident.example.camel.apache.org"</span>/&gt;</span>
		<span class="code-tag">&lt;/wsdl:port&gt;</span>
	<span class="code-tag">&lt;/wsdl:service&gt;</span>

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

<h3><a name="Tutorial-AXIS-Camel-ConfiguringAXIS"></a>Configuring AXIS</h3>
<p>Okay we are now setup for the contract first development and can generate the source file. For now we are still only using standard AXIS and not Spring nor Camel. We still need to setup AXIS as a web application so we configure the web.xml in <tt>src/main/webapp/WEB-INF/web.xml</tt> as:</p>
<div class="code"><div class="codeContent">
<pre class="code-xml"><span class="code-tag">&lt;servlet&gt;</span>
		<span class="code-tag">&lt;servlet-name&gt;</span>axis<span class="code-tag">&lt;/servlet-name&gt;</span>
		<span class="code-tag">&lt;servlet-class&gt;</span>org.apache.axis.transport.http.AxisServlet<span class="code-tag">&lt;/servlet-class&gt;</span>
	<span class="code-tag">&lt;/servlet&gt;</span>

	<span class="code-tag">&lt;servlet-mapping&gt;</span>
		<span class="code-tag">&lt;servlet-name&gt;</span>axis<span class="code-tag">&lt;/servlet-name&gt;</span>
		<span class="code-tag">&lt;url-pattern&gt;</span>/services/*<span class="code-tag">&lt;/url-pattern&gt;</span>
	<span class="code-tag">&lt;/servlet-mapping&gt;</span></pre>
</div></div>
<p>The web.xml just registeres AXIS servlet that is handling the incoming web requests to its servlet mapping. We still need to configure AXIS itself and this is done using its special configuration file <tt>server-config.wsdd</tt>. We nearly get this file for free if we let Axis generate the source code so we run the maven goal:</p>
<div class="code"><div class="codeContent">
<pre class="code-java">mvn axistools:wsdl2java</pre>
</div></div>
<p>The tool will generate the source code based on the wsdl and save the files to the following folder:</p>
<div class="code"><div class="codeContent">
<pre class="code-java">.\target\generated-sources\axistools\wsdl2java\org\apache\camel\example\reportincident
deploy.wsdd
InputReportIncident.java
OutputReportIncident.java
ReportIncidentBindingImpl.java
ReportIncidentBindingStub.java
ReportIncidentService_PortType.java
ReportIncidentService_Service.java
ReportIncidentService_ServiceLocator.java
undeploy.wsdd</pre>
</div></div>
<p>This is standard AXIS and so far no Camel or Spring has been touched. To implement our webservice we will add our code, so we create a new class <tt>AxisReportIncidentService</tt> that implements the port type interface where we can implement our code logic what happens when the webservice is invoked.</p>
<div class="code"><div class="codeContent">
<pre class="code-java"><span class="code-keyword">package</span> org.apache.camel.example.axis;

<span class="code-keyword">import</span> org.apache.camel.example.reportincident.InputReportIncident;
<span class="code-keyword">import</span> org.apache.camel.example.reportincident.OutputReportIncident;
<span class="code-keyword">import</span> org.apache.camel.example.reportincident.ReportIncidentService_PortType;

<span class="code-keyword">import</span> java.rmi.RemoteException;

/**
 * Axis webservice
 */
<span class="code-keyword">public</span> class AxisReportIncidentService <span class="code-keyword">implements</span> ReportIncidentService_PortType {

    <span class="code-keyword">public</span> OutputReportIncident reportIncident(InputReportIncident parameters) <span class="code-keyword">throws</span> RemoteException {
        <span class="code-object">System</span>.out.println(<span class="code-quote">"Hello AxisReportIncidentService is called from "</span> + parameters.getGivenName());

        OutputReportIncident out = <span class="code-keyword">new</span> OutputReportIncident();
        out.setCode(<span class="code-quote">"OK"</span>);
        <span class="code-keyword">return</span> out;
    }

}</pre>
</div></div>
<p>Now we need to configure AXIS itself and this is done using its <tt>server-config.wsdd</tt> file. We nearly get this for for free from the auto generated code, we copy the stuff from <tt>deploy.wsdd</tt> and made a few modifications:</p>
<div class="code"><div class="codeContent">
<pre class="code-xml"><span class="code-tag">&lt;?xml version=<span class="code-quote">"1.0"</span> encoding=<span class="code-quote">"UTF-8"</span>?&gt;</span>
<span class="code-tag">&lt;deployment xmlns=<span class="code-quote">"http://xml.apache.org/axis/wsdd/"</span> <span class="code-keyword">xmlns:java</span>=<span class="code-quote">"http://xml.apache.org/axis/wsdd/providers/java"</span>&gt;</span>
  <span class="code-tag"><span class="code-comment">&lt;!-- global configuration --&gt;</span></span>
	<span class="code-tag">&lt;globalConfiguration&gt;</span>
		<span class="code-tag">&lt;parameter name=<span class="code-quote">"sendXsiTypes"</span> value=<span class="code-quote">"true"</span>/&gt;</span>
		<span class="code-tag">&lt;parameter name=<span class="code-quote">"sendMultiRefs"</span> value=<span class="code-quote">"true"</span>/&gt;</span>
		<span class="code-tag">&lt;parameter name=<span class="code-quote">"sendXMLDeclaration"</span> value=<span class="code-quote">"true"</span>/&gt;</span>
		<span class="code-tag">&lt;parameter name=<span class="code-quote">"axis.sendMinimizedElements"</span> value=<span class="code-quote">"true"</span>/&gt;</span>
	<span class="code-tag">&lt;/globalConfiguration&gt;</span>
	<span class="code-tag">&lt;handler name=<span class="code-quote">"URLMapper"</span> type=<span class="code-quote">"java:org.apache.axis.handlers.http.URLMapper"</span>/&gt;</span>

  <span class="code-tag"><span class="code-comment">&lt;!-- this service is from deploy.wsdd --&gt;</span></span>
  <span class="code-tag">&lt;service name=<span class="code-quote">"ReportIncidentPort"</span> provider=<span class="code-quote">"java:RPC"</span> style=<span class="code-quote">"document"</span> use=<span class="code-quote">"literal"</span>&gt;</span>
      <span class="code-tag">&lt;parameter name=<span class="code-quote">"wsdlTargetNamespace"</span> value=<span class="code-quote">"http://reportincident.example.camel.apache.org"</span>/&gt;</span>
      <span class="code-tag">&lt;parameter name=<span class="code-quote">"wsdlServiceElement"</span> value=<span class="code-quote">"ReportIncidentService"</span>/&gt;</span>
      <span class="code-tag">&lt;parameter name=<span class="code-quote">"schemaUnqualified"</span> value=<span class="code-quote">"http://reportincident.example.camel.apache.org"</span>/&gt;</span>
      <span class="code-tag">&lt;parameter name=<span class="code-quote">"wsdlServicePort"</span> value=<span class="code-quote">"ReportIncidentPort"</span>/&gt;</span>
      <span class="code-tag">&lt;parameter name=<span class="code-quote">"className"</span> value=<span class="code-quote">"org.apache.camel.example.reportincident.ReportIncidentBindingImpl"</span>/&gt;</span>
      <span class="code-tag">&lt;parameter name=<span class="code-quote">"wsdlPortType"</span> value=<span class="code-quote">"ReportIncidentService"</span>/&gt;</span>
      <span class="code-tag">&lt;parameter name=<span class="code-quote">"typeMappingVersion"</span> value=<span class="code-quote">"1.2"</span>/&gt;</span>
      &lt;operation name=<span class="code-quote">"reportIncident"</span> qname=<span class="code-quote">"ReportIncident"</span> returnQName=<span class="code-quote">"retNS:outputReportIncident"</span> <span class="code-keyword">xmlns:retNS</span>=<span class="code-quote">"http://reportincident.example.camel.apache.org"</span>
                 returnType=<span class="code-quote">"rtns:&gt;outputReportIncident"</span> <span class="code-keyword">xmlns:rtns</span>=<span class="code-quote">"http://reportincident.example.camel.apache.org"</span>
                 soapAction=<span class="code-quote">"http://reportincident.example.camel.apache.org/ReportIncident"</span> &gt;
        &lt;parameter qname=<span class="code-quote">"pns:inputReportIncident"</span> <span class="code-keyword">xmlns:pns</span>=<span class="code-quote">"http://reportincident.example.camel.apache.org"</span>
                 type=<span class="code-quote">"tns:&gt;inputReportIncident"</span> <span class="code-keyword">xmlns:tns</span>=<span class="code-quote">"http://reportincident.example.camel.apache.org"</span>/&gt;
      <span class="code-tag">&lt;/operation&gt;</span>
      <span class="code-tag">&lt;parameter name=<span class="code-quote">"allowedMethods"</span> value=<span class="code-quote">"reportIncident"</span>/&gt;</span>

      &lt;typeMapping
        <span class="code-keyword">xmlns:ns</span>=<span class="code-quote">"http://reportincident.example.camel.apache.org"</span>
        qname=<span class="code-quote">"ns:&gt;outputReportIncident"</span>
        type=<span class="code-quote">"java:org.apache.camel.example.reportincident.OutputReportIncident"</span>
        serializer=<span class="code-quote">"org.apache.axis.encoding.ser.BeanSerializerFactory"</span>
        deserializer=<span class="code-quote">"org.apache.axis.encoding.ser.BeanDeserializerFactory"</span>
        encodingStyle=""
      /&gt;
      &lt;typeMapping
        <span class="code-keyword">xmlns:ns</span>=<span class="code-quote">"http://reportincident.example.camel.apache.org"</span>
        qname=<span class="code-quote">"ns:&gt;inputReportIncident"</span>
        type=<span class="code-quote">"java:org.apache.camel.example.reportincident.InputReportIncident"</span>
        serializer=<span class="code-quote">"org.apache.axis.encoding.ser.BeanSerializerFactory"</span>
        deserializer=<span class="code-quote">"org.apache.axis.encoding.ser.BeanDeserializerFactory"</span>
        encodingStyle=""
      /&gt;
  <span class="code-tag">&lt;/service&gt;</span>

  <span class="code-tag"><span class="code-comment">&lt;!-- part of Axis configuration --&gt;</span></span>
	<span class="code-tag">&lt;transport name=<span class="code-quote">"http"</span>&gt;</span>
		<span class="code-tag">&lt;requestFlow&gt;</span>
			<span class="code-tag">&lt;handler type=<span class="code-quote">"URLMapper"</span>/&gt;</span>
			<span class="code-tag">&lt;handler type=<span class="code-quote">"java:org.apache.axis.handlers.http.HTTPAuthHandler"</span>/&gt;</span>
		<span class="code-tag">&lt;/requestFlow&gt;</span>
	<span class="code-tag">&lt;/transport&gt;</span>
<span class="code-tag">&lt;/deployment&gt;</span></pre>
</div></div>
<p>The <b>globalConfiguration</b> and <b>transport</b> is not in the deploy.wsdd file so you gotta write that yourself. The <b>service</b> is a 100% copy from deploy.wsdd. Axis has more configuration to it than shown here, but then you should check the AXIS documentation.</p>

<p>What we need to do now is important, as we need to modify the above configuration to use our webservice class than the default one, so we the classname parameter to:</p>
<div class="code"><div class="codeContent">
<pre class="code-xml"><span class="code-tag">&lt;parameter name=<span class="code-quote">"className"</span> value=<span class="code-quote">"org.apache.camel.example.axis.AxisReportIncidentService"</span>/&gt;</span></pre>
</div></div>

<h3><a name="Tutorial-AXIS-Camel-RunningtheExample"></a>Running the Example</h3>
<p>Now we are ready to run our example for the first time, so we use Jetty as the quick web container using its maven command:</p>
<div class="code"><div class="codeContent">
<pre class="code-java">mvn jetty:run</pre>
</div></div>
<p>Then we can hit the webbrowser and enter this URL: <tt><span class="nobr"><a href="http://localhost:8080/camel-example-axis/services" title="Visit page outside Confluence" rel="nofollow">http://localhost:8080/camel-example-axis/services<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span></tt> and you should see the famous AXIS page with the text <b>And now... Some Services</b>. </p>

<p>Clicking on the .wsdl link shows the wsdl file, but what. It's an autogenerated one and not our original .wsdl file. So we need to fix this ASAP and this is done by configuring AXIS in the server-config.wsdd file:</p>
<div class="code"><div class="codeContent">
<pre class="code-xml"><span class="code-tag">&lt;service name=<span class="code-quote">"ReportIncidentPort"</span> provider=<span class="code-quote">"java:RPC"</span> style=<span class="code-quote">"document"</span> use=<span class="code-quote">"literal"</span>&gt;</span>
    <span class="code-tag">&lt;wsdlFile&gt;</span>/WEB-INF/wsdl/report_incident.wsdl<span class="code-tag">&lt;/wsdlFile&gt;</span>
    ...</pre>
</div></div>
<p>We do this by adding the wsdlFile tag in the service element where we can point to the real .wsdl file.</p>

<h2><a name="Tutorial-AXIS-Camel-IntegratingSpring"></a>Integrating Spring</h2>
<p>First we need to add its dependencies to the <b>pom.xml</b>. </p>
<div class="code"><div class="codeContent">
<pre class="code-xml"><span class="code-tag">&lt;dependency&gt;</span>
            <span class="code-tag">&lt;groupId&gt;</span>org.springframework<span class="code-tag">&lt;/groupId&gt;</span>
            <span class="code-tag">&lt;artifactId&gt;</span>spring-web<span class="code-tag">&lt;/artifactId&gt;</span>
            <span class="code-tag">&lt;version&gt;</span>2.5.5<span class="code-tag">&lt;/version&gt;</span>
        <span class="code-tag">&lt;/dependency&gt;</span></pre>
</div></div>

<p>Spring is integrated just as it would like to, we add its listener to the web.xml and a context parameter to be able to configure precisely what spring xml files to use:</p>
<div class="code"><div class="codeContent">
<pre class="code-xml"><span class="code-tag">&lt;context-param&gt;</span>
        <span class="code-tag">&lt;param-name&gt;</span>contextConfigLocation<span class="code-tag">&lt;/param-name&gt;</span>
        <span class="code-tag">&lt;param-value&gt;</span>
            classpath:axis-example-context.xml
        <span class="code-tag">&lt;/param-value&gt;</span>
    <span class="code-tag">&lt;/context-param&gt;</span>

    <span class="code-tag">&lt;listener&gt;</span>
        <span class="code-tag">&lt;listener-class&gt;</span>org.springframework.web.context.ContextLoaderListener<span class="code-tag">&lt;/listener-class&gt;</span>
    <span class="code-tag">&lt;/listener&gt;</span></pre>
</div></div>
<p>Next is to add a plain spring XML file named <b>axis-example-context.xml</b> in the src/main/resources folder.</p>
<div class="code"><div class="codeContent">
<pre class="code-xml"><span class="code-tag">&lt;?xml version=<span class="code-quote">"1.0"</span> encoding=<span class="code-quote">"UTF-8"</span>?&gt;</span>
&lt;beans xmlns=<span class="code-quote">"http://www.springframework.org/schema/beans"</span>
       <span class="code-keyword">xmlns:xsi</span>=<span class="code-quote">"http://www.w3.org/2001/XMLSchema-instance"</span>
       xsi:schemaLocation="
         http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"&gt;

<span class="code-tag">&lt;/beans&gt;</span></pre>
</div></div>
<p>The spring XML file is currently empty. We hit jetty again with <tt>mvn jetty:run</tt> just to make sure Spring was setup correctly.</p>

<h3><a name="Tutorial-AXIS-Camel-UsingSpring"></a>Using Spring</h3>
<p>We would like to be able to get hold of the Spring ApplicationContext from our webservice so we can get access to the glory spring, but how do we do this? And our webservice class AxisReportIncidentService is created and managed by AXIS we want to let Spring do this. So we have two problems.</p>

<p>We solve these problems by creating a delegate class that AXIS creates, and this delegate class gets hold on Spring and then gets our real webservice as a spring bean and invoke the service. </p>

<p>First we create a new class that is 100% independent from AXIS and just a plain POJO. This is our real service.</p>
<div class="code"><div class="codeContent">
<pre class="code-java"><span class="code-keyword">package</span> org.apache.camel.example.axis;

<span class="code-keyword">import</span> org.apache.camel.example.reportincident.InputReportIncident;
<span class="code-keyword">import</span> org.apache.camel.example.reportincident.OutputReportIncident;

/**
 * Our real service that is not tied to AXIS
 */
<span class="code-keyword">public</span> class ReportIncidentService  {

    <span class="code-keyword">public</span> OutputReportIncident reportIncident(InputReportIncident parameters) {
        <span class="code-object">System</span>.out.println(<span class="code-quote">"Hello ReportIncidentService is called from "</span> + parameters.getGivenName());

        OutputReportIncident out = <span class="code-keyword">new</span> OutputReportIncident();
        out.setCode(<span class="code-quote">"OK"</span>);
        <span class="code-keyword">return</span> out;
    }

}</pre>
</div></div>
<p>So now we need to get from AxisReportIncidentService to this one ReportIncidentService using Spring. Well first of all we add our real service to spring XML configuration file so Spring can handle its lifecycle:</p>
<div class="code"><div class="codeContent">
<pre class="code-xml"><span class="code-tag">&lt;?xml version=<span class="code-quote">"1.0"</span> encoding=<span class="code-quote">"UTF-8"</span>?&gt;</span>
&lt;beans xmlns=<span class="code-quote">"http://www.springframework.org/schema/beans"</span>
       <span class="code-keyword">xmlns:xsi</span>=<span class="code-quote">"http://www.w3.org/2001/XMLSchema-instance"</span>
       xsi:schemaLocation="
         http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"&gt;
    
    <span class="code-tag">&lt;bean id=<span class="code-quote">"incidentservice"</span> class=<span class="code-quote">"org.apache.camel.example.axis.ReportIncidentService"</span>/&gt;</span>

<span class="code-tag">&lt;/beans&gt;</span></pre>
</div></div>
<p>And then we need to modify AxisReportIncidentService to use Spring to lookup the spring bean <b>id="incidentservice"</b> and delegate the call. We do this by extending the spring class <tt>org.springframework.remoting.jaxrpc.ServletEndpointSupport</tt> so the refactored code is:</p>
<div class="code"><div class="codeContent">
<pre class="code-java"><span class="code-keyword">package</span> org.apache.camel.example.axis;

<span class="code-keyword">import</span> org.apache.camel.example.reportincident.InputReportIncident;
<span class="code-keyword">import</span> org.apache.camel.example.reportincident.OutputReportIncident;
<span class="code-keyword">import</span> org.apache.camel.example.reportincident.ReportIncidentService_PortType;
<span class="code-keyword">import</span> org.springframework.remoting.jaxrpc.ServletEndpointSupport;

<span class="code-keyword">import</span> java.rmi.RemoteException;

/**
 * Axis webservice
 */
<span class="code-keyword">public</span> class AxisReportIncidentService <span class="code-keyword">extends</span> ServletEndpointSupport <span class="code-keyword">implements</span> ReportIncidentService_PortType {

    <span class="code-keyword">public</span> OutputReportIncident reportIncident(InputReportIncident parameters) <span class="code-keyword">throws</span> RemoteException {
        <span class="code-comment">// get hold of the spring bean from the application context
</span>        ReportIncidentService service = (ReportIncidentService) getApplicationContext().getBean(<span class="code-quote">"incidentservice"</span>);

        <span class="code-comment">// delegate to the real service
</span>        <span class="code-keyword">return</span> service.reportIncident(parameters);
    }

}</pre>
</div></div>
<p>To see if everything is okay we run <tt>mvn jetty:run</tt>.</p>

<h2><a name="Tutorial-AXIS-Camel-IntegratingCamel"></a>Integrating Camel</h2>
<p>Again the first step is to add the dependencies to the maven <b>pom.xml</b> file:</p>
<div class="code"><div class="codeContent">
<pre class="code-xml"><span class="code-tag">&lt;dependency&gt;</span>
            <span class="code-tag">&lt;groupId&gt;</span>org.apache.camel<span class="code-tag">&lt;/groupId&gt;</span>
            <span class="code-tag">&lt;artifactId&gt;</span>camel-core<span class="code-tag">&lt;/artifactId&gt;</span>
            <span class="code-tag">&lt;version&gt;</span>1.4.0<span class="code-tag">&lt;/version&gt;</span>
        <span class="code-tag">&lt;/dependency&gt;</span>

        <span class="code-tag">&lt;dependency&gt;</span>
            <span class="code-tag">&lt;groupId&gt;</span>org.apache.camel<span class="code-tag">&lt;/groupId&gt;</span>
            <span class="code-tag">&lt;artifactId&gt;</span>camel-spring<span class="code-tag">&lt;/artifactId&gt;</span>
            <span class="code-tag">&lt;version&gt;</span>1.4.0<span class="code-tag">&lt;/version&gt;</span>
        <span class="code-tag">&lt;/dependency&gt;</span></pre>
</div></div>
<p>Now that we have integrated with Spring then we easily integrate with Camel as Camel works well with Spring.</p>
<table cellpadding='5' width='85%' cellspacing='8px' class='tipMacro' border="0" align='center'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="/confluence/images/icons/emoticons/check.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td><b class="strong">Camel does not require Spring</b><br />
<p>Camel does not require Spring, we could easily have used Camel without Spring, but most users prefer to use Spring also.</p></td></tr></table>
<p>We choose to integrate Camel in the Spring XML file so we add the camel namespace and the schema location:</p>
<div class="code"><div class="codeContent">
<pre class="code-java">xmlns:camel=<span class="code-quote">"http:<span class="code-comment">//activemq.apache.org/camel/schema/spring"</span>
</span>http:<span class="code-comment">//activemq.apache.org/camel/schema/spring http://activemq.apache.org/camel/schema/spring/camel-spring.xsd"</span></pre>
</div></div>
<h3><a name="Tutorial-AXIS-Camel-CamelContext"></a>CamelContext</h3>
<p>CamelContext is the heart of Camel its where all the routes, endpoints, components, etc. is registered. So we setup a CamelContext and the spring XML files looks like:</p>
<div class="code"><div class="codeContent">
<pre class="code-xml"><span class="code-tag">&lt;?xml version=<span class="code-quote">"1.0"</span> encoding=<span class="code-quote">"UTF-8"</span>?&gt;</span>
&lt;beans xmlns=<span class="code-quote">"http://www.springframework.org/schema/beans"</span>
       <span class="code-keyword">xmlns:xsi</span>=<span class="code-quote">"http://www.w3.org/2001/XMLSchema-instance"</span>
       <span class="code-keyword">xmlns:camel</span>=<span class="code-quote">"http://activemq.apache.org/camel/schema/spring"</span>
       xsi:schemaLocation="
         http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
         http://activemq.apache.org/camel/schema/spring http://activemq.apache.org/camel/schema/spring/camel-spring.xsd"&gt;

    <span class="code-tag">&lt;bean id=<span class="code-quote">"incidentservice"</span> class=<span class="code-quote">"org.apache.camel.example.axis.ReportIncidentService"</span>/&gt;</span>

    <span class="code-tag">&lt;camel:camelContext id=<span class="code-quote">"camel"</span>&gt;</span>
        <span class="code-tag"><span class="code-comment">&lt;!-- TODO: Here we can add Camel stuff --&gt;</span></span>
    <span class="code-tag">&lt;/camel:camelContext&gt;</span>

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

<h3><a name="Tutorial-AXIS-Camel-Storeafilebackup"></a>Store a file backup</h3>
<p>We want to store the web service request as a file before we return a response. To do this we want to send the file content as a message to an endpoint that produces the file. So we need to do two steps:</p>
<ul class="alternate" type="square">
	<li>configure the file backup endpoint</li>
	<li>send the message to the endpoint</li>
</ul>


<p>The endpoint is configured in spring XML so we just add it as:</p>
<div class="code"><div class="codeContent">
<pre class="code-xml"><span class="code-tag">&lt;camel:camelContext id=<span class="code-quote">"camelContext"</span>&gt;</span>
        <span class="code-tag"><span class="code-comment">&lt;!-- endpoint named backup that is configued as a file component --&gt;</span></span>
        <span class="code-tag">&lt;camel:endpoint id=<span class="code-quote">"backup"</span> uri=<span class="code-quote">"file://target?append=false"</span>/&gt;</span>
    <span class="code-tag">&lt;/camel:camelContext&gt;</span></pre>
</div></div>
<p>In the <a href="/confluence/display/CAMEL/CamelContext" title="CamelContext">CamelContext</a> we have defined our endpoint with the id <tt>backup</tt> and configured it use the URL notation that we know from the internet. Its a <tt>file</tt> scheme that accepts a context and some options. The contest is <tt>target</tt> and its the folder to store the file. The option is just as the internet with ? and &amp; for subsequent options. We configure it to not append, meaning than any existing file will be overwritten. See the <a href="/confluence/display/CAMEL/File" title="File">File</a> component for options and how to use the camel file endpoint.</p>

<p>Next up is to be able to send a message to this endpoint. The easiest way is to use a CamelProducer. A CamelProducer is inspired by Spring template pattern with for instance JmsTemplate or JdbcTemplate in mind. The template that all the grunt work and exposes a simple interface to the end-user where he/she can set the payload to send. Then the template will do proper resource handling and all related issues in that regard. But how do we get hold of such a template? Well the <a href="/confluence/display/CAMEL/CamelContext" title="CamelContext">CamelContext</a> is able to provide one. This is done by configuring the template on the camel context in the spring XML as:</p>
<div class="code"><div class="codeContent">
<pre class="code-xml"><span class="code-tag">&lt;camel:camelContext id=<span class="code-quote">"camelContext"</span>&gt;</span>
        <span class="code-tag"><span class="code-comment">&lt;!-- producer template exposed with this id --&gt;</span></span>
        <span class="code-tag">&lt;camel:template id=<span class="code-quote">"camelTemplate"</span>/&gt;</span>

        <span class="code-tag"><span class="code-comment">&lt;!-- endpoint named backup that is configued as a file component --&gt;</span></span>
        <span class="code-tag">&lt;camel:endpoint id=<span class="code-quote">"backup"</span> uri=<span class="code-quote">"file://target?append=false"</span>/&gt;</span>
    <span class="code-tag">&lt;/camel:camelContext&gt;</span></pre>
</div></div>
<p>Then we can expose a ProducerTemplate property on our service with a setter in the Java code as:</p>
<div class="code"><div class="codeContent">
<pre class="code-java"><span class="code-keyword">public</span> class ReportIncidentService {

    <span class="code-keyword">private</span> ProducerTemplate template;

    <span class="code-keyword">public</span> void setTemplate(ProducerTemplate template) {
        <span class="code-keyword">this</span>.template = template;
    }</pre>
</div></div>
<p>And then let Spring handle the dependency inject as below:</p>
<div class="code"><div class="codeContent">
<pre class="code-xml"><span class="code-tag">&lt;bean id=<span class="code-quote">"incidentservice"</span> class=<span class="code-quote">"org.apache.camel.example.axis.ReportIncidentService"</span>&gt;</span>
        <span class="code-tag"><span class="code-comment">&lt;!-- set the producer template to use from the camel context below --&gt;</span></span>
        <span class="code-tag">&lt;property name=<span class="code-quote">"template"</span> ref=<span class="code-quote">"camelTemplate"</span>/&gt;</span>
    <span class="code-tag">&lt;/bean&gt;</span></pre>
</div></div>

<p>Now we are ready to use the producer template in our service to send the payload to the endpoint. The template has many <b>sendXXX</b> methods for this purpose. But before we send the payload to the file endpoint we must also specify what filename to store the file as. This is done by sending meta data with the payload. In Camel metadata is sent as headers. Headers is just a plain <tt>Map&lt;String, Object&gt;</tt>. So if we needed to send several metadata then we could construct an ordinary HashMap and put the values in there. But as we just need to send one header with the filename Camel has a convenient send method <tt>sendBodyAndHeader</tt> so we choose this one. </p>
<div class="code"><div class="codeContent">
<pre class="code-java"><span class="code-keyword">public</span> OutputReportIncident reportIncident(InputReportIncident parameters) {
        <span class="code-object">System</span>.out.println(<span class="code-quote">"Hello ReportIncidentService is called from "</span> + parameters.getGivenName());

        <span class="code-object">String</span> data = parameters.getDetails();

        <span class="code-comment">// store the data as a file
</span>        <span class="code-object">String</span> filename = parameters.getIncidentId() + <span class="code-quote">".txt"</span>;
        <span class="code-comment">// send the data to the endpoint and the header contains what filename it should be stored as
</span>        template.sendBodyAndHeader(<span class="code-quote">"backup"</span>, data, <span class="code-quote">"org.apache.camel.file.name"</span>, filename);

        OutputReportIncident out = <span class="code-keyword">new</span> OutputReportIncident();
        out.setCode(<span class="code-quote">"OK"</span>);
        <span class="code-keyword">return</span> out;
    }</pre>
</div></div>
<p>The template in the code above uses 4 parameters:</p>
<ul class="alternate" type="square">
	<li>the endpoint name, in this case the id referring to the endpoint defined in Spring XML in the camelContext element.</li>
	<li>the payload, can be any kind of object</li>
	<li>the key for the header, in this case a Camel keyword to set the filename</li>
	<li>and the value for the header</li>
</ul>


<h2><a name="Tutorial-AXIS-Camel-Runningtheexample"></a>Running the example</h2>
<p>We start our integration with maven using <tt>mvn jetty:run</tt>. Then we open a browser and hit <tt><span class="nobr"><a href="http://localhost:8080" title="Visit page outside Confluence" rel="nofollow">http://localhost:8080<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span></tt>. Jetty is so smart that it display a frontpage with links to the deployed application so just hit the link and you get our application. Now we hit append /services to the URL to access the AXIS frontpage. The URL should be <tt><span class="nobr"><a href="http://localhost:8080/camel-example-axis/services" title="Visit page outside Confluence" rel="nofollow">http://localhost:8080/camel-example-axis/services<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span></tt>. </p>

<p>You can then test it using a web service test tools such as <span class="nobr"><a href="http://www.soapui.org/" title="Visit page outside Confluence" rel="nofollow">SoapUI<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span>. <br/>
Hitting the service will output to the console</p>
<div class="code"><div class="codeContent">
<pre class="code-java">2008-09-06 15:01:41.718::INFO:  Started SelectChannelConnector @ 0.0.0.0:8080
[INFO] Started Jetty Server
Hello ReportIncidentService is called from Ibsen</pre>
</div></div>
<p>And there should be a file in the target subfolder.</p>
<div class="code"><div class="codeContent">
<pre class="code-java">dir target /b
123.txt</pre>
</div></div>

<h2><a name="Tutorial-AXIS-Camel-UnitTesting"></a>Unit Testing</h2>
<p>TODO: How to embed Jetty and run a unit test by hitting a webservice call and expect the file output</p></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