ode-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From conflue...@apache.org
Subject [CONF] Apache Ode: WSDL 1.1 Extensions for REST (page edited)
Date Mon, 08 Sep 2008 17:37: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/ODExSITE">ODExSITE</a> :
            <a href="http://cwiki.apache.org/confluence/display/ODExSITE/WSDL+1.1+Extensions+for+REST">WSDL 1.1 Extensions for REST</a>
        </span>
    </div>

     <p>
        <a href="http://cwiki.apache.org/confluence/display/ODExSITE/WSDL+1.1+Extensions+for+REST">WSDL 1.1 Extensions for REST</a>
        has been edited by             <a href="http://cwiki.apache.org/confluence/display/~alexism">Alexis Midon</a>
            <span class="smallfont">(Sep 08, 2008)</span>.
     </p>
    
     <p>
                 <a href="http://cwiki.apache.org/confluence/pages/diffpagesbyversion.action?pageId=90723&originalVersion=18&revisedVersion=19">(View changes)</a>
     </p>

    <span class="label">Content:</span><br/>
    <div class="greybox wiki-content"><p>The <span class="nobr"><a href="http://en.wikipedia.org/wiki/Representational_State_Transfer" title="Visit page outside Confluence" rel="nofollow">Resource-Oriented Architecture<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span> defines four concepts:</p>
<ol>
	<li>Resources</li>
	<li>Their names (URIs)</li>
	<li>Their representations</li>
	<li>The link bet ween them</li>
</ol>


<p>and four properties:</p>
<ol>
	<li>Addressability</li>
	<li>Statelesness</li>
	<li>Connectedness</li>
	<li>A uniform interface</li>
</ol>


<p>HTTP binding as defined in WSDL 1.1 is not well suitable to describe services implementing these concepts and properties, mainly because a port type may access 4 different locations/resources but with only one HTTP method.</p>

<p>To better describe RESTful services, and turn a port type into a "resource type", ODE brings a set of 4 extensions:</p>
<ol>
	<li>one HTTP method per operation (instead of one per binding)</li>
	<li>a unique URI Template for all operations</li>
	<li>access to HTTP headers</li>
	<li>fault support</li>
</ol>


<p>Further details below.</p>

<p>In this page, we use an imaginary blog service as a use case to illustrate and make things more palpable. We will focus on the resources defined by the following URI template: <div class="preformatted"><div class="preformattedContent">
<pre>http://blog.org/post/{id}</pre>
</div></div> <br/>
Let's assume that such a resource accept four operations:</p>
<ul>
	<li>GET to retrieve a post</li>
	<li>DELETE to delete it</li>
	<li>PUT to update the post</li>
	<li>POST to add a comment to a post</li>
</ul>


<table cellpadding='5' width='85%' cellspacing='8px' class='infoMacro' border="0" align='center'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="/confluence/images/icons/emoticons/information.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td><b class="strong">Check out unit tests!</b><br />For a complete suite of working examples, please refer to <span class="nobr"><a href="http://svn.apache.org/viewvc/ode/trunk/axis2-war/src/test/resources/" title="Visit page outside Confluence" rel="nofollow">unit tests<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span></td></tr></table>

<h3><a name="WSDL1.1ExtensionsforREST-Oneverbperoperation"></a>One verb per operation</h3>

<p>According to the WSDL 1.1 specification, the verb describing the HTTP method has to be at <span class="nobr"><a href="http://www.w3.org/TR/wsdl#A4.3" title="Visit page outside Confluence" rel="nofollow">the binding level<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span>. Which implies that the same HTTP method is used by all operations of a given port type. But RESTful web services leverage HTTP methods as a uniform interface to describe operation on resources. So for instance, if you want to use the following HTTP operations &#8211; GET, POST, PUT, DELETE &#8211; for a given resource, four different bindings would be required. And consequently four port types and four ports. Quite verbose and unusable, isn't it?</p>

<p>So, this extension is to push down the HTTP verb at the operation level. And if an operation does not have its own verb, then the verb defined at the binding level will be used. <br/>
This extension is declared in the namespace: <tt><span class="nobr"><a href="http://www.apache.org/ode/type/extension/http" title="Visit page outside Confluence" rel="nofollow">http://www.apache.org/ode/type/extension/http<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>Please note that ODE supports GET, POST, PUT, DELETE only.</p>
<div class="code"><div class="codeContent">
<pre class="code-xml">&lt;definitions ...
                  <span class="code-keyword">xmlns:odex</span>=<span class="code-quote">"http://www.apache.org/ode/type/extension/http"</span>/&gt;

    <span class="code-tag"><span class="code-comment">&lt;!-- many wsdl elements are ommited to highlight the interesting part --&gt;</span></span>

    <span class="code-tag">&lt;binding name=<span class="code-quote">"blogBinding"</span> type=<span class="code-quote">"blogPortType"</span>&gt;</span>
        <span class="code-tag">&lt;operation name=<span class="code-quote">"GET"</span>&gt;</span>
            <span class="code-tag">&lt;odex:binding verb=<span class="code-quote">"GET"</span> /&gt;</span>
        <span class="code-tag">&lt;/operation&gt;</span>
        <span class="code-tag">&lt;operation name=<span class="code-quote">"DELETE"</span>&gt;</span>
            <span class="code-tag">&lt;odex:binding verb=<span class="code-quote">"DELETE"</span>/&gt;</span>
        <span class="code-tag">&lt;/operation&gt;</span>
    <span class="code-tag">&lt;/binding&gt;</span>
<span class="code-tag">&lt;/definitions&gt;</span></pre>
</div></div>



<h3><a name="WSDL1.1ExtensionsforREST-URITemplate"></a>URI Template</h3>

<p>A RESTful service exposed a set of resources, each of them being accessible through a uniform interface: HTTP methods for a web service. So we need a way to define four operations (at most) for a single resource. </p>

<p>Moreover it's very likely that the resource URI actually describes a set of resources. For instance, the set of posts contained in our imaginary blog: <tt>http://blog.org/post/\{post_id</tt>}.</p>

<p>HTTP binding offers the <span class="nobr"><a href="http://www.w3.org/TR/wsdl#_http:operation" title="Visit page outside Confluence" rel="nofollow">http:operation <sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span> element to set the path of an operation. While the service address is set in the <span class="nobr"><a href="http://www.w3.org/TR/wsdl#_http:address" title="Visit page outside Confluence" rel="nofollow">http:address<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span> of the <span class="nobr"><a href="http://www.w3.org/TR/wsdl#_ports" title="Visit page outside Confluence" rel="nofollow">wsdl:port<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span> element.<br/>
So one could imagine splitting the URL this way: </p>

<div class="code"><div class="codeContent">
<pre class="code-xml">&lt;definitions ...
                  <span class="code-keyword">xmlns:odex</span>=<span class="code-quote">"http://www.apache.org/ode/type/extension/http"</span>/&gt;

   <span class="code-tag">&lt;service name=<span class="code-quote">"blogService"</span>&gt;</span>
        <span class="code-tag">&lt;port name=<span class="code-quote">"blogPort"</span> binding=<span class="code-quote">"blogPortType"</span>&gt;</span>
             <span class="code-tag">&lt;http:address location=<span class="code-quote">"http://blog.org"</span>/&gt;</span>
        <span class="code-tag">&lt;/port&gt;</span>
    <span class="code-tag">&lt;/service&gt;</span>

    <span class="code-tag">&lt;binding name=<span class="code-quote">"blogBinding"</span> type=<span class="code-quote">"blogPortType"</span>&gt;</span>
        <span class="code-tag">&lt;operation name=<span class="code-quote">"PUT"</span>&gt;</span>
            <span class="code-tag">&lt;odex:binding verb=<span class="code-quote">"PUT"</span> /&gt;</span>
            <span class="code-tag">&lt;http:operation location=<span class="code-quote">"post/(post_id)"</span>/&gt;</span>
            <span class="code-tag">&lt;input&gt;</span>
                 <span class="code-tag">&lt;http:urlReplacement/&gt;</span>
             <span class="code-tag">&lt;/input&gt;</span>
             <span class="code-tag">&lt;output/&gt;</span>
        <span class="code-tag">&lt;/operation&gt;</span>
    <span class="code-tag">&lt;/binding&gt;</span>
<span class="code-tag">&lt;/definitions&gt;</span></pre>
</div></div>

<p>However, here 3 issues show up:</p>
<ol>
	<li>the location is not accessible from the End Point Reference. <em>=&gt; ODE cannot process it before invoking the external service.</em></li>
	<li><span class="nobr"><a href="http://www.w3.org/TR/wsdl#_http:urlReplacement" title="Visit page outside Confluence" rel="nofollow">http:urlReplacement<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span> is only accepted for GET <em>=&gt; what about the uniform interface?!</em></li>
	<li>http:urlReplacement requires all parts of the operation input message to be mentioned in the operation location. Meaning that:
	<ul>
		<li>=&gt; the resource id (in the present example) must be a part of the message.</li>
		<li>=&gt; no parts may be stored in the HTTP body. this conflicts with a PUT operation for instance. With a PUT you would like to set the id in the url and the resource data in the HTTP request body.</li>
	</ul>
	</li>
</ol>


<p>To solve this, ODE allows <span class="nobr"><a href="http://www.w3.org/TR/wsdl#_http:operation" title="Visit page outside Confluence" rel="nofollow">http:operation <sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span> elements to be omitted or empty, and the full resource URI to be set in a single place, the http:address element. </p>

<table cellpadding='5' width='85%' cellspacing='8px' class='noteMacro' border="0" align='center'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="/confluence/images/icons/emoticons/warning.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td>Please note that curly brackets '{}' are the preferred argument delimiters in URI templates. So that URLs can be dynamically composed using <a href="/confluence/display/ODExSITE/RESTful+BPEL%2C+Part+I#RESTfulBPEL%2CPartI-XPathfunctions" title="XPath functions on RESTful BPEL, Part I">composeUrl, combineUrl and expandTemplate XPath Functions</a>.</td></tr></table>

<p>In addition, the http:urlReplacement is relaxed: all parts are <b>not</b> required in the URI template anymore. One part could go in the URI, another in the request body.</p>

<div class="code"><div class="codeContent">
<pre class="code-xml">&lt;definitions ...
                  <span class="code-keyword">xmlns:odex</span>=<span class="code-quote">"http://www.apache.org/ode/type/extension/http"</span>/&gt;

   <span class="code-tag">&lt;service name=<span class="code-quote">"blogService"</span>&gt;</span>
        <span class="code-tag">&lt;port name=<span class="code-quote">"blogPort"</span> binding=<span class="code-quote">"blogPortType"</span>&gt;</span>
             <span class="code-tag"><span class="code-comment">&lt;!-- here is the full URI template, using curly brackets --&gt;</span></span>
             <span class="code-tag">&lt;http:address location=<span class="code-quote">"http://blog.org/post/{post_id}"</span>/&gt;</span>
        <span class="code-tag">&lt;/port&gt;</span>
    <span class="code-tag">&lt;/service&gt;</span>

    <span class="code-tag">&lt;binding name=<span class="code-quote">"blogBinding"</span> type=<span class="code-quote">"blogPortType"</span>&gt;</span>
        <span class="code-tag">&lt;operation name=<span class="code-quote">"PUT"</span>&gt;</span>
             <span class="code-tag">&lt;odex:binding verb=<span class="code-quote">"PUT"</span> /&gt;</span>
             <span class="code-tag"><span class="code-comment">&lt;!-- location attribute intentionally blank --&gt;</span></span>
             <span class="code-tag">&lt;http:operation location=""/&gt;</span>
             <span class="code-tag">&lt;input&gt;</span>
                 <span class="code-tag">&lt;http:urlReplacement/&gt;</span>
                 <span class="code-tag"><span class="code-comment">&lt;!-- an additional part can be mapped to the request body even if urlReplacement is used--&gt;</span></span>
                 <span class="code-tag">&lt;mime:content type=<span class="code-quote">"text/xml"</span> part=<span class="code-quote">"post_content"</span>/&gt;</span>
             <span class="code-tag">&lt;/input&gt;</span>
             <span class="code-tag">&lt;output/&gt;</span>
        <span class="code-tag">&lt;/operation&gt;</span>
    <span class="code-tag">&lt;/binding&gt;</span>
<span class="code-tag">&lt;/definitions&gt;</span></pre>
</div></div>


<h3><a name="WSDL1.1ExtensionsforREST-HTTPHeadersmanipulation"></a>HTTP Headers manipulation</h3>

<p>HHTP protocal convey a lot of information in Request/Response Headers. Caching information, Content description for instance. All this data is completely left out by WSDL 1.1 HTTP Binding. To fix this, ODE provides a header element. This element can be used to insert a part or a static value into a given HTTP request header (standard or custom). And the way around, a HTTP request header into a part. Also note that all HTTP response headers are inserted into the message headers, and thus are available from the BPEL process.</p>

<div class="code"><div class="codeContent">
<pre class="code-xml">&lt;definitions ...
                  <span class="code-keyword">xmlns:odex</span>=<span class="code-quote">"http://www.apache.org/ode/type/extension/http"</span>/&gt;

    <span class="code-tag">&lt;binding name=<span class="code-quote">"blogBinding"</span> type=<span class="code-quote">"blogPortType"</span>&gt;</span>
        <span class="code-tag">&lt;operation name=<span class="code-quote">"PUT"</span>&gt;</span>
             <span class="code-tag">&lt;odex:binding verb=<span class="code-quote">"PUT"</span> /&gt;</span>
             <span class="code-tag">&lt;http:operation location=""/&gt;</span>
             <span class="code-tag">&lt;input&gt;</span>
                 <span class="code-tag">&lt;http:urlReplacement/&gt;</span>
                 <span class="code-tag">&lt;mime:content type=<span class="code-quote">"text/xml"</span> part=<span class="code-quote">"post_content"</span>/&gt;</span>
                 <span class="code-tag"><span class="code-comment">&lt;!-- set a standard request header from a part --&gt;</span></span>
                 <span class="code-tag">&lt;odex:header name=<span class="code-quote">"Authorization"</span> part=<span class="code-quote">"credentials_part"</span>/&gt;</span>
                 <span class="code-tag"><span class="code-comment">&lt;!-- set a custom request header with a static value --&gt;</span></span>
                 <span class="code-tag">&lt;odex:header name=<span class="code-quote">"MyCustomHeader"</span> value=<span class="code-quote">"ode@apache.org"</span> /&gt;</span>
             <span class="code-tag">&lt;/input&gt;</span>
             <span class="code-tag">&lt;output&gt;</span>
                 <span class="code-tag">&lt;mime:content type=<span class="code-quote">"text/xml"</span> part=<span class="code-quote">"post_content"</span>/&gt;</span>
                 <span class="code-tag"><span class="code-comment">&lt;!-- set 1 response header to a part --&gt;</span></span>
                 <span class="code-tag">&lt;odex:header name=<span class="code-quote">"Age"</span> part=<span class="code-quote">"age_part"</span>/&gt;</span>
             <span class="code-tag">&lt;/output&gt;</span>
        <span class="code-tag">&lt;/operation&gt;</span>
    <span class="code-tag">&lt;/binding&gt;</span>
<span class="code-tag">&lt;/definitions&gt;</span></pre>
</div></div>

<p>For every HTTP response, in addition to HTTP response headers, the <span class="nobr"><a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec6.html#sec6.1" title="Visit page outside Confluence" rel="nofollow">Status-Line<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span> is passed as a message header. To save some painful XPath string manipulations, the Status-line is already parsed into the following structure:</p>
<div class="code"><div class="codeContent">
<pre class="code-xml"><span class="code-tag">&lt;Status-Line&gt;</span>
   <span class="code-tag">&lt;HTTP-Version&gt;</span>HTTP/1.1<span class="code-tag">&lt;/HTTP-Version&gt;</span>
   <span class="code-tag">&lt;Status-Code&gt;</span>200<span class="code-tag">&lt;/Status-Code&gt;</span>
   <span class="code-tag">&lt;Reason-Phrase&gt;</span>OK<span class="code-tag">&lt;/Reason-Phrase&gt;</span>
   <span class="code-tag"><span class="code-comment">&lt;!-- the original unaltered Status-Line --&gt;</span></span>
   <span class="code-tag">&lt;original&gt;</span>HTTP/1.1 200 OK<span class="code-tag">&lt;/original&gt;</span>
<span class="code-tag">&lt;/Status-Line&gt;</span></pre>
</div></div>

<p>So that you can write the following BPEL lines:</p>
<div class="code"><div class="codeContent">
<pre class="code-xml"><span class="code-tag">&lt;assign&gt;</span>
            <span class="code-tag">&lt;copy&gt;</span>
                <span class="code-tag">&lt;from variable=<span class="code-quote">"postMsg"</span> header=<span class="code-quote">"Status-Line"</span>/&gt;</span>
                <span class="code-tag">&lt;to&gt;</span>$statusLine<span class="code-tag">&lt;/to&gt;</span>
            <span class="code-tag">&lt;/copy&gt;</span>
        <span class="code-tag">&lt;/assign&gt;</span>
        <span class="code-tag">&lt;if&gt;</span>
            <span class="code-tag">&lt;condition&gt;</span>number($statusLine/Status-Code) &gt; 200 and number($statusLine/Status-Code) <span class="code-tag">&lt; 300&lt;/condition&gt;</span>
            <span class="code-tag">&lt;assign&gt;</span>
                 <span class="code-tag">&lt;copy&gt;</span>
                     <span class="code-tag">&lt;from&gt;</span>'Request successful!!!'<span class="code-tag">&lt;/from&gt;</span>
                     <span class="code-tag">&lt;to&gt;</span>$outputVar.TestPart<span class="code-tag">&lt;/to&gt;</span>
                 <span class="code-tag">&lt;/copy&gt;</span>
             <span class="code-tag">&lt;/assign&gt;</span>
        <span class="code-tag">&lt;/if&gt;</span></pre>
</div></div>

<h3><a name="WSDL1.1ExtensionsforREST-FaultSupport"></a>Fault Support</h3>

<p>Another domain completely neglected by WSDL 1.1 HTTP Binding is Fault management. The word is not even mentioned in the <span class="nobr"><a href="http://www.w3.org/TR/wsdl#_http" title="Visit page outside Confluence" rel="nofollow">HTTP Binding section<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span>.<br/>
ODE allows you to bind a fault with HTTP Binding. If a <span class="nobr"><a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4" title="Visit page outside Confluence" rel="nofollow">4xx or a 5xx<sup><img class="rendericon" src="/confluence/images/icons/linkext7.gif" height="7" width="7" align="absmiddle" alt="" border="0"/></sup></a></span> is returned, the following logic is applied:</p>

<p>A failure is thrown if the code is one of these:</p>
<table class='confluenceTable'><tbody>
<tr>
<th class='confluenceTh'> Status-Codes triggering a Failure </th>
</tr>
<tr>
<td class='confluenceTd'> 3xx Redirections </td>
</tr>
<tr>
<td class='confluenceTd'>401_UNAUTHORIZED</td>
</tr>
<tr>
<td class='confluenceTd'>408_REQUEST_TIMEOUT</td>
</tr>
<tr>
<td class='confluenceTd'>503_SERVICE_UNAVAILABLE</td>
</tr>
<tr>
<td class='confluenceTd'>504_GATEWAY_TIMEOUT</td>
</tr>
</tbody></table>


<table cellpadding='5' width='85%' cellspacing='8px' class='infoMacro' border="0" align='center'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="/confluence/images/icons/emoticons/information.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td><b class="strong">Useful Information</b><br />Note that 3xx errors should be pretty rare since by default the first hundred redirections are followed. You can tweak this value by setting the property <tt>http.protocol.max-redirects</tt> in the <a href="/confluence/display/ODExSITE/Endpoint+Configuration" title="Endpoint Configuration">enpoint-configuration.properties</a> of your process.</td></tr></table>

<p>else ODE checks that a fault is declared in the WSDL for the current operation and that the response body contains the expected XML element then reply with a fault ; else reply with a failure.</p>


<p>Here what ODE does, if the status code is one of those listed in the next table (500, 501, etc):</p>

<ol>
	<li>check that the operation has at least one fault in its abstract part, and one fault binding</li>
	<li>check that the Content-type header describes an xml document ('application/xml', 'application/atom+xml' etc)</li>
	<li>check that the body is not empty</li>
</ol>


<p>If one of these checks fails, a failure will be returned.<br/>
If so far everything is fine, the HTTP response body is parsed into an xml document. Then the fault to be thrown is inferred from the qname of the response root element, i.e the fault having a message part matching the root element. This matching process is exactly the same as for a SOAP service. <br/>
If one of these steps fails, a failure is thrown.</p>

<table class='confluenceTable'><tbody>
<tr>
<th class='confluenceTh'> Status-Codes that may trigger a Fault </th>
<th class='confluenceTh'>if the body element matches a fault declaration</th>
</tr>
<tr>
<td class='confluenceTd'>500_INTERNAL_SERVER_ERROR               </td>
<td class='confluenceTd'> 407_PROXY_AUTHENTICATION_REQUIRED       </td>
</tr>
<tr>
<td class='confluenceTd'>501_NOT_IMPLEMENTED                     </td>
<td class='confluenceTd'> 409_CONFLICT                            </td>
</tr>
<tr>
<td class='confluenceTd'>502_BAD_GATEWAY                         </td>
<td class='confluenceTd'> 410_GONE                                </td>
</tr>
<tr>
<td class='confluenceTd'>505_HTTP_VERSION_NOT_SUPPORTED          </td>
<td class='confluenceTd'> 412_PRECONDITION_FAILED                 </td>
</tr>
<tr>
<td class='confluenceTd'>400_BAD_REQUEST                         </td>
<td class='confluenceTd'> 413_REQUEST_TOO_LONG                    </td>
</tr>
<tr>
<td class='confluenceTd'>402_PAYMENT_REQUIRED                    </td>
<td class='confluenceTd'> 414_REQUEST_URI_TOO_LONG                </td>
</tr>
<tr>
<td class='confluenceTd'>403_FORBIDDEN                           </td>
<td class='confluenceTd'> 415_UNSUPPORTED_MEDIA_TYPE              </td>
</tr>
<tr>
<td class='confluenceTd'>404_NOT_FOUND                           </td>
<td class='confluenceTd'> 411_LENGTH_REQUIRED                     </td>
</tr>
<tr>
<td class='confluenceTd'>405_METHOD_NOT_ALLOWED                  </td>
<td class='confluenceTd'> 416_REQUESTED_RANGE_NOT_SATISFIABLE     </td>
</tr>
<tr>
<td class='confluenceTd'>406_NOT_ACCEPTABLE                      </td>
<td class='confluenceTd'> 417_EXPECTATION_FAILED                  </td>
</tr>
</tbody></table>

<p>Note that you can't bind a given fault to a specific status code.</p>

<div class="code"><div class="codeContent">
<pre class="code-xml">&lt;definitions ...
                  <span class="code-keyword">xmlns:odex</span>=<span class="code-quote">"http://www.apache.org/ode/type/extension/http"</span>/&gt;

   <span class="code-tag">&lt;portType name=<span class="code-quote">"BlogPortType"</span>&gt;</span>
        <span class="code-tag">&lt;operation name=<span class="code-quote">"PUT"</span>&gt;</span>
            <span class="code-tag">&lt;input message=<span class="code-quote">"..."</span>/&gt;</span>
            <span class="code-tag">&lt;output message=<span class="code-quote">"..."</span>/&gt;</span>
            <span class="code-tag">&lt;fault name=<span class="code-quote">"UpdateFault"</span> message=<span class="code-quote">"tns:UpdateFault"</span>/&gt;</span>
        <span class="code-tag">&lt;/operation&gt;</span>
    <span class="code-tag">&lt;/portType&gt;</span>

    <span class="code-tag">&lt;binding name=<span class="code-quote">"blogBinding"</span> type=<span class="code-quote">"blogPortType"</span>&gt;</span>
        <span class="code-tag">&lt;operation name=<span class="code-quote">"PUT"</span>&gt;</span>
             <span class="code-tag">&lt;odex:binding verb=<span class="code-quote">"PUT"</span> /&gt;</span>
             <span class="code-tag">&lt;http:operation location=""/&gt;</span>
             <span class="code-tag">&lt;input&gt;</span> ... <span class="code-tag">&lt;/input&gt;</span>
             <span class="code-tag">&lt;output&gt;</span> ...  <span class="code-tag">&lt;/output&gt;</span>
             <span class="code-tag"><span class="code-comment">&lt;!-- fault binding --&gt;</span></span>
             <span class="code-tag">&lt;fault name=<span class="code-quote">"UpdateException"</span>&gt;</span>
                 <span class="code-tag"><span class="code-comment">&lt;!-- name attribute is optional if there is only one fault for this operation --&gt;</span></span>
                 <span class="code-tag"><span class="code-comment">&lt;!-- &lt;odex:fault name=<span class="code-quote">"UpdateFault"</span>/&gt;</span> --&gt;</span>
                 <span class="code-tag">&lt;odex:fault/&gt;</span>
             <span class="code-tag">&lt;/fault&gt;</span>
        <span class="code-tag">&lt;/operation&gt;</span>
    <span class="code-tag">&lt;/binding&gt;</span>
<span class="code-tag">&lt;/definitions&gt;</span></pre>
</div></div></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