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-Example-ReportIncident-Part1 (page edited)
Date Fri, 05 Sep 2008 11:48: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-Example-ReportIncident-Part1">Tutorial-Example-ReportIncident-Part1</a>
        </span>
    </div>

     <p>
        <a href="http://cwiki.apache.org/confluence/display/CAMEL/Tutorial-Example-ReportIncident-Part1">Tutorial-Example-ReportIncident-Part1</a>
        has been edited by             <a href="http://cwiki.apache.org/confluence/display/~pledge">Martin Gilday</a>
            <span class="smallfont">(Sep 05, 2008)</span>.
     </p>
    <p>
      Change summary:
      <div class="greybox wiki-content"><p>Correcting wsdl file extention to match tutorial</p></div>
    </p>
     <p>
                 <a href="http://cwiki.apache.org/confluence/pages/diffpagesbyversion.action?pageId=90920&originalVersion=18&revisedVersion=19">(View changes)</a>
     </p>

    <span class="label">Content:</span><br/>
    <div class="greybox wiki-content"><h1><a name="Tutorial-Example-ReportIncident-Part1-Part1"></a>Part 1</h1>

<h2><a name="Tutorial-Example-ReportIncident-Part1-Prerequisites"></a>Prerequisites</h2>
<p>This tutorial uses the following frameworks:</p>
<ul>
	<li>Maven 2.0.9</li>
	<li>Apache Camel 1.4.0</li>
	<li>Apache CXF 2.1.1</li>
	<li>Spring 2.5.5</li>
</ul>


<p><b>Note:</b> The sample project can be downloaded, see the <a href="#Tutorial-Example-ReportIncident-Part1-Resources" title="Resources on Tutorial-Example-ReportIncident-Part1">resources</a> section.</p>

<h2><a name="Tutorial-Example-ReportIncident-Part1-InitialProjectSetup"></a>Initial Project Setup</h2>
<p>We want the integration to be a standard .war application that can be deployed in any web container such as Tomcat, Jetty or even heavy weight application servers such as WebLogic or WebSphere. There fore we start off with the standard Maven webapp project that is created with the following long archetype command:</p>

<div class="code"><div class="codeContent">
<pre class="code-java">mvn archetype:create -DgroupId=org.apache.camel -DartifactId=camel-example-reportincident -DarchetypeArtifactId=maven-archetype-webapp</pre>
</div></div>

<p>Notice that the groupId etc. doens't have to be org.apache.camel it can be com.mycompany.whatever. But I have used these package names as the example is an official part of the Camel distribution.</p>

<p>Then we have the basic maven folder layout. We start out with the webservice part where we want to use Apache CXF for the webservice stuff. So we add this to the pom.xml</p>
<div class="code"><div class="codeContent">
<pre class="code-xml"><span class="code-tag">&lt;properties&gt;</span>
        <span class="code-tag">&lt;cxf-version&gt;</span>2.1.1<span class="code-tag">&lt;/cxf-version&gt;</span>
    <span class="code-tag">&lt;/properties&gt;</span>

    <span class="code-tag">&lt;dependency&gt;</span>
        <span class="code-tag">&lt;groupId&gt;</span>org.apache.cxf<span class="code-tag">&lt;/groupId&gt;</span>
        <span class="code-tag">&lt;artifactId&gt;</span>cxf-rt-core<span class="code-tag">&lt;/artifactId&gt;</span>
        <span class="code-tag">&lt;version&gt;</span>${cxf-version}<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.cxf<span class="code-tag">&lt;/groupId&gt;</span>
        <span class="code-tag">&lt;artifactId&gt;</span>cxf-rt-frontend-jaxws<span class="code-tag">&lt;/artifactId&gt;</span>
        <span class="code-tag">&lt;version&gt;</span>${cxf-version}<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.cxf<span class="code-tag">&lt;/groupId&gt;</span>
        <span class="code-tag">&lt;artifactId&gt;</span>cxf-rt-transports-http<span class="code-tag">&lt;/artifactId&gt;</span>
        <span class="code-tag">&lt;version&gt;</span>${cxf-version}<span class="code-tag">&lt;/version&gt;</span>
    <span class="code-tag">&lt;/dependency&gt;</span></pre>
</div></div>

<h2><a name="Tutorial-Example-ReportIncident-Part1-DevelopingtheWebService"></a>Developing the WebService</h2>
<p>As we want to develop webservice with the contract first approach we create our .wsdl file. As this is a example we have simplified the model of the incident to only include 8 fields. In real life the model would be a bit more complex, but not to much.</p>

<p>We put the wsdl file in the folder <tt>src/main/webapp/WEB-INF/wsdl</tt> and name the file <tt>report_incident.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-Example-ReportIncident-Part1-CXFwsdl2java"></a>CXF wsdl2java</h3>
<p>Then we integration the CXF wsdl2java generator in the pom.xml so we have CXF generate the needed POJO classes for our webservice contract. <br/>
However at first we must configure maven to live in the modern world of Java 1.5 so we must add this to the pom.xml</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></pre>
</div></div>

<p>And then we can add the CXF wsdl2java code generator that will hook into the compile goal so its automatic run all the time:</p>
<div class="code"><div class="codeContent">
<pre class="code-xml"><span class="code-tag"><span class="code-comment">&lt;!-- CXF wsdl2java generator, will plugin to the compile goal --&gt;</span></span>
			<span class="code-tag">&lt;plugin&gt;</span>
				<span class="code-tag">&lt;groupId&gt;</span>org.apache.cxf<span class="code-tag">&lt;/groupId&gt;</span>
				<span class="code-tag">&lt;artifactId&gt;</span>cxf-codegen-plugin<span class="code-tag">&lt;/artifactId&gt;</span>
				<span class="code-tag">&lt;version&gt;</span>${cxf-version}<span class="code-tag">&lt;/version&gt;</span>
				<span class="code-tag">&lt;executions&gt;</span>
					<span class="code-tag">&lt;execution&gt;</span>
						<span class="code-tag">&lt;id&gt;</span>generate-sources<span class="code-tag">&lt;/id&gt;</span>
						<span class="code-tag">&lt;phase&gt;</span>generate-sources<span class="code-tag">&lt;/phase&gt;</span>
						<span class="code-tag">&lt;configuration&gt;</span>
							<span class="code-tag">&lt;sourceRoot&gt;</span>${basedir}/target/generated/src/main/java<span class="code-tag">&lt;/sourceRoot&gt;</span>
							<span class="code-tag">&lt;wsdlOptions&gt;</span>
								<span class="code-tag">&lt;wsdlOption&gt;</span>
									<span class="code-tag">&lt;wsdl&gt;</span>${basedir}/src/main/webapp/WEB-INF/wsdl/report_incident.wsdl<span class="code-tag">&lt;/wsdl&gt;</span>
								<span class="code-tag">&lt;/wsdlOption&gt;</span>
							<span class="code-tag">&lt;/wsdlOptions&gt;</span>
						<span class="code-tag">&lt;/configuration&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>

<p>You are now setup and should be able to compile the project. So running the <tt>mvn compile</tt> should run the CXF wsdl2java and generate the source code in the folder <tt>&amp;{basedir}/target/generated/src/main/java</tt> that we specified in the pom.xml above. Since its in the <tt>target/generated/src/main/java</tt> maven will pick it up and include it in the build process. </p>

<h3><a name="Tutorial-Example-ReportIncident-Part1-Configurationoftheweb.xml"></a>Configuration of the web.xml</h3>
<p>Next up is to configure the web.xml to be ready to use CXF so we can expose the webservice.<br/>
As Spring is the center of the universe, or at least is a very important framework in today's Java land we start with the listener that kick-starts Spring. This is the usual piece of code:</p>
<div class="code"><div class="codeContent">
<pre class="code-xml"><span class="code-tag"><span class="code-comment">&lt;!-- the listener that kick-starts Spring --&gt;</span></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>And then we have the CXF part where we define the CXF servlet and its URI mappings to which we have chosen that all our webservices should be in the path <tt>/webservices/</tt></p>
<div class="code"><div class="codeContent">
<pre class="code-xml"><span class="code-tag"><span class="code-comment">&lt;!-- CXF servlet --&gt;</span></span>
	<span class="code-tag">&lt;servlet&gt;</span>
		<span class="code-tag">&lt;servlet-name&gt;</span>CXFServlet<span class="code-tag">&lt;/servlet-name&gt;</span>
		<span class="code-tag">&lt;servlet-class&gt;</span>org.apache.cxf.transport.servlet.CXFServlet<span class="code-tag">&lt;/servlet-class&gt;</span>
		<span class="code-tag">&lt;load-on-startup&gt;</span>1<span class="code-tag">&lt;/load-on-startup&gt;</span>
	<span class="code-tag">&lt;/servlet&gt;</span>

	<span class="code-tag"><span class="code-comment">&lt;!-- all our webservices are mapped under this URI pattern --&gt;</span></span>
	<span class="code-tag">&lt;servlet-mapping&gt;</span>
		<span class="code-tag">&lt;servlet-name&gt;</span>CXFServlet<span class="code-tag">&lt;/servlet-name&gt;</span>
		<span class="code-tag">&lt;url-pattern&gt;</span>/webservices/*<span class="code-tag">&lt;/url-pattern&gt;</span>
	<span class="code-tag">&lt;/servlet-mapping&gt;</span></pre>
</div></div>

<p>Then the last piece of the puzzle is to configure CXF, this is done in a spring XML that we link to fron the web.xml by the standard Spring <tt>contextConfigLocation</tt> property in the web.xml</p>
<div class="code"><div class="codeContent">
<pre class="code-xml"><span class="code-tag"><span class="code-comment">&lt;!-- location of spring xml files --&gt;</span></span>
	<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:cxf-config.xml<span class="code-tag">&lt;/param-value&gt;</span>
	<span class="code-tag">&lt;/context-param&gt;</span></pre>
</div></div>
<p>We have named our CXF configuration file <tt>cxf-config.xml</tt> and its located in the root of the classpath. In Maven land that is we can have the <tt>cxf-config.xml</tt> file in the <tt>src/main/resources</tt> folder. We could also have the file located in the WEB-INF folder for instance <tt>&lt;param-value&gt;/WEB-INF/cxf-config.xml&lt;/param-value&gt;</tt>.</p>

<h3><a name="Tutorial-Example-ReportIncident-Part1-Gettingridoftheoldjspworld"></a>Getting rid of the old jsp world</h3>
<p>The maven archetype that created the basic folder structure also created a sample .jsp file index.jsp. This file <tt>src/main/webapp/index.jsp</tt> should be deleted. </p>

<h3><a name="Tutorial-Example-ReportIncident-Part1-ConfigurationofCXF"></a>Configuration of CXF</h3>
<p>The cxf-config.xml is as follows:</p>
<div class="code"><div class="codeContent">
<pre class="code-xml">&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:jaxws</span>=<span class="code-quote">"http://cxf.apache.org/jaxws"</span>
       xsi:schemaLocation="
            http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
            http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd"&gt;

    <span class="code-tag">&lt;import resource=<span class="code-quote">"classpath:META-INF/cxf/cxf.xml"</span>/&gt;</span>
    <span class="code-tag">&lt;import resource=<span class="code-quote">"classpath:META-INF/cxf/cxf-extension-soap.xml"</span>/&gt;</span>
    <span class="code-tag">&lt;import resource=<span class="code-quote">"classpath:META-INF/cxf/cxf-servlet.xml"</span>/&gt;</span>

    <span class="code-tag"><span class="code-comment">&lt;!-- implementation of the webservice --&gt;</span></span>
    <span class="code-tag">&lt;bean id=<span class="code-quote">"reportIncidentEndpoint"</span> class=<span class="code-quote">"org.apache.camel.example.reportincident.ReportIncidentEndpointImpl"</span>/&gt;</span>

    <span class="code-tag"><span class="code-comment">&lt;!-- export the webservice using jaxws --&gt;</span></span>
    &lt;jaxws:endpoint id=<span class="code-quote">"reportIncident"</span>
                    implementor=<span class="code-quote">"#reportIncidentEndpoint"</span>
                    address=<span class="code-quote">"/incident"</span>
                    wsdlLocation=<span class="code-quote">"/WEB-INF/wsdl/report_incident.wsdl"</span>
                    endpointName=<span class="code-quote">"s:ReportIncidentPort"</span>
                    serviceName=<span class="code-quote">"s:ReportIncidentService"</span>
                    <span class="code-keyword">xmlns:s</span>=<span class="code-quote">"http://reportincident.example.camel.apache.org"</span>/&gt;

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

<p>The configuration is standard <a href="/confluence/display/CAMEL/CXF" title="CXF">CXF</a> and is documented at the <span class="nobr"><a href="http://cxf.apache.org/" title="Visit page outside Confluence" rel="nofollow">Apache CXF website<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span>.</p>

<p>The 3 import elements is needed by CXF and they must be in the file.</p>

<p>Noticed that we have a spring bean <b>reportIncidentEndpoint</b> that is the implementation of the webservice endpoint we let CXF expose.<br/>
Its linked from the jaxws element with the implementator attribute as we use the # mark to identify its a reference to a spring bean. We could have stated the classname directly as <tt>implementor="org.apache.camel.example.reportincident.ReportIncidentEndpoint"</tt> but then we lose the ability to let the ReportIncidentEndpoint be configured by spring.<br/>
The <b>address</b> attribute defines the relative part of the URL of the exposed webservice. <b>wsdlLocation</b> is an optional parameter but for persons like me that likes contract-first we want to expose our own .wsdl contracts and not the auto generated by the frameworks, so with this attribute we can link to the real .wsdl file. The last stuff is needed by CXF as you could have several services so it needs to know which this one is. Configuring these is quite easy as all the information is in the wsdl already.</p>

<h3><a name="Tutorial-Example-ReportIncident-Part1-ImplementingtheReportIncidentEndpoint"></a>Implementing the ReportIncidentEndpoint</h3>
<p>Phew after all these meta files its time for some java code so we should code the implementor of the webservice. So we fire up <tt>mvn compile</tt> to let CXF generate the POJO classes for our webservice and we are ready to fire up a Java editor.</p>

<p>You can use <tt>mvn idea:idea</tt> or <tt>mvn eclipse:eclipse</tt> to create project files for these editors so you can load the project. However IDEA has been smarter lately and can load a pom.xml directly.</p>

<p>As we want to quickly see our webservice we implement just a quick and dirty as it can get. At first beware that since its jaxws and Java 1.5 we get annotations for the money, but they reside on the interface so we can remove them from our implementations so its a nice plain POJO again:</p>
<div class="code"><div class="codeContent">
<pre class="code-java"><span class="code-keyword">package</span> org.apache.camel.example.reportincident;

/**
 * The webservice we have implemented.
 */
<span class="code-keyword">public</span> class ReportIncidentEndpointImpl <span class="code-keyword">implements</span> ReportIncidentEndpoint {

    <span class="code-keyword">public</span> OutputReportIncident reportIncident(InputReportIncident parameters) {
        <span class="code-object">System</span>.out.println(<span class="code-quote">"Hello ReportIncidentEndpointImpl 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>We just output the person that invokes this webservice and returns a OK response. This class should be in the maven source root folder <tt>src/main/java</tt> under the package name <tt>org.apache.camel.example.reportincident</tt>. Beware that the maven archetype tool didn't create the <tt>src/main/java folder</tt>, so you should create it manually.</p>

<p>To test if we are home free we run <tt>mvn clean compile</tt>.</p>

<h3><a name="Tutorial-Example-ReportIncident-Part1-Runningourwebservice"></a>Running our webservice</h3>
<p>Now that the code compiles we would like to run it in a web container, so we add jetty to our pom.xml so we can run <tt>mvn jetty:run</tt>:</p>
<div class="code"><div class="codeContent">
<pre class="code-xml"><span class="code-tag">&lt;properties&gt;</span>
             ...
             <span class="code-tag">&lt;jetty-version&gt;</span>6.1.1<span class="code-tag">&lt;/jetty-version&gt;</span>
	<span class="code-tag">&lt;/properties&gt;</span>

       <span class="code-tag">&lt;build&gt;</span>
           <span class="code-tag">&lt;plugins&gt;</span>
               ...
               <span class="code-tag"><span class="code-comment">&lt;!-- so we can run mvn jetty:run --&gt;</span></span>
               <span class="code-tag">&lt;plugin&gt;</span>
                   <span class="code-tag">&lt;groupId&gt;</span>org.mortbay.jetty<span class="code-tag">&lt;/groupId&gt;</span>
                   <span class="code-tag">&lt;artifactId&gt;</span>maven-jetty-plugin<span class="code-tag">&lt;/artifactId&gt;</span>
                   <span class="code-tag">&lt;version&gt;</span>${jetty-version}<span class="code-tag">&lt;/version&gt;</span>
               <span class="code-tag">&lt;/plugin&gt;</span></pre>
</div></div>
<p><b>Notice:</b> We use Jetty v6.1.1 as never versions has troubles on my laptop. Feel free to try a newer version on your system, but v6.1.1 works flawless.</p>

<p>So to see if everything is in order we fire up jetty with <tt>mvn jetty:run</tt> and if everything is okay you should be able to access <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>.<br/>
Jetty is smart that it will list the correct URI on the page to our web application, so just click on the link. This is smart as you don't have to remember the exact web context URI for your application - just fire up the default page and Jetty will help you.</p>

<p>So where is the damm webservice then? Well as we did configure the web.xml to instruct the CXF servlet to accept the pattern <tt>/webservices/*</tt> we should hit this URL to get the attention of CXF: <tt><span class="nobr"><a href="http://localhost:8080/my-webapp/webservices" title="Visit page outside Confluence" rel="nofollow">http://localhost:8080/my-webapp/webservices<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span></tt>.<br/>
<a href='http://cwiki.apache.org/confluence/download/attachments/90920/tutorial_reportincident_cxf_servicelist2.png' target='tutorial_reportincident_cxf_servicelist2.png' onClick='window.open("http://cwiki.apache.org/confluence/download/attachments/90920/tutorial_reportincident_cxf_servicelist2.png", "tutorial_reportincident_cxf_servicelist2.png", "height=230,width=974,menubar=no,status=no,toolbar=no"); return false;'><img src='/confluence/download/thumbnails/90920/tutorial_reportincident_cxf_servicelist2.png' align="absmiddle" border="0" /></a><br/>
&nbsp;</p>

<h3><a name="Tutorial-Example-ReportIncident-Part1-Hittingthewebservice"></a>Hitting the webservice</h3>
<p>Now we have the webservice running in a standard .war application in a standard web container such as Jetty we would like to invoke the webservice and see if we get our code executed. Unfortunately this isn't the easiest task in the world - its not so easy as a REST URL, so we need tools for this. So we fire up our trusty webservice tool <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> and let it be the one to fire the webservice request and see the response.</p>

<p>Using SoapUI we sent a request to our webservice and we got the expected OK response and the console outputs the System.out so we are ready to code.<br/>
<a href='http://cwiki.apache.org/confluence/download/attachments/90920/tutorial_reportincident_soapui2.png' target='tutorial_reportincident_soapui2.png' onClick='window.open("http://cwiki.apache.org/confluence/download/attachments/90920/tutorial_reportincident_soapui2.png", "tutorial_reportincident_soapui2.png", "height=474,width=998,menubar=no,status=no,toolbar=no"); return false;'><img src='/confluence/download/thumbnails/90920/tutorial_reportincident_soapui2.png' align="absmiddle" border="0" /></a><br/>
&nbsp;</p>

<h3><a name="Tutorial-Example-ReportIncident-Part1-RemoteDebugging"></a>Remote Debugging</h3>
<p>Okay a little sidestep but wouldn't it be cool to be able to debug your code when its fired up under Jetty? As Jetty is started from maven, we need to instruct maven to use debug mode. <br/>
Se we set the <tt>MAVEN_OPTS</tt> environment to start in debug mode and listen on port 5005.</p>
<div class="code"><div class="codeContent">
<pre class="code-java">MAVEN_OPTS=-Xmx512m -XX:MaxPermSize=128m -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005</pre>
</div></div>

<p>Then you need to restart Jetty so its stopped with <b>ctrl + c</b>. Remember to start a new shell to pickup the new environment settings. And start jetty again.</p>

<p>Then we can from our IDE attach a remote debugger and debug as we want.<br/>
First we configure IDEA to attach to a remote debugger on port 5005:<br/>
<a href='http://cwiki.apache.org/confluence/download/attachments/90920/tutorial_reportincident_remotedebug_idea_setup2.png' target='tutorial_reportincident_remotedebug_idea_setup2.png' onClick='window.open("http://cwiki.apache.org/confluence/download/attachments/90920/tutorial_reportincident_remotedebug_idea_setup2.png", "tutorial_reportincident_remotedebug_idea_setup2.png", "height=517,width=819,menubar=no,status=no,toolbar=no"); return false;'><img src='/confluence/download/thumbnails/90920/tutorial_reportincident_remotedebug_idea_setup2.png' align="absmiddle" border="0" /></a><br/>
&nbsp;</p>

<p>Then we set a breakpoint in our code <tt>ReportIncidentEndpoint</tt> and hit the SoapUI once again and we are breaked at the breakpoint where we can inspect the parameters:<br/>
<a href='http://cwiki.apache.org/confluence/download/attachments/90920/tutorial_reportincident_remotedebug_idea_breakpoint2.png' target='tutorial_reportincident_remotedebug_idea_breakpoint2.png' onClick='window.open("http://cwiki.apache.org/confluence/download/attachments/90920/tutorial_reportincident_remotedebug_idea_breakpoint2.png", "tutorial_reportincident_remotedebug_idea_breakpoint2.png", "height=998,width=1318,menubar=no,status=no,toolbar=no"); return false;'><img src='/confluence/download/thumbnails/90920/tutorial_reportincident_remotedebug_idea_breakpoint2.png' align="absmiddle" border="0" /></a><br/>
&nbsp;</p>

<h3><a name="Tutorial-Example-ReportIncident-Part1-Addingaunittest"></a>Adding a unit test</h3>
<p>Oh so much hard work just to hit a webservice, why can't we just use an unit test to invoke our webservice? Yes of course we can do this, and that's the next step.<br/>
First we create the folder structure <tt>src/test/java</tt> and <tt>src/test/resources</tt>. We then create the unit test in the <tt>src/test/java</tt> folder.</p>
<div class="code"><div class="codeContent">
<pre class="code-java"><span class="code-keyword">package</span> org.apache.camel.example.reportincident;

<span class="code-keyword">import</span> junit.framework.TestCase;

/**
 * Plain JUnit test of our webservice.
 */
<span class="code-keyword">public</span> class ReportIncidentEndpointTest <span class="code-keyword">extends</span> TestCase {

}</pre>
</div></div>
<p>Here we have a plain old JUnit class. As we want to test webservices we need to start and expose our webservice in the unit test before we can test it. And JAXWS has pretty decent methods to help us here, the code is simple as:</p>
<div class="code"><div class="codeContent">
<pre class="code-java"><span class="code-keyword">import</span> javax.xml.ws.Endpoint;
    ...

    <span class="code-keyword">private</span> <span class="code-keyword">static</span> <span class="code-object">String</span> ADDRESS = <span class="code-quote">"http:<span class="code-comment">//localhost:9090/unittest"</span>;
</span>
    <span class="code-keyword">protected</span> void startServer() <span class="code-keyword">throws</span> Exception {
        <span class="code-comment">// We need to start a server that exposes or webservice during the unit testing
</span>        <span class="code-comment">// We use jaxws to <span class="code-keyword">do</span> <span class="code-keyword">this</span> pretty simple
</span>        ReportIncidentEndpointImpl server = <span class="code-keyword">new</span> ReportIncidentEndpointImpl();
        Endpoint.publish(ADDRESS, server);
    }</pre>
</div></div>

<p>The Endpoint class is the <tt>javax.xml.ws.Endpoint</tt> that under the covers looks for a provider and in our case its CXF - so its CXF that does the heavy lifting of exposing out webservice on the given URL address. Since our class ReportIncidentEndpointImpl implements the interface <b>ReportIncidentEndpoint</b> that is decorated with all the jaxws annotations it got all the information it need to expose the webservice. Below is the CXF wsdl2java generated interface:</p>
<div class="code"><div class="codeContent">
<pre class="code-java">/*
 * 
 */

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

<span class="code-keyword">import</span> javax.jws.WebMethod;
<span class="code-keyword">import</span> javax.jws.WebParam;
<span class="code-keyword">import</span> javax.jws.WebResult;
<span class="code-keyword">import</span> javax.jws.WebService;
<span class="code-keyword">import</span> javax.jws.soap.SOAPBinding;
<span class="code-keyword">import</span> javax.jws.soap.SOAPBinding.ParameterStyle;
<span class="code-keyword">import</span> javax.xml.bind.annotation.XmlSeeAlso;

/**
 * This class was generated by Apache CXF 2.1.1
 * Wed Jul 16 12:40:31 CEST 2008
 * Generated source version: 2.1.1
 * 
 */
 
 /*
  * 
  */


@WebService(targetNamespace = <span class="code-quote">"http:<span class="code-comment">//reportincident.example.camel.apache.org"</span>, name = <span class="code-quote">"ReportIncidentEndpoint"</span>)
</span>@XmlSeeAlso({ObjectFactory.class})
@SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)

<span class="code-keyword">public</span> <span class="code-keyword">interface</span> ReportIncidentEndpoint {

/*
 * 
 */

    @SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)
    @WebResult(name = <span class="code-quote">"outputReportIncident"</span>, targetNamespace = <span class="code-quote">"http:<span class="code-comment">//reportincident.example.camel.apache.org"</span>, partName = <span class="code-quote">"parameters"</span>)
</span>    @WebMethod(operationName = <span class="code-quote">"ReportIncident"</span>, action = <span class="code-quote">"http:<span class="code-comment">//reportincident.example.camel.apache.org/ReportIncident"</span>)
</span>    <span class="code-keyword">public</span> OutputReportIncident reportIncident(
        @WebParam(partName = <span class="code-quote">"parameters"</span>, name = <span class="code-quote">"inputReportIncident"</span>, targetNamespace = <span class="code-quote">"http:<span class="code-comment">//reportincident.example.camel.apache.org"</span>)
</span>        InputReportIncident parameters
    );
}</pre>
</div></div>

<p>Next up is to create a webservice client so we can invoke our webservice. For this we actually use the CXF framework directly as its a bit more easier to create a client using this framework than using the JAXWS style. We could have done the same for the server part, and you should do this if you need more power and access more advanced features.</p>

<div class="code"><div class="codeContent">
<pre class="code-java"><span class="code-keyword">import</span> org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
    ...
    
    <span class="code-keyword">protected</span> ReportIncidentEndpoint createCXFClient() {
        <span class="code-comment">// we use CXF to create a client <span class="code-keyword">for</span> us as its easier than JAXWS and works
</span>        JaxWsProxyFactoryBean factory = <span class="code-keyword">new</span> JaxWsProxyFactoryBean();
        factory.setServiceClass(ReportIncidentEndpoint.class);
        factory.setAddress(ADDRESS);
        <span class="code-keyword">return</span> (ReportIncidentEndpoint) factory.create();
    }</pre>
</div></div>

<p>So now we are ready for creating a unit test. We have the server and the client. So we just create a plain simple unit test method as the usual junit style:</p>
<div class="code"><div class="codeContent">
<pre class="code-java"><span class="code-keyword">public</span> void testRendportIncident() <span class="code-keyword">throws</span> Exception {
        startServer();

        ReportIncidentEndpoint client = createCXFClient();

        InputReportIncident input = <span class="code-keyword">new</span> InputReportIncident();
        input.setIncidentId(<span class="code-quote">"123"</span>);
        input.setIncidentDate(<span class="code-quote">"2008-07-16"</span>);
        input.setGivenName(<span class="code-quote">"Claus"</span>);
        input.setFamilyName(<span class="code-quote">"Ibsen"</span>);
        input.setSummary(<span class="code-quote">"bla bla"</span>);
        input.setDetails(<span class="code-quote">"more bla bla"</span>);
        input.setEmail(<span class="code-quote">"davsclaus@apache.org"</span>);
        input.setPhone(<span class="code-quote">"+45 2962 7576"</span>);

        OutputReportIncident out = client.reportIncident(input);
        assertEquals(<span class="code-quote">"Response code is wrong"</span>, <span class="code-quote">"OK"</span>, out.getCode());
    }</pre>
</div></div>

<p>Now we are nearly there. But if you run the unit test with <tt>mvn test</tt> then it will fail. Why!!! Well its because that CXF needs is missing some dependencies during unit testing. In fact it needs the web container, so we need to add this to our <b>pom.xml</b>.</p>
<div class="code"><div class="codeContent">
<pre class="code-xml"><span class="code-tag"><span class="code-comment">&lt;!-- cxf web container for unit testing --&gt;</span></span>
    <span class="code-tag">&lt;dependency&gt;</span>
        <span class="code-tag">&lt;groupId&gt;</span>org.apache.cxf<span class="code-tag">&lt;/groupId&gt;</span>
        <span class="code-tag">&lt;artifactId&gt;</span>cxf-rt-transports-http-jetty<span class="code-tag">&lt;/artifactId&gt;</span>
        <span class="code-tag">&lt;version&gt;</span>${cxf-version}<span class="code-tag">&lt;/version&gt;</span>
        <span class="code-tag">&lt;scope&gt;</span>test<span class="code-tag">&lt;/scope&gt;</span>
    <span class="code-tag">&lt;/dependency&gt;</span></pre>
</div></div>

<p>Well what is that, CXF also uses Jetty for unit test - well its just shows how agile, embedable and popular Jetty is.</p>

<p>So lets run our junit test with, and it reports:</p>
<div class="code"><div class="codeContent">
<pre class="code-java">mvn test
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[INFO] BUILD SUCCESSFUL</pre>
</div></div>

<p>Yep thats it for now. We have a basic project setup.</p>


<h2><a name="Tutorial-Example-ReportIncident-Part1-Endofpart1"></a>End of part 1</h2>
<p>Thanks for being patient and reading all this more or less standard Maven, Spring, JAXWS and Apache CXF stuff. Its stuff that is well covered on the net, but I wanted a full fledged tutorial on a maven project setup that is web service ready with Apache CXF. We will use this as a base for the next part where we demonstrate how Camel can be digested slowly and piece by piece just as it was back in the times when was introduced and was learning the Spring framework that we take for granted today. </p>

<h2><a name="Tutorial-Example-ReportIncident-Part1-%23Resources"></a><a href="#Tutorial-Example-ReportIncident-Part1-Resources" title="Resources on Tutorial-Example-ReportIncident-Part1">Resources</a></h2>
<ul>
	<li><span class="nobr"><a href="http://cwiki.apache.org/CXF20DOC/index.html" title="Visit page outside Confluence" rel="nofollow">Apache CXF user guide<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span></li>
	<li>    <script language="javascript">
    function toggle(id) {
        var oldAttachmentVersionsBlock = document.getElementById('history_' + id);
        var latestAttachmentVersionBlock = document.getElementById("attachment_" + id);
        with (oldAttachmentVersionsBlock.style)
        {
            if ( display == "none" )
            {
                display = "";
                // change the css class of the tr so that all td's sitting inside willbe stripped of their bottom borders (so it looks nice!)
                if (latestAttachmentVersionBlock.className != '')
                    latestAttachmentVersionBlock.className = 'rowAlternateNoBottomColor';
                else
                    latestAttachmentVersionBlock.className = 'rowAlternateNoBottomNoColor';
            }
            else
            {
                display = "none";
                if (latestAttachmentVersionBlock.className == 'rowAlternateNoBottomColor')
                    latestAttachmentVersionBlock.className = 'rowAlternate';
                else
                    latestAttachmentVersionBlock.className = null;
            }
        }

        var arrowIcon = document.getElementById('arrow' + id);
        with (arrowIcon)
        {
            if (src != null && (src.indexOf('/confluence/images/icons/arrow_closed_active_16.gif') != -1 || src.indexOf('/confluence/images/icons/arrow_closing_active_16.gif') != -1))
            {
                src = '/confluence/images/icons/arrow_opening_active_16.gif';
            }
            else
            {
                src = '/confluence/images/icons/arrow_closing_active_16.gif';
            }
        }


    }
    </script>


            <table class="tableview" cellpadding="0" cellspacing="0" width="100%">
            <tr>
                <th width="1%">&nbsp;</th>
                <th width="1%"><a href="/confluence/display/CAMEL/Tutorial-Example-ReportIncident-Part1?sortBy=name">Name</a></th>
                <th width="1%"><a href="/confluence/display/CAMEL/Tutorial-Example-ReportIncident-Part1?sortBy=size">Size</a></th>
                <th width="1%">Creator</th>
                <th width="1%"><a href="/confluence/display/CAMEL/Tutorial-Example-ReportIncident-Part1?sortBy=date">Date</a></th>
                <th>Comment</th>
                <th width="1%">&nbsp;</th>
            </tr>
            
                            <tr      id="attachment_7717">
                            <td nowrap><img align="absmiddle" height="16" width="16" id="arrow7717" src="/confluence/images/border/spacer.gif"></td>
                <td nowrap><a name="Tutorial-Example-ReportIncident-Part1-attachment-tutorial_reportincident_part-one.zip"><img src="/confluence/images/icons/attachments/zip.gif" height=16 width=16 border=0 vspace=1 align=absmiddle alt="ZIP Archive"></a> <a href="/confluence/download/attachments/90920/tutorial_reportincident_part-one.zip">tutorial_reportincident_part-one.zip</a></td>
                <td nowrap>14 kb</td>
                <td nowrap>    <a href="/confluence/display/~davsclaus">Claus Ibsen</a></td>
                <td nowrap>Jul 17, 2008</td>
                <td>                        &nbsp;
                                    </td>
                <td nowrap>&nbsp;

                                                                        <a href="/confluence/pages/movepageattachment.action?pageId=90920&fileName=tutorial_reportincident_part-one.zip" id="edit_attachment">Edit</a> |
                                            
                                                                        <a href="/confluence/pages/removeattachmentonpage.action?pageId=90920&fileName=tutorial_reportincident_part-one.zip&version=1"
                            onClick="javascript:if( confirm('Are you sure you want to remove attached file tutorial_reportincident_part-one.zip?')) return true; else return false;">Remove</a>
                                                            </td>
            </tr>

                                </table>
    
<br>

    
    </li>
</ul>


<h2><a name="Tutorial-Example-ReportIncident-Part1-Links"></a>Links</h2>
<ul class="alternate" type="square">
	<li><a href="/confluence/display/CAMEL/Tutorial-Example-ReportIncident" title="Tutorial-Example-ReportIncident">Introduction</a></li>
	<li><a href="/confluence/display/CAMEL/Tutorial-Example-ReportIncident-Part1" title="Tutorial-Example-ReportIncident-Part1">Part 1</a></li>
	<li><a href="/confluence/display/CAMEL/Tutorial-Example-ReportIncident-Part2" title="Tutorial-Example-ReportIncident-Part2">Part 2</a></li>
	<li><a href="/confluence/display/CAMEL/Tutorial-Example-ReportIncident-Part3" title="Tutorial-Example-ReportIncident-Part3">Part 3</a></li>
	<li><a href="/confluence/display/CAMEL/Tutorial-Example-ReportIncident-Part4" title="Tutorial-Example-ReportIncident-Part4">Part 4</a></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