Web Services Implementation Guide Sample chapter from:
Web Services Implementation Guide

Brian Travis and Mae Ozkan

About the book:
Getting value from stuff you don't own is a compelling idea. Just think, someone else has created something that has value, and has made it available to you. You can now leverage its value in ways that makes all parties richer. That's the promise of web services. You need to know about web services. The advent of standards-based web services marks a new era of system development. First mainframe, then client-server, the Web, now web services makes it possible to leverage every legacy system of the past and do so much more with your information assets.

This book will show you what a web service is, and how you can align your systems to take advantage of this new concept in system integration. This book covers the concepts and technologies of web services.

Web Services Implementation Guide is a multiple-volume set. Volume 1 shows you how to align your thinking and systems to get the most of web services. Volume 2 is a technical treatise for developers. Volume 3 discusses real-life implementations of web services solutions.

In this chapter:
Sample chapter published here with kind permission of Architag International Corporation. Copyright © 2002 Architag Press

Chapter 7 Simple Object Access Protocol (SOAP)

The Simple Object Access Protocol is a standard that has provided a simple solution to a complex problem. The problem is that integrating systems is difficult. That's not really news, but it is a fact that many I.T. professionals are well aware of. The main area of incompatibility arises because information and objects are distributed all over the place.

The SOAP standard provides a set of tags and an environment that allows systems to request information from other systems by sending self-describing messages over any network.

SOAP is really just an envelope, but its simplicity means that it is easy to use and very flexible. In this chapter, you will learn about this most important standard for web services.

Integrating systems are difficult. First, there are systems running on different physical machines. Getting information from one to another is not as easy as getting two programs on one machine talking to each other. There are networks between any two machines, and these networks complicate the process.

Next, these different machines might be running different operating systems. This could entail just different versions of the same operating system (Linux vs. AIX or Windows 98 vs Windows XP), or they could be entirely different platforms (Sun Solaris Unix vs. Windows 2000).

Finally, there are differences in computer languages and the interfaces they expose. One machine might be using Java programs exposed through CORBA, another machine might be running COM objects written in Visual Basic.

Integrating all of these is difficult, even if there was only a single variable. Adding variables increases the complexity logarithmically. Getting a CORBA object running on a Unix box talking to a COM object running on Windows 2000 Server is very difficult to do because of these problems. Objects are tightly coupled to their programs because of the way object architecture has developed over the past years.

Then there is the problem of firewalls. Getting method calls through firewalls is quite a chore. Not just technically, but also politically. Firewalls are protected by people called "firewall administrators". Have you ever asked a firewall administrator to open a special port for you? "Mr. Firewall Administrator, can you please open port 1234?" And what was the answer? I'm not sure you even got that far. Here is a more typical exchange: "Mr. Firewall Administrator, will you please...", at which time, he cuts you off, and says "No!". God bless these people, for they have a very difficult job in maintaining security while still allowing commerce to happen.

Another issue, after you have opened your firewall, is the problem that platform specific "standards" are not compatible. For example, your CORBA objects work great as long as everyone is speaking this "standard" interface language. But try to get a COM object or some other proprietary object talking to your CORBA objects and you will have problems.

There are gateways that allow you to access different objects across heterogeneous environments, but these are pretty flaky and bring their own problems. The SOAP committee addressed these problems and came up with a vision that they should use XML packets to allow disparate systems to communicate. Because SOAP is based on XML, then any operating system or program that can read an XML document can be accessed.

Let's see how SOAP works. First, we have an object, as illustrated in Figure 72, An Object.

This object is not necessarily a modern programming construction. It can be anything that provides some service to an implementation. In fact, when we think of this object, we think of "the four ‘C's": COM, CORBA, COBOL, or a closet full of monkeys. This last one might seem a bit flippant, but our point is that the requestor does not care anything about the implementation details of the server giving the request. If the server has some unique implementation that can get value from a closet full of monkeys, the client should be no wiser.

This object, program, or collection of primates does its processing the same way it has been processing things since it was born. It interacts with its environment, opens databases, interrogates other objects, etc. Our goal will be to get this object to give us information with as little disruption (preferably none) as possible. The reason for the fear of disruption is that this object might be providing for us a valuable service in other areas of the organization.

An Object

Let's say this "object" is a COBOL program that has been running in our enterprise for decades. There is still a ton of data that is maintained by old COBOL programs running on various mainframe computers around the world. The entire worldwide airline reservations system, for example, is maintained by such programs. There are production-control and reporting systems, inventory tracking systems, and lots of other private systems running COBOL. One of the main benefits of COBOL is that it has been around so long that COBOL programs have been optimized and fixed for years, and much of it is reliable, scaleable, and bug-free.

If we want to provide the output of this COBOL program to new processes, we need to teach it some new tricks. This would involve modifications to the code, which might be difficult1. Or we could re-write it. This is not usually a viable alternative. When is the last time a programmer told his boss that he has some spare time and would like to re-write that old COBOL program in C?

Another problem with modifying the existing code is that we would need to go through thorough testing, which might upset our business operations. Worse, any changes we make to the object might break other parts of the object that already work.

So how can we use SOAP to solve this problem? Let's put some network between the object and us, then create a thing called a "SOAP client". A SOAP client is called a client, not because it is used by some end-user human, but just because it creates a thing called a "SOAP request document" In fact, most SOAP clients are applications or servers.

This SOAP request document is sent over the network, usually over HTTP, to a piece of code called a "SOAP server". This is illustrated in Figure 73, SOAP Request.

SOAP Request

The SOAP server's main job is to act as a translator for the request. Consider a human translator. That person will listen to one language, say German, and speak another language, for example French, then will listen to the response in French and speak it in German. In this way, the translator allows two people who do not understand a common language to communicate with each other.

The SOAP server is like that. It listens to a language "spoken" by the SOAP client, and translates that into some language that is understood by object. It is up to each implementation to determine what each language is. For example, if the SOAP client wants to get the weather forecast, it will send a request to the SOAP server. If the Object is a COM object, the SOAP server will instantiate the object and invoke the appropriate method to get the weather.

If the object is a COBOL program, it is not quite so straightforward. COBOL programs running on mainframe computers usually interact with the outside world using a character-based terminal called a 3270. This is a terminal that weighs about as much as your car. Come to think of it, when they were made, they probably cost more than your car. These terminals have a keyboard attached to a screen that displayed green text in a 25 by 80-character grid2. On the right hand side of the keyboard is a key marked "Enter". When a user fills in fields on the screen and presses the Enter key, the terminal sends a screenful of information to the mainframe. The terminal interface on the mainframe parses out the screen looking for information that it needs, and sends the appropriate characters to the program.

The program does its thing, and returns a screenful of data back to the terminal, where the human can make note of the information necessary. As we have said before, the program that reads this information is doing its job just fine. If we were to open that program in order to teach it how to interface with SOAP, it would be quite a system development task. We might break things that were working.

Instead, perhaps we can teach the SOAP server to pretend it is a 3270 terminal. That way, the COBOL program will not need to know anything new, and the SOAP server will get what it needs. There are products on the market that emulate mainframe terminals to get the interaction we desire.

An example of a SOAP request document is shown in Figure 74, SOAP Request Document.

SOAP Request Document

The first thing we notice about this document is the first line. This document is an HTTP POST package. This is the type of document that your Web browser creates whenever you hit the "Submit" button on an HTML form. If you have seen HTML code, you might have seen the FORM element: <FORM METHOD="POST"... >. This is the same POST that is in the example above.

The POST method is nice, because it allows an arbitrary structure of data to be sent over the existing HTTP infrastructure. When your Web browser creates one of these packages, the body consists of a collection of information from the form, consisting of each field's name, an equal sign (=), and the value you typed in the field. Instead of shipping that information, SOAP has re-tasked the HTTP POST document to ship an arbitrary XML document. That XML document is subject to all of the well-formedness constraints of any XML document.

Why use HTTP? There are several reasons. The most important is that the HTTP infrastructure already exists. There are Web servers in every organization already, and HTTP has already proven to work well across networks. The second reason is that it uses the standard HTTP port of any TCP connection, port 80. This port is wide open in most organizations, because organizations want their employees to be able to access resources on the Web.

Put these together, and you get a compelling reason why SOAP should use HTTP.

This document is sent from the SOAP client to the SOAP server, where the SOAP server must parse it out and find the appropriate elements (listen to German). Then, the SOAP server must tell the object, in its language, what to do (speak French). When the object speaks back (listen to French), the SOAP server must translate that and return the results to the SOAP client (speak German).

SOAP Response Document

If the object is a COM object that has been instantiated and a method invoked, it might set a series of properties, which the SOAP server can interrogate. If the object is a COBOL program, as described above, it might return a screenful of data to our terminal emulator object. When this screenful of data comes back, the SOAP server must parse the screen much like a human does, and find the data that is desired.

However it gets the information from the object, it is the SOAP server's job, then, to encapsulate this information into a thing called a SOAP response document and send it back to the SOAP client, as shown in Figure 75, SOAP Response.

A SOAP response document is shown in Figure 76, SOAP Response Document.

SOAP Response Document

Notice that the SOAP response document is also an HTTP document. In this case, it is the same type of document that anyWeb server would send to your browser. The first line indicates the version of HTTP (SOAP only works with HTTP 1.1 and above), followed by the success code. In this case, 200 is OK. This is the same code that yourWeb browser gets. For example, 404 is file not found, 500 indicates a server error, etc. The HTTP body contains the XML document that the SOAP server created in response to the information provided by the object.

Now it is the job of the SOAP client to do something useful with the information in the XML response document.

That's about it for SOAP. This is a very simple example, but SOAP is a pretty simple protocol. It's a simple, object-access protocol.

Message Transport

Let's forget about doing remote procedure calls using SOAP for a minute, and look at another opportunity for automation.

Businesses need to get messages between themselves and their trading partners (customers and vendors) every day. Over the past two hundred years or so, an infrastructure has been built to handle such messages. Let's take a look at it.

Envelope and Paper

If we want to send an invoice to you, all we need to do is render the appropriate information on a piece of paper, fold it, and put it in an envelope. This complex process is illustrated in Figure 77, Envelope and Paper, if you have never seen it before.

This process looks pretty simple, but let's take a look at what is actually happening. An envelope is a general-purpose carrier for documents. It can be used as a somewhat secure transport device for moving physical objects. An envelope does this because there are two distinct, special-purpose areas.

First, there is the inside of the envelope. This is where your payload goes. This payload can be an invoice, as shown above. Or it can be a picture, a love letter, or anything else that falls within certain size and weight guidelines.

Second, there is the front of the envelope, shown in Figure 78, Paper Envelope.

Paper Envelope

While the inside of an envelope is a general-purpose and largely free-form place, the front of the envelope must adhere to a specific structure in order for the envelope to get where it needs to go. It must have the destination address in the center and the return address in the upper left hand corner. A sufficient amount of postage is required, based on the origin and destination locations. If a postal worker encounters an envelope that does not have the required pieces, the envelope is likely to end up in the "undeliverable" bin, or marked "return to sender".

In order for us to do business, all you need to say is "Send an invoice to our address", and we know how to make that happen.

Imagine, now, if such a system did not exist. What if every time we wanted to do business, we had to invent paper.We also would need to create this envelope in a way that was acceptable to both parties and the transport intermediary. Speaking of the transport, we would also need to set up a worldwide postal service to get this document from one location to another.

Finally, we would need to specify the entire transaction in sufficient detail for all parties to do their part.

Fortunately, we do not need to do all of that, because standards have been developed over the years in various areas:
The entire system leverages existing technology. The postal service did not invent roads or trucks. Rather, it uses those innovations in order to achieve its goals.

Now, let's replace paper with some electronic form. The 200-year history of the worldwide postal service is no good to us.We cannot leverage the standards and infrastructure that exists, because they are based on the physical world, and our problem is digital.

So, we need to do everything by hand. We need to specify the transport protocol.

Are we going to use something that exists, like HTTP or SMTP, or will we come up with our own protocol?We need to indicate the header, body, and trailer information to make sure our packages get to where they need to go over that transport protocol.

We need to write serializers that create the electronic documents and parsers that decompose them in to the information we need for our downstream processes.

Some efforts have been made to standardize these things in the electronic realm. Telephone call centers have been set up to allow an organization to order by phone from person to person. These work, because they can replace paper, but they are very expensive to set up and maintain, because they involve humans. Also, humans make mistakes and are slow.

The fax machine provides a great way to get paper from one place to the other, but that's really all it is. It does not replace paper with a more useful form, it just gets it there faster.

The Electronic Data Interchange standard (EDI) is useful as a paper replacement for many common business documents, but it is expensive and cumbersome to install and maintain, and still needs human interaction when something goes wrong3.

The best electronic solutions are based on those that have been proven to work well in the physical realm. Telephones work by allowing people to talk and listen as they always have, except that they are now farther apart. Faxes are probably the most successful computer equipment made, because they do not require complicated setup and maintenance. Just put the paper in the machine, key in a number, and paper comes out somewhere else in the world.

To automate the paper and envelope, then, the best place to start looking for ideas is the paper and envelope itself. What makes it so successful? What are the components that allow universal delivery? How can we create a transport and routing system as efficient as the one used to transport envelope-encrusted paper around the world?

We need some kind of standardized electronic envelope. This envelope should be something that all parties agree on, because all parties will be using it. It must be extensible because it will be used in a variety of ways for a variety of purposes. It must be easy to transport, because we do not want the transport protocol to get in the way of the message. And, it should leverage existing infrastructure, because creating a new infrastructure would be very expensive.

Let's use SOAP! Even though SOAP was designed for a slightly different purpose, it exists, and can be used to transport messages just as easily as it makes remote procedure calls.

The Two Personalities of SOAP

As we have already seen, SOAP provides a simple methodology for getting some procedure call package over HTTP to a destination. SOAP was originally designed to provide this functionality, and its name reflects that.

However, we think that SOAP has two distinct personalities. Both of these personalities use the exact same specification and the same methodology for getting a payload from one location to another. However, you should understand these two personalities of SOAP, because how you handle the SOAP documents may vary widely.

The two personalities are:
Using SOAP for RPC, the SOAP envelope encapsulates a request in a standard way that is interpreted the same by all parties. Figure 79, SOAP for RPC shows the SOAP for RPC personality.


Using SOAP for RPC, the payload inside of the SOAP document is usually short, and the response is immediate. This is called "synchronous". The suggestion is that "I need a piece of information from you now, and I will wait until you give it to me".

SOAP for messaging, on the other hand, emulates the physical envelope-and-paper metaphor described above. A SOAP message will contain a complete document, encapsulated by the SOAP envelope structure and shipped over a reliable protocol.

SOAP for messaging usually requires more handshaking, because the results might not come back right away. In this way, SOAP for messaging is usually asynchronous. The suggestion here is, "Here is a purchase order. Let me know if you received it, and tell me in the next couple days if you can deliver the goods". See Figure 80, SOAP for Messaging (Initial request).

SOAP for Messaging (Initial request)

In this case, a purchase order is sent from an organization to one of its suppliers. The customer has requested that they receive some kind of confirmation a the physical layer. That is, that the packet was received. This is usually called a "delivery receipt". We discuss receipts in Chapter 10, Web Service Frameworks on page 219. The supplier responds back right away with a confirmation that the order was received. This confirmation is immediate, and appears as though it is synchronous, but it does not need to be.

In this case, the transaction is not complete, because the customer is expecting a "confirmation receipt", which means that the vendor has determined whether or not the request inside the original message can be fulfilled. This is shown in Figure 81, SOAP for Messaging (Follow up confirmation).

In this case, the confirmation states that the goods can be delivered by the dates they are required.

All of this interaction is carefully orchestrated to emulate what we know already works. This orchestration is not the job of SOAP itself, but of whatever framework we are using. A frameworks is a set of standards, protocols, and specifications that work together to achieve a particular task. You can learn more about these frameworks in Chapter 10, Web Service Frameworks on page 219 and Chapter 11, Turning a Protocol Into a Framework on page 251.

SOAP for Messaging (Follow up confirmation)

Why Do We Care About SOAP?

Six reasons why SOAP is an important protocol:
  1. SOAP‘s beauty comes from its industry support. The software and hardware industry adopted SOAP protocol quickly and started developing applications with it.
  2. SOAP is good because all the big players say it is good. Agreement means interoperability.
  3. SOAP ensures the standardized message structure that is built on XML syntax. XML is cheap and so is SOAP. An organization does not need to spend millions of dollars to exchange SOAP messages.
  4. Almost all of the SOAP implementations are free. These SOAP implementations parse and serialize a structured SOAP message according to the SOAP specification, which is a product of W3C.
  5. As the SOAP specification is extended, the SOAP implementation will extend in the same manner, including such things as error handling mechanisms, security, reliability, routing, versioning, and all the other properties that will turn SOAP into a framework. This is discussed in Chapter 11, Turning a Protocol Into a Framework on page 251.
  6. SOAP is just the envelope that delivers a message. The structure of the message in the SOAP body is open and extensible, but it must be in XML syntax. Users can create any language on XML syntax as they want, such as purchase order language, acknowledgment language, inventory request language, schedule change language, etc. And translation between requestors' and the respondents' language is easily accomplished by using XSLT.

SOAP in Real Life

In a typical transaction, many different internal and external systems are required. In this section, we will follow a transaction that involves three trading partners, each of which has a unique set of internal systems that all need to interoperate to achieve the desired result.

The three companies are:
  1. Big Yellow Monster Corporation - A company that creates and maintains a fleet of monster trucks and participates in testosterone-rich automobile events, mostly in the Southern U.S.
  2. Monster Supply, Inc. - A distributor of parts for the large truck industry.
  3. Tires Tires Tires - A manufacturer of tires of all sizes for markets ranging from commercial vehicles to tractors to airplanes.
These three companies have been doing business with each other for a while, and have established relationships. Let's take a look at the internal systems architecture of each company.

Big Yellow Monster Corporation

Big Yellow Monster's systems are based on the Microsoft platform. They use Great Plains software as their accounting, inventory, and enterprise resource planning (ERP) systems. Internally, they use Microsoft servers to manage their intranet. See Figure 82, Big Yellow Monster Corporation.

Big Yellow Monster Corporation

Big Yellow Monster uses Microsoft CommerceServer 2000 to manage the procurement of direct and indirect goods. Direct goods are those that directly go into a product for sale or use. Indirect goods are everything else, such as paper clips and promotional hats that read "Say Hello to Big Yellow!".

Recently, they installed Microsoft's BizTalk Server 2002 to integrate internal systems and provide a way to talk to their external partners electronically. BizTalk Server provides automated workflow and integration (Microsoft calls this "Orchestration"), allowing Big Yellow Monster to integrate all of their internal systems and external trading partners.

Monster Supply, Inc.

Monster Supply, Inc. runs on several different platforms. They are mostly a Unix shop, with most Enterprise application written in Java's J2EE suite. They use SAP R/3 to manage their enterprise resources and provide a front end for their accounting system. See Figure 83, Monster Supply, Inc.

Monster Supply, Inc.

Recently, Monster Supply acquired a company and inherited a warehouse full of parts and a robust inventory management system. The inventory management system was uncanny in its ability to maintain the proper ratio of parts in stock to keep inventory moving. That was the good part.

The bad part is that the system was written in 1983 in RPG and runs on an IBM System/38 departmental mainframe. The system is so reliable that Monster Supply has kept the program and the hardware running.

In order to integrate the SAP system and the RPG programs, they installed webMethods Business Integration suite. webMethods uses XML-based proprietary technology to help systems work with each other.

Tires Tires Tires

Tires Tires Tires has been building tires for decades. They are a traditional "brick-and mortar" manufacturing company. They have a production management system that is based on proprietary systems that have been built over the years by internal I.T. staff. See Figure 84, Tires Tires Tires.

Tires Tires Tires

The production management system links into their production measurement and control systems by reading sensors on various manufacturing equipment. Like Monster Supply's inventory system, they work well, and keep the production running smoothly.

Their sales have traditionally been done by telephone and mail, but in 1981 they installed an electronic data interchange (EDI) system because their customers, also large brick-and mortar companies like auto and airframe manufacturers, would only do business electronically.

In order to receive EDI transactions, Tires Tires Tires installed GenTran by Sterling Commerce. They integrated this package into their production management systems. EDI transactions coming over the EDI value added network (VAN), which is expensive and difficult to maintain.

Recently, they installed BEA‘s WebLogic Server to act as a secure, reliable interface to the Internet. WebLogic feeds data to the existing GenTran system. This allowed Tires Tires Tires to eliminate their dependence on the VAN without re engineering their in house EDI implementation.

Transaction Scenario

For this scenario, we will be using the graphics shown in Figure 85, Scenario Legend.

This scenario starts with Big Yellow Monster needing some spare tires for an upcoming event.

Scenario Legend

Big Yellow Monster has purchasing agreements with several suppliers. These agreements stipulate everything from how items are priced to how payment is to be authorized and submitted. As these agreements are made and modified, the I.T. staff loads the information into their CommerceServer application.

Order Parts

A clerk sits down at aWeb browser and accesses the corporate intranet page for ordering supplies. This site was written by internal programmers to make it easier for authorized staff to place orders. The clerk selects the item and the quantity, 10 tires. See Figure 86, Big Yellow Needs Tires.

The ordering page is actually an application of Big Yellow Monster's CommerceServer installation. Since CommerceServer keeps track of all vendors the company does business with, it knows which are preferred for supplying each part. It knows that, for this particular part, Monster Supply has the best prices and delivery times.

In order to do business with Monster Supply, a purchase order must be generated. That is the job of the Great Plains accounting system. Big Yellow Monster uses Microsoft's BizTalk Server as an automated workflow and integration toolkit.

Big Yellow Needs Tires

Buyer Orchestration

BizTalk Server is really just a suite of tools that can be used for system to-system integration and external trading partner management. In our scenario, CommerceServer invokes the orchestration API of BizTalk server. This starts in motion a series of events that will help to complete the transaction.

First, BizTalk Server needs to have Great Plains issue a purchase order for the parts. This integration is done with SOAP. BizTalk Server speaks SOAP natively, but Great Plains does not. However, the Big Yellow Monster I.T. department recently exposed their Great Plains functionality as a SOAP implementation. For more information on SOAP implementations, and to see why we use the graphics we do, see SOAP in Application-to-Application Integration on page 204.

The BizTalk Server sends a SOAP message to Great Plains, which invokes its own workflow for creating a purchase order. The details of this process are part of the Great Plains implementation. It is important to note that the automated process we are describing here does not change the way Great Plains has been doing this for years. Only now, we are automating the request. See Figure 87, BizTalk Speaks SOAP. Once the accounting system processes the purchase order, it sends the information back, via its SOAP implementation, to the BizTalk Server.

Now the BizTalk Server executes the next part of its orchestration. It sends a SOAP message over the Internet inside of an HTTP POST document. The details of this type of message are described in the previous sections.

BizTalk Speaks SOAP

Send to Distributor

The web services server at Monster Supply sends the message to the webMethods server, which reads the message and knows what to do. Monster Supply is depicted in Figure 88, Monster Supply Supplies Tires.

Monster Supply Supplies Tires

This type of message needs to be processed by the SAP enterprise resource planning system to fulfill the order. SAP has the workflow to process the request. The webMethods implementation's job is to get the message to SAP. SAP does not natively support SOAP, so a SOAP implementation has been wrapped around certain functions. The webMethods system creates a SOAP request document and sends it to SAP over the internal network.

Vendor Workflow

When SAP receives this document, its workflow starts. It has received an order for ten tires. SAP keeps trading partner agreements in its system. It needs to treat each trading partner according to the agreements that they have between each party. For Big Yellow Monster, the agreement says that Monster Supply must send an acknowledgment that it has received a purchase order. It must do this within five minutes of when the document was sent. Much of this functionality is taken care of by using a SOAP extension called "WS-ReliableMessaging". See Chapter 11, Turning a Protocol Into a Framework on page 251 for more information on SOAP extensions.

After sending the acknowledgment, the SAP system needs to check to see if there are enough tires in stock to fulfill the order. This is the domain of the mainframe programs that manage the inventory.

Unfortunately, the mainframe systems do not speak the language that SAP speaks, and SAP cannot communicate with the mainframe systems directly. In another era of direct application-to-application integration, I.T. architects at Monster Supply would have had to write complex interfaces to get the two systems speaking one language or another. These interfaces might have required that the code for the two systems be modified so they could communicate, or they could require complex bridges and translations.

Now, it is easier to wrap certain functionality with a SOAP implementation that exposes the required operations to internal applications so integration becomes message- based and loosely coupled.

Inventory Integration

Now, the SAP system sends a message to the SOAP implementation on the mainframe inventory control system, "How many tires do we have in stock". This runs a program on the mainframe, which checks its databases and recent transactions that might indicate new items have been received awaiting storage. See Figure 89, Accessing the Mainframe.

The answer comes back immediately, "Six".

Now the SAP system needs to do some complex math. It has an order for ten, and it has six in stock. How many does it need to order from the manufacturer?

a) 4
b) 0
c) 42
d) None of the above
e) All of the above

The answer seems like a) 4, because that's the shortage. However, if the answer were as easy as subtracting two small integers, they would not have needed to spend four million dollars on the SAP installation.

Instead, SAP‘s job is not just to subtract numbers, but to be a central part of the planning of enterprise resources. It keeps in its database information about each item and about each customer. In this case, the answer is d) None of the above. SAP has determined that this particular tire is very popular with several customers who usually need it right away. If the item is not in stock, these customers will buy it elsewhere. So the rule for this tire is that three must be in stock at all times for these customers.

Now that we have that information, we can calculate how many need to be ordered from the manufacturer to fulfill this order from Big Yellow Monster. The answer is seven.

Accessing the Mainframe

Manufacturer Workflow

The vendor for this product is Tires Tires Tires. They are illustrated in Figure 90, SOAP Document to Manufacturer.

SOAP Document to Manufacturer

webMethods composes a SOAP document and sends it over the Internet to the manufacturer. The WebLogic server speaks SOAP natively, so when the WebLogic server was installed, a SOAP implementation was wrapped around the GenTran system so it could speak to the WebLogic server.

TheWebLogic server receives this as a SOAP document. It recognizes it as a purchase order request and sends it to the GenTran system as a SOAP message over an internal network. See Figure 91, Internal SOAP Implementation.

Internal SOAP Implementation

The GenTran system has been processing purchase orders for years, and knows how to interface with the in-house production management system. It gets an answer from the production system as an estimate of the time the products will be delivered. GenTran sends a SOAP response document to WebLogic, which sends a SOAP response to webMethods, which sends a SOAP response document to SAP. See Figure 92, Internal SOAP Implementation.

The tires will be shipped next Tuesday. Because SAP has the trading partner profile, it knows it needs to send a document back to Big Yellow Monster when it finds out when the goods can be shipped. This is called an "Advance Shipment Notice"(ASN).

Now SAP has everything it needs to be able to send the ASN. It sends a SOAP message to the webMethods server, which manages the connection to Big Yellow Monster. webMethods creates a SOAP document that it sends over the Internet to the BizTalk Server at Big Yellow Monster. See Figure 93, Advance Shipment Notice. The response is, "We will send three tires today and seven more next Wednesday." BizTalk Server responds with a SOAP response message saying the message was received without error.

The BizTalk server sends a SOAP message to Great Plains so it can update its status. It also instantiates a COM object and invokes a method updating the status of the order in CommerceServer. See Figure 94, Updating Internal Systems.

Internal SOAP Implementation

Advance Shipment Notice

Updating Internal Systems


This scenario involved many different players and many different technologies and platforms. It seems a bit contrived, but this is the future of web services as we see it.

We see vendors supporting web services for both the integration of internal systems and managing external partners over any type of network. The companies mentioned here already support SOAP and web services in their products.

1 There are not a lot of COBOL programmers left. It seems like they are all retired and living in Florida on their Y2K consulting income.

2The 3278 version had multiple shades of green for highlighting. Then there was a breakthrough: the 3279 terminal, which also had red and blue! These terminals cost as much as your house.

3Which is far more often than many would like.