This document provides a tutorial on using the Simple Object Access Protocol (SOAP) for communication between components via XML messaging. It introduces an example calendar widget component that can receive event updates and return an HTML-formatted display of events. The tutorial demonstrates making a SOAP request to add a listing to the calendar by specifying the request in an XML envelope and body according to SOAP conventions. It also shows the empty response confirming the listing was added.
The Magic of Integration and the revealing of what's behind the curtain : Microsoft Office and IBM Lotus Notes and Domino integration. Microsoft Office 2007 and Lotus Notes 8 will bring a new level of integration possibilities to the Lotus Notes and Domino world. This session will look at the new functionality in Office 2007, such as the Office Ribbon and OpenXML file formats. We will discuss the impact on Mail Merge, data transfer, and how this will impact your applications and development.
We will also look at the updated Visual Studio Tools for Office 2007. This session will also look at Lotus Notes 8 and it's impact on integration. The session starts at the beginning ... and then dives deep into the integration possiblities.
While this sesison is mostly about the code that makes it work, users and managers will get detailed sample applications to take home and put to use immediately! In the end, this session will help you add value to your applications not possible without the magic of integration. Presented by Rocky Oliver for John Head
JMP205 - Integration of IBM Lotus Notes and Lotus Domino with Microsoft Offic...John Head
Welcome to the real world, where Lotus Notes and Lotus Domino are just part of your corporate toolset. This session will introduce you to integration of Lotus Notes and Domino 8 and 8.5 with Microsoft Office, .NET technologies, OpenOffice.org, and Lotus Symphony. We'll start with the basics and gradually build up to advanced integration. Mail Merge, exporting to a spreadsheet, charting, presentation building, and integration on the Web will all be covered. Advanced topics such as Visual Studio Tools for Office and integration with Lotus Domino Web Services will round out the session.
The Magic of Integration and the revealing of what's behind the curtain : Microsoft Office and IBM Lotus Notes and Domino integration. Microsoft Office 2007 and Lotus Notes 8 will bring a new level of integration possibilities to the Lotus Notes and Domino world. This session will look at the new functionality in Office 2007, such as the Office Ribbon and OpenXML file formats. We will discuss the impact on Mail Merge, data transfer, and how this will impact your applications and development.
We will also look at the updated Visual Studio Tools for Office 2007. This session will also look at Lotus Notes 8 and it's impact on integration. The session starts at the beginning ... and then dives deep into the integration possiblities.
While this sesison is mostly about the code that makes it work, users and managers will get detailed sample applications to take home and put to use immediately! In the end, this session will help you add value to your applications not possible without the magic of integration. Presented by Rocky Oliver for John Head
JMP205 - Integration of IBM Lotus Notes and Lotus Domino with Microsoft Offic...John Head
Welcome to the real world, where Lotus Notes and Lotus Domino are just part of your corporate toolset. This session will introduce you to integration of Lotus Notes and Domino 8 and 8.5 with Microsoft Office, .NET technologies, OpenOffice.org, and Lotus Symphony. We'll start with the basics and gradually build up to advanced integration. Mail Merge, exporting to a spreadsheet, charting, presentation building, and integration on the Web will all be covered. Advanced topics such as Visual Studio Tools for Office and integration with Lotus Domino Web Services will round out the session.
Resolve dependency of dependencies using Inversion of Control and dependency ...Akhil Mittal
In my last two articles I explained how to create a RESTful service using ASP.NET Web API working with Entity Framework and resolving dependencies using Unity Container. In this article I’ll explain how to create a loosely coupled system with Unity Container and MEF(Managed Extensibility Framework) using Inversion of Control. I’ll not be explaining much theory but rather focus more on practical implementations. For the readers who are following this series, they can use their existing solution that they have created till time. For my new readers of this article, I have provided the download link for the previous source code and current source code as well.
For theory and understanding of DI and IOC you can follow the following links: Unity and Inversion of Control(IOC).
JMP106 “Kum Bah Yah” meets “Lets Kick Butt” : The Integration of IBM Lotus No...akassabov
Lotusphere 2010 JumpStart session - JMP106 “Kum Bah Yah” meets “Lets Kick Butt” : The Integration of IBM Lotus Notes and Domino with Microsoft Office, .NET, and IBM Lotus Symphony
En esta presentación revisamos las características de Exchange 2010 Web Services.
Saludos,
Eduardo Castro – Microsoft SQL Server MVP
http://mswindowscr.org
http://comunidadwindows.org
Costa Rica
This presentation is a part of the COP2272C college level course taught at the Florida Polytechnic University located in Lakeland Florida. The purpose of this course is to introduce students to the C++ language and the fundamentals of object orientated programming..
The course is one semester in length and meets for 2 hours twice a week. The Instructor is Dr. Jim Anderson.
The unique value of cultural heritage has long been recognized together with the need for accurate and detailed information in order to preserve and manage cultural heritage material. Any organization whose mission includes promoting access to information is aware of the value of digital collections. For the last few years, digital technology has become very familiar in cultural organizations, providing enhanced access to the content. This paper gives information about Ktisis (http://ktisis.cut.ac.cy), the institutional repository of the Cyprus University of Technology (CUT). Ktisis was developed by the Library and Information Services of CUT. The paper reflects on the technical issues that the Library had to face in the preparation of this project and the strategy that had to be defined in order to tackle them. Such issues, among others, include the file and metadata format, the design and implementation software, etc.
Resolve dependency of dependencies using Inversion of Control and dependency ...Akhil Mittal
In my last two articles I explained how to create a RESTful service using ASP.NET Web API working with Entity Framework and resolving dependencies using Unity Container. In this article I’ll explain how to create a loosely coupled system with Unity Container and MEF(Managed Extensibility Framework) using Inversion of Control. I’ll not be explaining much theory but rather focus more on practical implementations. For the readers who are following this series, they can use their existing solution that they have created till time. For my new readers of this article, I have provided the download link for the previous source code and current source code as well.
For theory and understanding of DI and IOC you can follow the following links: Unity and Inversion of Control(IOC).
JMP106 “Kum Bah Yah” meets “Lets Kick Butt” : The Integration of IBM Lotus No...akassabov
Lotusphere 2010 JumpStart session - JMP106 “Kum Bah Yah” meets “Lets Kick Butt” : The Integration of IBM Lotus Notes and Domino with Microsoft Office, .NET, and IBM Lotus Symphony
En esta presentación revisamos las características de Exchange 2010 Web Services.
Saludos,
Eduardo Castro – Microsoft SQL Server MVP
http://mswindowscr.org
http://comunidadwindows.org
Costa Rica
This presentation is a part of the COP2272C college level course taught at the Florida Polytechnic University located in Lakeland Florida. The purpose of this course is to introduce students to the C++ language and the fundamentals of object orientated programming..
The course is one semester in length and meets for 2 hours twice a week. The Instructor is Dr. Jim Anderson.
The unique value of cultural heritage has long been recognized together with the need for accurate and detailed information in order to preserve and manage cultural heritage material. Any organization whose mission includes promoting access to information is aware of the value of digital collections. For the last few years, digital technology has become very familiar in cultural organizations, providing enhanced access to the content. This paper gives information about Ktisis (http://ktisis.cut.ac.cy), the institutional repository of the Cyprus University of Technology (CUT). Ktisis was developed by the Library and Information Services of CUT. The paper reflects on the technical issues that the Library had to face in the preparation of this project and the strategy that had to be defined in order to tackle them. Such issues, among others, include the file and metadata format, the design and implementation software, etc.
Exchange of data over internet using web service(e.g., soap and rest) in SAS ...Kevin Lee
We are living in the world of abundant information, and the ability to seamlessly exchange information between customers, partners and internal business units is vital for success for any organization. Today, much of the information can be accessed and exchanged between different systems over the internet using web services. Web services allow different systems to exchange data over internet. The paper will show how SAS® can exchange the data with the different software system over internet using web services.
The paper will introduce the basic concepts of web service and its method of communication: SOAP(Simple Object Access protocol) and REST(Representational state transfer). First, the paper will briefly describe SOAP and its structure – HTTP header and SOAP envelop. The paper will show the examples of how SAS programmers send a request to the web service and receive the response from the web service using SOAP in SAS environment. The paper will also show how SAS programmers can create a SOAP request using SOAPUI, the open-source software which allows the users to create SOAP and test the connectivity with the web service. The paper will explain how FILENAME and SOAPWEB function send SOAP request file and receive response file. The paper will also explain the structure of SOAP response file in XML.
The paper will show the structure of REST, and it will instruct how SAS programmers write SAS codes to get the data from other system using REST. The paper will introduce SAS FILEMANE, its url and debug options.
Yet Another Fog Simulator (YAFS) - user guidewisaaco
YAFS (Yet Another Fog Simulator) is a simulator tool based on Python of architectures such as Fog Computing ecosystems for analysis regarding the placement of resources, cost deployment, network design,... IoT environments are the most evident fact of this type of architecture.
JMeter webinar - integration with InfluxDB and GrafanaRTTS
Watch this recorded webinar about real-time monitoring of application performance. See how to integrate Apache JMeter, the open-source leader in performance testing, with InfluxDB, the open-source time-series database, and Grafana, the open-source analytics and visualization application.
In this webinar, we will review the benefits of leveraging InfluxDB and Grafana when executing load tests and demonstrate how these tools are used to visualize performance metrics.
Length: 30 minutes
Session Overview
-------------------------------------------
During this webinar, we will cover the following topics while demonstrating the integrations of JMeter, InfluxDB and Grafana:
- What out-of-the-box solutions are available for real-time monitoring JMeter tests?
- What are the benefits of integrating InfluxDB and Grafana into the load testing stack?
- Which features are provided by Grafana?
- Demonstration of InfluxDB and Grafana using a practice web application
To view the webinar recording, go to:
https://www.rttsweb.com/jmeter-integration-webinar
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...UiPathCommunity
💥 Speed, accuracy, and scaling – discover the superpowers of GenAI in action with UiPath Document Understanding and Communications Mining™:
See how to accelerate model training and optimize model performance with active learning
Learn about the latest enhancements to out-of-the-box document processing – with little to no training required
Get an exclusive demo of the new family of UiPath LLMs – GenAI models specialized for processing different types of documents and messages
This is a hands-on session specifically designed for automation developers and AI enthusiasts seeking to enhance their knowledge in leveraging the latest intelligent document processing capabilities offered by UiPath.
Speakers:
👨🏫 Andras Palfi, Senior Product Manager, UiPath
👩🏫 Lenka Dulovicova, Product Program Manager, UiPath
UiPath Test Automation using UiPath Test Suite series, part 4DianaGray10
Welcome to UiPath Test Automation using UiPath Test Suite series part 4. In this session, we will cover Test Manager overview along with SAP heatmap.
The UiPath Test Manager overview with SAP heatmap webinar offers a concise yet comprehensive exploration of the role of a Test Manager within SAP environments, coupled with the utilization of heatmaps for effective testing strategies.
Participants will gain insights into the responsibilities, challenges, and best practices associated with test management in SAP projects. Additionally, the webinar delves into the significance of heatmaps as a visual aid for identifying testing priorities, areas of risk, and resource allocation within SAP landscapes. Through this session, attendees can expect to enhance their understanding of test management principles while learning practical approaches to optimize testing processes in SAP environments using heatmap visualization techniques
What will you get from this session?
1. Insights into SAP testing best practices
2. Heatmap utilization for testing
3. Optimization of testing processes
4. Demo
Topics covered:
Execution from the test manager
Orchestrator execution result
Defect reporting
SAP heatmap example with demo
Speaker:
Deepak Rai, Automation Practice Lead, Boundaryless Group and UiPath MVP
PHP Frameworks: I want to break free (IPC Berlin 2024)Ralf Eggert
In this presentation, we examine the challenges and limitations of relying too heavily on PHP frameworks in web development. We discuss the history of PHP and its frameworks to understand how this dependence has evolved. The focus will be on providing concrete tips and strategies to reduce reliance on these frameworks, based on real-world examples and practical considerations. The goal is to equip developers with the skills and knowledge to create more flexible and future-proof web applications. We'll explore the importance of maintaining autonomy in a rapidly changing tech landscape and how to make informed decisions in PHP development.
This talk is aimed at encouraging a more independent approach to using PHP frameworks, moving towards a more flexible and future-proof approach to PHP development.
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered QualityInflectra
In this insightful webinar, Inflectra explores how artificial intelligence (AI) is transforming software development and testing. Discover how AI-powered tools are revolutionizing every stage of the software development lifecycle (SDLC), from design and prototyping to testing, deployment, and monitoring.
Learn about:
• The Future of Testing: How AI is shifting testing towards verification, analysis, and higher-level skills, while reducing repetitive tasks.
• Test Automation: How AI-powered test case generation, optimization, and self-healing tests are making testing more efficient and effective.
• Visual Testing: Explore the emerging capabilities of AI in visual testing and how it's set to revolutionize UI verification.
• Inflectra's AI Solutions: See demonstrations of Inflectra's cutting-edge AI tools like the ChatGPT plugin and Azure Open AI platform, designed to streamline your testing process.
Whether you're a developer, tester, or QA professional, this webinar will give you valuable insights into how AI is shaping the future of software delivery.
Search and Society: Reimagining Information Access for Radical FuturesBhaskar Mitra
The field of Information retrieval (IR) is currently undergoing a transformative shift, at least partly due to the emerging applications of generative AI to information access. In this talk, we will deliberate on the sociotechnical implications of generative AI for information access. We will argue that there is both a critical necessity and an exciting opportunity for the IR community to re-center our research agendas on societal needs while dismantling the artificial separation between the work on fairness, accountability, transparency, and ethics in IR and the rest of IR research. Instead of adopting a reactionary strategy of trying to mitigate potential social harms from emerging technologies, the community should aim to proactively set the research agenda for the kinds of systems we should build inspired by diverse explicitly stated sociotechnical imaginaries. The sociotechnical imaginaries that underpin the design and development of information access technologies needs to be explicitly articulated, and we need to develop theories of change in context of these diverse perspectives. Our guiding future imaginaries must be informed by other academic fields, such as democratic theory and critical theory, and should be co-developed with social science scholars, legal scholars, civil rights and social justice activists, and artists, among others.
Connector Corner: Automate dynamic content and events by pushing a buttonDianaGray10
Here is something new! In our next Connector Corner webinar, we will demonstrate how you can use a single workflow to:
Create a campaign using Mailchimp with merge tags/fields
Send an interactive Slack channel message (using buttons)
Have the message received by managers and peers along with a test email for review
But there’s more:
In a second workflow supporting the same use case, you’ll see:
Your campaign sent to target colleagues for approval
If the “Approve” button is clicked, a Jira/Zendesk ticket is created for the marketing design team
But—if the “Reject” button is pushed, colleagues will be alerted via Slack message
Join us to learn more about this new, human-in-the-loop capability, brought to you by Integration Service connectors.
And...
Speakers:
Akshay Agnihotri, Product Manager
Charlie Greenberg, Host
UiPath Test Automation using UiPath Test Suite series, part 3DianaGray10
Welcome to UiPath Test Automation using UiPath Test Suite series part 3. In this session, we will cover desktop automation along with UI automation.
Topics covered:
UI automation Introduction,
UI automation Sample
Desktop automation flow
Pradeep Chinnala, Senior Consultant Automation Developer @WonderBotz and UiPath MVP
Deepak Rai, Automation Practice Lead, Boundaryless Group and UiPath MVP
"Impact of front-end architecture on development cost", Viktor TurskyiFwdays
I have heard many times that architecture is not important for the front-end. Also, many times I have seen how developers implement features on the front-end just following the standard rules for a framework and think that this is enough to successfully launch the project, and then the project fails. How to prevent this and what approach to choose? I have launched dozens of complex projects and during the talk we will analyze which approaches have worked for me and which have not.
Leading Change strategies and insights for effective change management pdf 1.pdf
Xm Lmessagingwith Soap
1. Tutorial: XML messaging with SOAP
Presented by developerWorks, your source for great tutorials
ibm.com/developerWorks
Table of Contents
If you're viewing this document online, you can click any of the topics below to link directly to that section.
1. Tutorial introduction 2
2. Introducing the component 3
3. Adding a listing by SOAP request 6
4. The Add listing response 11
5. Get listings request/response 13
6. SOAP faults and other notes 16
7. Resources and feedback 20
Tutorial: XML messaging with SOAP Page 1
2. Presented by developerWorks, your source for great tutorials ibm.com/developerWorks
Section 1. Tutorial introduction
Who should take this tutorial?
This tutorial gives a hands-on introduction to using the Simple Object Access Protocol
(SOAP) for communication between components. SOAP is quickly emerging as a very
popular protocol for XML messaging. It is relatively simple, and it's designed to work
with HTTP, SMTP and other such native Internet protocols. It also has broad support
from application vendors and Web-based programming projects. If you are working on
dynamic Web applications, Web Services or just distributed programming in general, or
if you are contemplating ways of communicating between components using Web
protocols, this tutorial will be useful.
Navigation
Navigating through the tutorial is easy:
* Use the Next and Previous buttons to move forward and backward through the
tutorial.
* When you're finished with a section, select Next section for the next section.
Within a section, use the Section menu button to see the contents of that section.
You can return to the main menu at any time by clicking the Main menu button.
* If you'd like to tell us what you think, or if you have a question for the author about
the content of the tutorial, use the Feedback button.
Prerequisites
You should be familiar with CORBA IDL, the HTTP protocol and XML (including XML
namespaces). If need be, the previous tutorials in this series provide the necessary
background. See Resources for a link to those tutorials.
Getting help and finding out more
For technical questions about the content of this tutorial, contact the author, Uche
Ogbuji .
Uche Ogbuji is a computer engineer, co-founder and principal consultant at
Fourthought, Inc . He has worked with XML for several years, co-developing 4Suite , a
library of open-source tools for XML development in Python , and 4Suite Server , an
open-source, cross-platform XML data server providing standards-based XML
solutions. He writes articles on XML for IBM developerWorks, LinuxWorld, SunWorld
and XML.com. Mr. Ogbuji is a Nigerian immigrant living in Boulder, CO.
Tutorial: XML messaging with SOAP Page 2
3. Presented by developerWorks, your source for great tutorials ibm.com/developerWorks
Section 2. Introducing the component
HTML calendar
We'll examine an example component for this tutorial: an event calendar widget.
The calendar widget can receive event updates, and return an HTML-formatted
display of events for any given month. This might be used in a company intranet where
you want different people to be able to submit event listings using a form, and where
you want to have the calendar of upcoming events displayed dynamically on the
intranet.
This very simple example will illustrate making requests to a persistent component with
XML messaging.
The calendar component IDL
We specify the interface for accessing the calendar component using CORBA IDL.
Remember that CORBA IDL is a handy means of specifying formal component APIs
even if the communication with the component does not use CORBA directly.
The outline of the IDL is as follows:
module Calendar {
struct Date {
//...
};
exception InvalidDate {
//...
};
interface CalendarWidget {
//...
};
};
Tutorial: XML messaging with SOAP Page 3
4. Presented by developerWorks, your source for great tutorials ibm.com/developerWorks
The date structure
We'll be using a date structure in the calendar widget communications.
struct Date {
unsigned short day;
unsigned short month;
unsigned short year;
};
There are many ways to structure a date, including ISO-8601. I chose to break it all up
in this way to illustrate structure types in XML messaging.
The InvalidDate exception
There is always the possibility that a user sends an invalid date such as February 30,
2001. In this case the server has to signal an error, which is represented by the
InvalidDate exception.
exception InvalidDate {
string field;
};
The field member indicates which of the date fields was wrong. It is either quot;monthquot;,
quot;datequot; or quot;yearquot;. Note that in IDL there is a better way to express such a collection of
named possibilities: an enumeration. We'll stick to a string in this case for simplicity.
Adding a listing
The first method of the CalendarWidget interface allows us to add an event for
listing.
void addListing(in Date when, in string what)
raises (InvalidDate);
The when argument represents the date on which the event we're listing occurs. The
what argument represents an arbitrary string describing the event. If an invalid date is
provided, an appropriate exception will be raised.
Tutorial: XML messaging with SOAP Page 4
5. Presented by developerWorks, your source for great tutorials ibm.com/developerWorks
Get the listings
The second method retrieves the listing as an HTML string.
string getListings(in date monthOf)
raises (InvalidDate);
The monthOf argument specifies the month and year for which we want to see the
listings. The day member of this structure is ignored by the widget. The return value is
an HTML table with the listings.
The entire IDL
I've deliberately kept the interface simple.
module Calendar {
struct Date {
unsigned short day;
unsigned short month;
unsigned short year;
};
exception InvalidDate {
string field;
};
interface CalendarWidget {
void addListing(in Date when, in string what)
raises (InvalidDate);
string getListings(in Date monthOf)
raises (InvalidDate);
};
};
Tutorial: XML messaging with SOAP Page 5
6. Presented by developerWorks, your source for great tutorials ibm.com/developerWorks
Section 3. Adding a listing by SOAP request
What is SOAP anyway?
We'll be implementing the interface defined in the last section as XML messages.
In the last tutorial in this series we looked at generic XML messaging. There have been
many initiatives to provide a standard mechanism for XML messaging. One of these is
Simple Object Access protocol (SOAP).
SOAP is a method of accessing remote objects by sending XML messages, which
provides platform and language independence. It works over various low-level
communications protocols, but the most common is HTTP, as covered in an earlier
tutorial in this series.
The Resources section points to some other material on SOAP, but for purpose of this
hands-on tutorial, I'll present SOAP by brief example.
The HTTP request header
The first part of the SOAP HTTP request header is familiar territory.
POST /calendar-request HTTP/1.1
Host: uche.ogbuji.net
Content-Type: text/xml; charset=quot;utf-8quot;
Content-Length: 507
The SOAPAction header
The only addition to the HTTP header for SOAP is the SOAPAction.
SOAPAction: quot;http://uche.ogbuji.net/soap-examplequot;
This header is intended for firewalls and other network infrastructure that are aware of
SOAP, especially for filtering and routing purposes. The value is a URI which identifies
the action requested by this message.
Note that there hasn't been a great deal of work on specifying such issues as security,
firewall processing and routing of SOAP requests. Unfortunately, SOAP's popularity
has to some extent outrun the development of its infrastructure, but these issues are
currently being discussed in layers above SOAP.
Tutorial: XML messaging with SOAP Page 6
7. Presented by developerWorks, your source for great tutorials ibm.com/developerWorks
The SOAP envelope
The HTTP request body contains the SOAP request itself. This is wrapped in a SOAP
envelope, which contains metadata important for understanding the request. The
structure is as follows:
<SOAP-ENV:Envelope
xmlns:SOAP-ENV=quot;http://schemas.xmlsoap.org/soap/envelope/quot;
SOAP-ENV:encodingStyle=quot;http://schemas.xmlsoap.org/soap/encoding/quot;
>
<!-- SOAP body goes here -->
</SOAP-ENV:Envelope>
The SOAP envelope is in the XML namespace prescribed by the specification:
http://schemas.xmlsoap.org/soap/envelope/.
The envelope must specify how to interpret the SOAP body. This is accomplished with
the SOAP-ENV:encodingStyle attribute. The value is a URI indicating a
specification for the structure of the body.
SOAP encodings
The envelope specified the encoding for the body as
http://schemas.xmlsoap.org/soap/encoding/. This is a method for
structuring the request that is suggested within the SOAP spec itself, known as the
SOAP serialization.
It's worth noting that one of the biggest technical complaints against SOAP is that it
mixes a specification for message transport with a specification for message structure.
You needn't feel constrained to use the SOAP serialization encoding style.
Other possible encoding styles include Web Distributed Data Exchange (WDDX), XML
Remote Procedure Call (XML-RPC), Resource Description Framework (RDF), or just a
custom XML structure. The latter is probably good enough if you're not worried about
whether an attribute value of quot;1quot; is supposed to be interpreted as a string or an integer,
for example. See Resources for information on these encoding styles.
Tutorial: XML messaging with SOAP Page 7
8. Presented by developerWorks, your source for great tutorials ibm.com/developerWorks
The SOAP body
There is one more layer of SOAP element enclosing the actual elements of the
specialized event calendar requests.
<SOAP-ENV:Body>
<!-- User request code here -->
</SOAP-ENV:Body>
The SOAP body clearly marks the separation of SOAP metadata and data.
SOAP data versus metadata
SOAP is like a set of Russian dolls in its layers of encapsulation. There are the HTTP
headers, then the SOAP envelope, and then the SOAP body. Each layer provides
metadata for the immediately enclosed layer.
Metadata is information that helps an application make sense of the important data
being transported. For instance, the HTTP header specifies the character encoding as
metadata for the HTTP body. This makes sure that the application properly translates
the stream of bits into a series of characters.
The outermost portion of the HTTP body is the SOAP envelope. This contains the
SOAP-ENV:encodingStyle attribute which specifies the structure of the actual
request. This metadata tells the application how to make sense of the XML elements
and attributes within the body, which make up the actual request.
SOAP metadata examples
There are several examples of metadata such as you might find in a SOAP envelope.
They would typically be implemented as separate elements within a separate XML
namespace outside the SOAP envelope but within the body. Some of these are still the
subject of ongoing standardization.
* Transactions: headers that bind multiple SOAP requests (and other sorts of
actions) together to ensure consistent results even in the case of errors.
* Authentication: headers to present a user's authorization to make the given
request.
* Tracing: headers to mark each request distinctly for auditing or troubleshooting
purposes.
* Versioning: headers to indicate any application-specific versions related to the
request.
Tutorial: XML messaging with SOAP Page 8
9. Presented by developerWorks, your source for great tutorials ibm.com/developerWorks
The request element
But back to our actual SOAP example.
The top-level element within the body is in a namespace particular to the calendar
widget.
<c:AddListing xmlns:c=quot;http://uche.ogbuji.net/soap-example/calendarquot;>
<!-- Request arguments go here ->
</c:AddListing>
The element name indicates which particular request we're making of the calendar
widget: adding a listing.
The request arguments, part 1
You will remember from the IDL that the first request argument is a date structure.
<c:when>
<c:Date>
<day>21</day><month>6</month><year>2001</year>
</c:Date>
</c:when>
The when element gives the argument name. The Date element is the structure type.
The Date structure contains three elements representing the members of the
structure. Remember that the IDL specified these as type short.
Note that the SOAP encoding doesn't require the structure member elements to be in a
namespace.
The request arguments, part 2
The second argument is a string describing the listing to be added.
<c:what>A total eclipse will be visible across Central Africa.</c:what>
Notice how much simpler this argument is to present than when, the date argument.
Such single values are known as simple types in the SOAP encoding. The date
argument is what is known as a compound type or, more specifically a struct.
Tutorial: XML messaging with SOAP Page 9
10. Presented by developerWorks, your source for great tutorials ibm.com/developerWorks
The entire SOAP request
As you can see, SOAP is pretty straightforward.
POST /calendar-request HTTP/1.1
Host: uche.ogbuji.net
Content-Type: text/plain; charset=quot;utf-8quot;
Content-Length: 507
<SOAP-ENV:Envelope
xmlns:SOAP-ENV=quot;http://schemas.xmlsoap.org/soap/envelope/quot;
SOAP-ENV:encodingStyle=quot;http://schemas.xmlsoap.org/soap/encoding/quot;
>
<SOAP-ENV:Body>
<c:AddListing xmlns:c=quot;http://uche.ogbuji.net/soap-example/calendarquot;>
<c:when>
<c:Date>
<day>21</day><month>6</month><year>2001</year>
</c:Date>
</c:when>
<c:what>A total eclipse will be visible across Central Africa.</c:what>
</c:AddListing>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Tutorial: XML messaging with SOAP Page 10
11. Presented by developerWorks, your source for great tutorials ibm.com/developerWorks
Section 4. The Add listing response
HTTP Response header
There are no special SOAP headers for the response in our case.
HTTP/1.1 200 OK
Server: PythonSimpleHTTP/2.0
Date: Tue, 28 Nov 2000 04:23:03 GMT
Content-type: text/xml; charset=quot;utf-8quot;
Content-length: 296
SOAP envelope and body
The HTTP response body also has a SOAP envelope and body at the top level.
<SOAP-ENV:Envelope
xmlns:SOAP-ENV=quot;http://schemas.xmlsoap.org/soap/envelope/quot;
SOAP-ENV:encodingStyle=quot;http://schemas.xmlsoap.org/soap/encoding/quot;
>
<SOAP-ENV:Body>
<!-- response details here -->
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
The return result
In the IDL the return value for the request is void, meaning, in effect, no response.
We'll represent this with an empty response element.
<c:AddListingResponse xmlns:c=quot;http://uche.ogbuji.net/soap-example/calendarquot;/>
Note that the response element name is merely the request element with quot;Responsequot;
appended. This is a useful convention.
Tutorial: XML messaging with SOAP Page 11
12. Presented by developerWorks, your source for great tutorials ibm.com/developerWorks
The entire response
Even simpler than the request.
HTTP/1.1 200 OK
Server: PythonSimpleHTTP/2.0
Date: Tue, 28 Nov 2000 04:23:03 GMT
Content-type: text/xml; charset=quot;utf-8quot;
Content-length: 296
<SOAP-ENV:Envelope
xmlns:SOAP-ENV=quot;http://schemas.xmlsoap.org/soap/envelope/quot;
SOAP-ENV:encodingStyle=quot;http://schemas.xmlsoap.org/soap/encoding/quot;
>
<SOAP-ENV:Body>
<c:AddListingResponse xmlns:c=quot;http://uche.ogbuji.net/soap-example/calendarquot;/>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Tutorial: XML messaging with SOAP Page 12
13. Presented by developerWorks, your source for great tutorials ibm.com/developerWorks
Section 5. Get listings request/response
The request body
The HTTP request headers and SOAP envelopes for the getListings request are
just as in the addListing request. The only difference is in the body.
<c:GetListings xmlns:c=quot;http://uche.ogbuji.net/soap-example/calendarquot;>
<c:monthOf>
<c:Date>
<day/><month>6</month><year>2001</year>
</c:Date>
</c:monthOf>
</c:GetListings>
Since the day field is ignored by the widget, we just use an empty element. The above
encodes a request for the event listings for June 2001.
The entire request
Here is the entire HTTP request
POST /calendar-request HTTP/1.1
Host: uche.ogbuji.net
Content-Type: text/plain; charset=quot;utf-8quot;
Content-Length: 424
<SOAP-ENV:Envelope
xmlns:SOAP-ENV=quot;http://schemas.xmlsoap.org/soap/envelope/quot;
SOAP-ENV:encodingStyle=quot;http://schemas.xmlsoap.org/soap/encoding/quot;
>
<SOAP-ENV:Body>
<c:GetListings xmlns:c=quot;http://uche.ogbuji.net/soap-example/calendarquot;>
<c:when>
<c:Date>
<day/><month>6</month><year>2001</year>
</c:Date>
</c:when>
</c:GetListings>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Tutorial: XML messaging with SOAP Page 13
14. Presented by developerWorks, your source for great tutorials ibm.com/developerWorks
The response
Again the response headers and SOAP envelopes are similar to the addListing
request, but the body is quite different.
The IDL specifies a string return value, and the prose description indicates that this
value is a chunk of HTML representing a table of the calendar listings.
The IDL return value is represented by a value in the body of the SOAP response.
Since the value in this case is HTML, and SOAP is XML, we have to be careful of
confusing the HTML tags with XML structure. In general, this is something to be
mindful of when sending strings containing HTML or XML in SOAP messages.
Response body
The CDATA construct is special XML markup that allows us to encode tag names and
other special XML characters without confusing the XML processor. This is one way to
encode HTML and XML that must be sent as arguments to SOAP requests or
responses. Other approaches include Base64 encoding.
<c:GetListingsResponse xmlns:c=quot;http://uche.ogbuji.net/soap-example/calendarquot;>
<![CDATA[
<TABLE>
<TR>
<TD>2001-06-21</TD><TD>A total eclipse will be visible across Central Africa.</TD>
</TR>
</TABLE>
]]>
</c:GetListingsResponse>
The HTML returned in the response is a simple table with one row for each listing that
has been added.
Tutorial: XML messaging with SOAP Page 14
15. Presented by developerWorks, your source for great tutorials ibm.com/developerWorks
The full response
Notice how the HTML is embedded in the XML.
HTTP/1.1 200 OK
Server: PythonSimpleHTTP/2.0
Date: Tue, 28 Nov 2000 04:23:03 GMT
Content-type: text/xml; charset=quot;utf-8quot;
Content-length: 473
<SOAP-ENV:Envelope
xmlns:SOAP-ENV=quot;http://schemas.xmlsoap.org/soap/envelope/quot;
SOAP-ENV:encodingStyle=quot;http://schemas.xmlsoap.org/soap/encoding/quot;
>
<SOAP-ENV:Body>
<c:GetListingsResponse xmlns:c=quot;http://uche.ogbuji.net/soap-example/calendarquot;>
<![CDATA[
<TABLE>
<TR>
<TD>2001-06-21</TD><TD>A total eclipse will be visible across Central Africa.</TD>
</TR>
</TABLE>
]]>
</c:GetListingsResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Tutorial: XML messaging with SOAP Page 15
16. Presented by developerWorks, your source for great tutorials ibm.com/developerWorks
Section 6. SOAP faults and other notes
Error handling
In our IDL we specified the invalidDate exception in case, for example, the client
passes a date of year 2002, month 14, day 6. In SOAP, exceptions are signalled by a
special SOAP message known as a fault.
A SOAP fault is considered a server-side error by the HTTP protocol, so its HTTP
header is as follows:
HTTP/1.1 500 Internal Server Error
Content-Type: text/xml; charset=quot;utf-8quot;
Content-Length: 489
SOAP envelope
No surprises in the SOAP envelope again.
<SOAP-ENV:Envelope
xmlns:SOAP-ENV=quot;http://schemas.xmlsoap.org/soap/envelope/quot;>
<SOAP-ENV:Body>
<!-- fault data here -->
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
The SOAP fault element
The outer element of every SOAP fault body is a fixed element.
<SOAP-ENV:Fault>
<!-- general fault details here -->
</SOAP-ENV:Fault>
A mandatory field in a SOAP fault is the faultcode element.
<faultcode>SOAP-ENV:Client</faultcode>
The SOAP-ENV:Client code indicates that the fault is a result of the request
contents.
Tutorial: XML messaging with SOAP Page 16
17. Presented by developerWorks, your source for great tutorials ibm.com/developerWorks
SOAP-specific fault elements
Another mandatory field is the faultstring element.
<faultstring>Client Error</faultstring>
faultstring is a human-readable statement of the cause of error.
<detail>
<!-- application-specific details here -->
</detail>
Any information specific to the application is provided in the detail field.
Application-specific details
We encode the exception in an element that is also in the Calendar namespace (which
is analogous to the quot;Calendarquot; module in the IDL).
<c:invalidDate xmlns:c=quot;http://uche.ogbuji.net/soap-example/calendarquot;>
<!-- Representation of the invalidDate exception -->
</c:invalidDate>
There is only one data member of the invalidDate, which is rendered in XML in a
straightforward manner.
<c:field>month</c:field>
Tutorial: XML messaging with SOAP Page 17
18. Presented by developerWorks, your source for great tutorials ibm.com/developerWorks
A full SOAP fault
SOAP faults have some standard fields and some application-specific fields.
HTTP/1.1 500 Internal Server Error
Content-Type: text/xml; charset=quot;utf-8quot;
Content-Length: 489
<SOAP-ENV:Envelope
xmlns:SOAP-ENV=quot;http://schemas.xmlsoap.org/soap/envelope/quot;>
<SOAP-ENV:Body>
<SOAP-ENV:Fault>
<faultcode>SOAP-ENV:Client</faultcode>
<faultstring>Client Error</faultstring>
<detail>
<c:invalidDate xmlns:c=quot;http://uche.ogbuji.net/soap-example/calendarquot;>
<c:field>month</c:field>
</c:invalidDate>
</detail>
</SOAP-ENV:Fault>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Forcing consideration of the headers
We have discussed various SOAP metadata headers. SOAP specifies an optional
attribute, mustUnderstand, which indicates that if a SOAP server does not
understand the header in question, it must signal a fault and abort the request.
This allows the requestor to ensure that the server follows requirements encoded in the
headers.
Relationship of SOAP to other protocols
In our example, we use SOAP send within an HTTP body, but SOAP messages can
also be sent using other transports such as SMTP (Internet e-mail) or even Jabber.
In general, SOAP is considered a transport protocol for XML messaging, but it in turn
relies on other transport protocols (such as HTTP), just as those protocols in turn rely
on others (such as TCP/IP).
Tutorial: XML messaging with SOAP Page 18
19. Presented by developerWorks, your source for great tutorials ibm.com/developerWorks
Structuring SOAP bodies
It is worth noting again that although we have been using the SOAP encoding in this
example, we are free to use other encoding styles, such as WDDX and XML-RPC.
The SOAP serialization and the messaging protocol should be considered separately,
even though they are bundled into the same specification.
The SOAP encoding makes heavy reference to XML Schemas as a suggested way to
define the structure of the message bodies. I use IDL instead because it is more
established and more widely known. In fact, XML Schemas are not even yet a
complete specification.
Opaque SOAP
Some implementations of SOAP do not focus on the XML structure, but allow users to
make SOAP requests transparently from the language of their choice.
In other words, rather than explicitly constructing the XML as we have examined here,
they allow the programmer to simply call:
calendar_widget.addListing(when, where)
This call gets automatically translated to a SOAP request to a remote object. Note that
such implementations often use the SOAP encoding behind the scenes, so they might
be unsuitable if you need to interoperate with a system that uses a different encoding.
Apache SOAP and Python's soaplib are examples of this approach.
Tutorial: XML messaging with SOAP Page 19
20. Presented by developerWorks, your source for great tutorials ibm.com/developerWorks
Section 7. Resources and feedback
Try it yourself
There is sample code for download which implements the SOAP-based calendar
widget described in this tutorial.
You can examine the code for details of how to implement the SOAP messaging in
Python. It uses all the techniques we have already introduced in this tutorial series.
Also, you can run the code to see the messaging in action. See the enclosed README
for details.
Resources
* The SOAP 1.1 specification
* The xml.org Cover Pages on SOAP
* Developmentor's SOAP pages, including a SOAP FAQ
* soaplib: a friendly SOAP library for Python
* Apache SOAP: a Java library
* SOAP news and resources
* More SOAP information and news
* A log of Web pages related to SOAP
* Home page for XML Remote Procedure Call (XML-RPC)
Giving feedback and finding out more
For technical questions about the content of this tutorial, contact the author, Uche
Ogbuji .
Uche Ogbuji is a computer engineer, co-founder and principal consultant at
Fourthought, Inc . He has worked with XML for several years, co-developing 4Suite , a
library of open-source tools for XML development in Python , and 4Suite Server , an
open-source, cross-platform XML data server providing standards-based XML
solutions. He writes articles on XML for IBM developerWorks, LinuxWorld, SunWorld,
and XML.com. Mr. Ogbuji is a Nigerian immigrant living in Boulder, CO.
Colophon
This tutorial was written entirely in XML, using the developerWorks Toot-O-Matic tutorial
generator. The Toot-O-Matic tool is a short Java program that uses XSLT stylesheets to
convert the XML source into a number of HTML pages, a zip file, JPEG heading graphics,
and PDF files. Our ability to generate multiple text and binary formats from a single source
Tutorial: XML messaging with SOAP Page 20
21. Presented by developerWorks, your source for great tutorials ibm.com/developerWorks
file illustrates the power and flexibility of XML.
Tutorial: XML messaging with SOAP Page 21