The primary considerations for achieving interoperability are:
Using the same version or compatible versions of the specifications Not all specifications are backward compatible. For example, SOAP 1.2 as proposed in its latest draft form is not totally backward compatible with SOAP 1.1 or SOAP 1.0. For instance, according to the 1.2 draft specification, a node complying with SOAP 1.1 generates a SOAP Fault indicating version mismatch if it receives a SOAP Version 1.2 message. A 1.2 node has the option of processing a 1.1 message or generating a SOAP Fault. The W3C XML Protocol Working Group (XMLP) has used a different namespace for each version to give implementations a way to distinguish different versions of the specification.
Using the same version of the web service Like any software, web services change over time. New versions are released that may not be compatible with earlier versions. It’s not clear how the standards for web services will support versioning—that is, how a client will find out what versions of a particular service are available.
Sharing semantics The semantics must be understood and agreed upon in advance by the parties through some mechanism.
Beyond these general considerations, interoperability can depend on interpretations or misunderstandings of specifications, support for optional features within a particular web services standard, the addition of proprietary extensions, or the lack of a standard.
Interoperability problems can occur at a number of levels:
The use of a WSDL or not, differing service definition methodologies, incompatible tools, etc.
The use of different registry mechanisms, service definition and representative syntax, etc.
Different security mechanisms, wire-level compatibilities (encoding, serialization, SOAP header extensions and how they’re applied through such efforts as BizTalk and ebXML)
As both authors represent companies that provide web services infrastructure, we have experienced some of these problems firsthand, either directly or indirectly through colleagues. As an added exercise, we scoured newsgroups and mailing list archives, including standards bodies and user discussion threads, to find out what others considered important issues. We also ran a few of our own tests. What follows represents a broad overview of the types of interoperability issues that can be encountered and some specific problems and scenarios.
Initial SOAP interoperability problems were largely the result of specification ambiguities and varying interpretations. Implementations that conformed to the specification could still prove incompatible. In April 2000, Tony Hong from XMethods compiled a detailed list of interoperability issues between implementations (http://www.xmethods.net/soapbuilders/interop.html). This list gives an idea of how extensive interoperability problems were.
SOAP interoperability has improved substantially since then. Much of this improvement can be attributed to the SOAPBuilders community interoperability test labs and discussion forum. Many other efforts have helped. A turning point was the development of “A Busy Developer’s Guide to SOAP 1.1” (BDG), developed by Dave Winer (one of the original SOAP authors) and Jake Savin from UserLand in March 2001 (http://www.soapware.org/bdg). It was a first attempt to define a common subset for implementations of the specification, something like a base implementation that developers could agree upon. It also started a dialogue that helped identify interoperability issues. One outcome of the BDG was the evolution of using a SOAP Fault to handle a problem in a well-defined way. This provided a way to handle failures between implementations in a predictable and understandable fashion.
In its draft set of specificationss for Version 1.2, XMLP addressed the interoperability issues that were identified for Version 1.1, so many problems should be eliminated or at least be less problematic with SOAP 1.2. XMLP also plans to provide a non-normative Primer (SOAP Version 1.2 Part 0: Primer), a tutorial on how to use SOAP 1.2. In addition, they are developing a conformance test suite, which is discussed in more detail in the following section. The Primer and test suite should help reduce confusion and differences of interpretation. However, since 1.1 is the currently implemented version and the only one that’s considered a standard, let’s look at some areas of interoperability problems in that specification.
In Chapter 3, we talked about the two models for using SOAP: the document exchange model and RPC. In Chapter 4, we introduced SOAP encoding, which defines a serialization mechanism for exchanging application data. Encoding and how it is used in each model are some of the biggest challenges to interoperability.
In SOAP 1.1, the RPC model requires the SOAP server to map data from a given native type into the XML encoding for that type and convert the encoding back from the XML encoding to the native type. RPC method calls are also encoded into XML, with method names mapped to the SOAP body child tags and arguments to child tags of the method name. Mapping between a number of type systems and XML is a difficult challenge, and not all languages can be mapped equally well. Toolkits may map to and from any given programming language’s type system differently.
There is no default encoding in SOAP. SOAP 1.1 defines a SOAP
encoding style, often called Section 5 encoding (since it appears in
Section 5), specifying how to express complex programming language
types in XML. Section 5 encoding provides simple (scalar) and
compound (composed of multiple parts) type categories and a set of
rules for serialization. The specification also allows other encoding
styles through the encodingStyle
attribute, which
can be used with “any element, and is scoped to that
element’s contents and all child elements not
themselves containing such an attribute, much as an XML namespace
declaration is scoped” (Section 4.1.1). The
encodingStyle
attribute identifies serialization
rules. Serialization is discussed in more detail in Section 9.4 later in this
chapter.
SOAP 1.1 provides an optional encoding mechanism called
literal
encoding. With literal encoding, an XML document is sent as the
payload. In contrast, with the standard encoding style, application
data such as primitive types, methods, and objects, are serialized to
XML. In this case, the XML payload is not really a document. The
distinction between literal and encoded SOAP bindings in 1.1 is
another source of problems. For example, Apache SOAP
defaults to Section 5 encoding, while ASP.NET
uses literal encoding. To get them to interoperate, one side must
specify the encoding explicitly rather than use its default. ASP.NET
can be forced to use Section 5 encoding by applying the
SoapRpcService
attribute to the class containing
the web methods. To force Apache SOAP to use literal encoding, you
must specify that the method takes a single parameter of type
org.w3c.dom.Element
as an argument and returns a
response of the same type. You must then create an XML tree for the
input parameter and modify the XML tree for the response.
In contrast with RPC, the document exchange model does not inherently require encoding. With the XML Schema Recommendation, a native XML type system can be used as well, so Section 5 encoding or another specialized encoding is not required.
In summary, there are four common combinations of style and encoding. Both ends must agree on a particular combination. For example, a server that supports only document exchange using the literal encoding won’t be able to communicate with a client that wants to use RPC with Section 5 encoding. Here’s a summary of the possible combinations:
Document/literal
Document/encoded (Section 5)
RPC/literal
RPC/encoded (Section 5)
SOAP 1.1 defines a way to type each value
explicitly through the
xsi:type
attribute. The
xsi:type
attribute is optional and generally not
required if the type being used is made known through the use of a
schema, WSDL, or another form of metadata exchange. The specification
states:
For each element containing a value, the type of the value MUST be represented by at least one of the following conditions: (a) the containing element instance contains an
xsi:type
attribute, (b) the containing element instance is itself contained within an element containing a (possibly defaulted)SOAP-ENC:arrayType
attribute or (c) or the name of the element bears a definite relation to the type, that type then determinable from a schema. (Section 5.1).
If one implementation expects type information, it probably won’t be able to process a message from an implementation that doesn’t include it. For example, earlier versions of Apache SOAP required explicit declaration of element datatypes. Because they did not use an external data typing mechanism (such as WSDL), the early Apache releases required explicit typing to determine how to map into native datatype representations.
While Apache tools required explicit typing of RPC parameters,
earlier Microsoft implementations didn’t support it
at all. They relied on WSDL, which created a significant
interoperability problem. As of Apache 2.1, a workaround for this
problem has been provided. To deserialize a parameter in a SOAP-RPC,
the SOAP engine requires notification of the type for each parameter
(since no metadata is available to the SOAP engine). Because Apache
does not support WSDL, if explicit typing (the
xsi:type
attribute) is not used, explicit mapping
is an option. The element name of the parameter can be used as the
schema type, so the engine can associate a Java type for mapping.
This association requires the user to tell Apache SOAP what the
deserializer is for each type. We will talk about custom types and
serialization when we get to Section 9.4.
Microsoft’s BizTalk Framework 2.0 specification now
supports the xsi:type
attribute.
Implementations often define proprietary datatypes beyond the primitive types specified by SOAP. An implementation that uses only the SOAP-defined types has much greater interoperability potential.
SOAP 1.1 does not specify an order for data serialization. Implementations can choose the order, which can cause problems between implementations.
The SOAP 1.1 specification leaves the use of this element open for
interpretation. For example, it is defined in the context of the HTTP
header as a URI identifying the “intent of the
message.” This definition could be interpreted as
the intended target for the message or the name of the target
service. Another interpretation extends SOAPAction
to accommodate different versions of the service. Service versioning
is an interoperability issue in its own right, which
we’ll discuss in the context of WSDL later in this
chapter. The fact is that there are currently several different
interpretations of how SOAPAction
should be used.
In addition, the use of SOAPAction
for transports
other than HTTP, or between transports, is not specified in SOAP 1.1.
Providing equivalent functionality for other protocols is up to the
implementation, regardless of which interpretation is applied. As a
rule, if another protocol is used, interoperability issues are likely
to arise until standards are defined that explicitly specify bindings
to other protocols.
The functionality that SOAPAction
provides is
useful. Being able to identify, route, or dispatch requests without
having to parse XML is a good idea. The problem is in the
implementation. In retrospect, it was probably not a good idea to
overload the Action
verb in HTTP. If SOAP is truly
designed to be layered upon multiple protocols, then
what’s needed is some sort of metadata that provides
SOAPAction
-like functionality. Then the binding to
a particular protocol can map this metadata to whatever headers it
likes: SOAPAction
, SOAPRouting
,
SOAPDispatch
, SOAPMethod
, etc.
To extend the scope of bindings for SOAP 1.2, the XMLP group defines
a Transport Binding Framework. This framework defines a convention
that describes binding property and feature types, a Message Exchange
Pattern (MEP), and an HTTP binding based on the description
convention and the MEP.
Even if HTTP is the protocol of choice, there is additional confusion
about how SOAPAction
works. Section 6.1.1 states:
The presence and content of the SOAPAction header field can be used by servers such as firewalls to appropriately filter SOAP request messages in HTTP. The header field value of empty string (“”) means that the HTTP Request-URI provides the intent of the SOAP message. No value means that there is no indication of the intent of the message.
In essence, the specification allows two ways to declare the intent
(whatever “intent” is interpreted
to mean) of a message: through SOAPAction
or
through the HTTP Request-URI. To add to the confusion surrounding
SOAPAction
, if a SOAP server requires a null
value, HTTP clients that cannot set a null HTTP header value will
have problems. Also, no distinction is made between an empty string
(“”) and a null value, so both
interpretations can be valid. SOAPAction
is
definitely a can of worms for interoperability.
The XMLP group has debated whether to keep
SOAPAction
in 1.2 or deprecate it. The current
wording in the SOAP 1.2 draft Part 2, Adjuncts, Section 8.5.5 is:
Use of the SOAP Action feature is OPTIONAL. SOAP Receivers MAY use it as a hint to optimise processing, but SHOULD NOT require its presence in order to operate. Support for SOAPAction is OPTIONAL in implementations. Implementations SHOULD NOT generate or require SOAPAction UNLESS they have a particular purpose for doing so (e.g., a SOAP Receivers specifies its use).
This wording does not guarantee full interoperability between implementations without prior negotiation, but does improve the current state of affairs.
Not all SOAP implementations support multireference values. Nonetheless, some implementations, including Microsoft’s .NET Framework, do employ them. The .NET Framework uses multireference values to represent every element of an array.
The SOAP 1.1 specification does not define the order in which either SOAP headers or the SOAP body should be processed. Currently, each SOAP processor determines the processing order. This determination can lead to interoperability issues in scenarios involving intermediaries, in areas such as error processing, or in consistent, predictable service behavior across SOAP processors.
SOAP is designed to be extensible through the definition of additional headers. While extensibility is good, it also opens up the potential for abuse. Mandatory headers can be defined that can turn on or off the processing of other headers. Parties can define headers that are not standardized or widely supported. For example, BizTalk Server defines proprietary headers. The BizTalk Framework 2.0 specification defines BizTags, a set of XML tags used to indicate document handling. BizTags can be mandatory or optional; they are used to create SOAP headers in an XML BizTalk business document. BizTalk Framework 2.0 compliant servers, or BFC Servers, must be able to process headers composed of BizTags. However, SOAP servers that are not BFC-aware are not likely to understand BizTags or BizTalk-defined header extensions.
Section 7 of the BizTalk Framework specification defines five BizTag
header extensions used to specify document routing, identification
and other document properties, requested delivery services, a catalog
of document contents and attachments, and tracking of the full
business process context to which the document belongs. Each
extension is comprised of BizTag elements and attributes (such as
to
or from
, which are used in
the endpoints
header extension). These header
extensions include:
endpoints
(mandatory—document source and
destination)
properties
(mandatory—identify and other
properties)
services
(optional—reliable delivery
services)
manifest
(optional—document catalog
information)
process
(optional—process management
information)
Processing and understanding these header extensions is mandatory for
a BFC server, and most, when present, require
mustUnderstand="1"
. The exception is the
manifest
extension, which becomes mandatory when
the document is part of a compound package. In this case, it must be
present and mustUnderstand="1"
is required. If the
manifest
header is used only to verify package
integrity or catalog what is contained in the document, processing
its contents is not required.
The following example, extracted from the BizTalk Framework 2.0 specification, illustrates the endpoints header extension:
<SOAP-ENV:Header> <eps:endpoints SOAP-ENV:mustUnderstand="1" xmlns:eps="http://schemas.biztalk.org/btf-2-0/endpoints" xmlns:agr="http://www.trading-agreements.org/types/"> <eps:to> <eps:address xsi:type="agr:department">Book Orders</eps:address> </eps:to> <eps:from> <eps:address xsi:type="agr:organization">Book Lovers</eps:address> </eps:from> </eps:endpoints> </SOAP-ENV:Header>
Services incorporating such proprietary header definitions are not fully interoperable with clients or other servers that don’t understand them. While they’ll probably be able to fail in a predictable and understandable fashion through the SOAP Fault, they won’t get past that level.
SOAP 1.1 specifies a content type of text/xml
in
the HTTP header. This type designation is problematic, though. MIME
user agents that do not support text/xml
explicitly treat it as text/plain
, displaying the
XML MIME part as plain text. This plain text display is not
appropriate for casual users (not programmers) who
can’t be expected to take interest in the contents
of a SOAP document. The XMLP group has agreed that
text/xml
should not be used. One proposal is to
use a media type of application/soap
, for which
application
is the MIME media type name and
soap
is the MIME subtype name. An extension
mechanism may be provided; for example,
application/soap+xml
could be used to describe
SOAP1.2 messages serialized as XML. Because SOAP 1.2 is based on the
XML Infoset, alternate serializations of messages are permitted. The
application/soap+xml
content type would identify
SOAP messages using XML 1.0 serialization.
Whatever the outcome of the XMLP discussions,
text/xml
will not be supported in SOAP 1.2.
SOAP 1.1 defines a mustUnderstand
attribute, which
we discussed in Chapter 4.
Apache SOAP
does not support the mustUnderstand
attribute. It
offers a workaround; an attribute in the deployment descriptor tells
the runtime (per-service) whether to fault if any
mustUnderstand
headers are present. This
workaround is supported only for RPC-style SOAP.
SOAP 1.1 defines values for the mustUnderstand
attribute as 0
(false) or 1
(true). Some implementations have used the values
false
or true
. The SOAP 1.2
draft indicates that true
or 1
may be used (and because the value is defined as Boolean, one would
assume 0
or false
are also
valid). This definition may present a problem with backward
compatibility for some implementations. The use of unique namespaces
for each version of SOAP should prevent most interoperability
problems in this regard, however.
There have been some differences in the interpretation of how a given
actor should verify that it understands all headers with
mustUnderstand
equal to 1
or
true
. One interpretation is that all
mustUnderstand
headers should be checked prior to
processing. A second interpretation is that
mustUnderstand
headers can be checked and
processed individually. The outcome from these varying approaches can
also differ. XMLP has proposed the following change to clarify this
processing order:
A SOAP node’s processing of the MU checks needs to ‘appear’ to be done before any processing occurs. This is to guarantee that no undesirable side-effects will occur as a result of noticing an unknown MU header too late.
In SOAP 1.1, the actor
attribute provides a
targeting capability. An actor
is of the type
anyURI
and can have more than one URI identifier.
The target, or final recipient, can be designated in two ways:
explicitly as the next actor
or by the absence of
an actor
. Providing multiple ways to identify the
targeted destination can result in confusion and interoperability
between implementations.
There is semantic confusion about SOAP 1.1’s definitions for the designated roles of actors. The terms (default actor, anonymous actor, ultimate recipient, and endpoint) are not commonly understood and are often used interchangeably. For example, the lack of consensus about what the term “endpoint” means is a problem: does it designate a final destination, or can an intermediary be considered an endpoint? This lack of semantic consensus has resulted in misunderstandings between implementations.
Two camps represent very different views on the value of WSDL. One camp, including Dave Winer from UserLand, believes that WSDL and UDDI are impediments to interoperability because they are too complicated; are less open than HTTP, XML, or SOAP; and encourage vendor lock-in. They claim that the net effect is limited opportunities for smaller, independent players. Another camp, which includes vendors such as Microsoft and IBM, argues that WSDL enhances interoperability and facilitates development and implementation of web services across platforms and tools through better standardized definition and documentation of services. Some articles and interviews that discuss these issues are listed in Section 9.6 at the end of this chapter.
Contrary to some opinions, WSDL is not required for web services interoperability. It may be very useful in some scenarios, but in others, it may not be necessary or beneficial. For example, it may be more convenient in some scenerios to exchange service information via email or configure applications to offer or consume a service through existing tools and documentation processes.
WSDL works well with Java and the .NET programming languages, but does not work as well with dynamic languages such as Python or Perl. This may be because participants from these development environments were not involved in the initial development of the WSDL specification. WSDL has since been submitted to the W3C, so it will hopefully be modified to become a more useful standard across environments.
WSDL allows <wsdl:documentation>
elements to
occur at numerous places in a WSDL document. Depending on how a
toolkit works, it may map WSDL documentation in various ways. For
example, Systinet’s WASP maps WSDL to Java by
generating a Java interface from the WSDL
portType
, so the portType
documentation element is used for the interface’s
javadoc. Methods are generated from portType
and
its operations, so the corresponding documentation element is the
documentation used for a method’s javadoc.
Because this behavior is not standardized, toolkits may map documentation elements differently.
Web services tools generate WSDL based on nonstandardized language mappings. The way a SOAP/XML schema library reads a WSDL document and matches return values can vary based on the implementation. Furthermore, not all toolkits support the same set of options in the WSDL standard.
A WSDL file may require some minor customization to function on a
specific platform or with a specific toolkit, depending on the
implementation. For example, Microsoft SOAP Toolkit 2.0 used a
namespace of wsdlns
when generating a WSDL. The
proxy generator tool in IBM’s Web Services Toolkit
did not recognize this namespace. To make the tool work,
wsdlns
had to be deleted in the
tool’s local copy of the WSDL.
Initially, incompatibilities existed between the SOAP::Lite WSDL
reader for Perl and the .NET WSDL generator. The SOAP::Lite reader
expected all XSD type information to be contained in a namespace
xsd
. A .NET-generated WSDL file required
modification to change the XML namespace from:
xmlns:s=http://www.w3.org/2001/XMLSchema
to:
xmlns:xsd=http://www.w3.org/2001/XMLSchema
The XSD namespace version of this declaration can also be problematic and may require modification in the local copy of the WSDL. For example, if the tool uses the 1999 XSD, it will not understand the 2001 XSD. We’ll go into more detail about XSD versions later.
Although you would think otherwise, you can’t assume that tools from the same vendor will always interoperate. Problems have been reported when reading a WSDL document between .NET Beta 2 and the SOAP Toolkit Version 2.
Toolkits may add value by hiding interoperability problems from the developer. To do this, they must map between the vendor-specific features and misfeatures of different web service platforms. Hiding interoperability problems isn’t as good as eliminating them, but it’s still a valuable service.
Versioning of WSDL (and of web services in general) is not well understood and there isn’t much agreement about how it should work. Currently, WSDL supports implicit versioning through unique namespaces.
One opinion is that WSDL, similar to a CORBA IDL, represents an immutable contract, and a new web service requires a new WSDL document, not just a new version of an existing WSDL. Others feel that a WSDL document can be versioned to support the enhancement of a web service, allowing one document to support multiple versions of the web service. Depending on how support is implemented, interoperability can be impacted severely. Migration to newer versions of web services can also cause problems, creating registry and implementation interoperability issues.
Endpoints are defined through portType
s and
operations. However, WSDL does not provide a standard way to pass
this information over the wire. For example, the BizTalk Framework
2.0 defines endpoints in a BizTalk header extension, explained in
more detail in the SOAP section of this chapter. Implementations that
do not support BizTalk will not understand endpoints defined through
this mechanism.
To facilitate UDDI interoperability, services must be registered consistently and unambiguously so that registered services can be recognized within and across registries. There is currently no interoperability test for UDDI registries similar to those available for SOAP and WSDL. As adoption of UDDI expands and the number of public and private registries grows, UDDI interoperability may become more of an issue.
ebXML has also defined a registry. The latest draft of Version 2.0 can be found at http://www.oasis-open.org/committees/regrep/documents/2.0/specs/ebrs.pdf. The specification outlines a scenario in which a client discovers an ebXML registry in a public UDDI registry. While the interoperation between ebXML and UDDI registries has gotten some attention, how successfully these two specifications can interact and work together remains unclear.
The three versions of the
XSD
namespace are 1999, 2000/10, and 2001. Using different XML Schema
versions can cause namespace problems or problems with serialization
and deserialization. Several datatypes changed names in the 2001
specification; for example, timeInstant
became
dateTime
.
Most tools have been modified to accept the 2001 XSD declaration. At this point, 2001 is probably the safest for new development. However, a number of implementations still rely on earlier versions. When we get to the examples, we will show how to use a different version of the XSD namespace with Apache SOAP. The Microsoft SOAP Toolkit 2.0 supported all three versions, as long as the namespace in the messages matched what was specified in the WSDL file.
The character set may be specified; if not, it defaults to US-ASCII. UTF-8 and UTF-16 are also acceptable. UTF-8 has the widest acceptance and is the recommendation for interoperability. UTF-16 requires a byte order mark (BOM), and some implementations can’t process a BOM.
The draft SOAP 1.2 glossary defines a SOAP intermediary as follows:
A SOAP intermediary is both a SOAP receiver and a SOAP sender, targetable from within a SOAP message. It processes a defined set of blocks in a SOAP message along a SOAP message path. It acts in order to forward the SOAP message towards the ultimate SOAP receiver.
A web services scenario may include one or more intermediaries. The role of intermediaries can vary. An intermediary’s role can include:
Value-add or brokering
Routing or switching
Each role presents interoperability considerations. An intermediary
may have or require a priori knowledge of other nodes, contracts, or
trading partner agreements. A lack of this knowledge can present
opportunities for a service to break down in unpredictable ways as
messages traverse the paths between nodes. Interoperability problems
can arise even if an intermediary just relays a message. For example,
the intermediary’s SOAP processor may modify SOAP
headers when parsing a message to its XML canonical form. The
intermediary may modify a mustUnderstand
value of
1
to a value of true
. Such
actions may have unexpected results.
If the intermediary role includes processing, the way in which the node repackages the SOAP message could be different from the original packaging. The ultimate destination might not be able to process this subsequent packaging successfully.
Currently, the coordination or orchestration of transactions in a web services model is not standardized. Requirements to handle transaction failure within a web services scenario can extend beyond the X/Open two-phase commit model for distributed transactions. Aggregate web services may need coordination when backing out a transaction or when processing errors. Intermediaries add further complications, depending on their role. Currently, transaction interoperability can be accomplished only through agreements between parties and customized or proprietary solutions. However, although no standards currently facilitate interoperability, several efforts, such as the OASIS Business Transaction Technical Committee (http://www.oasis-open.org/committees/business-transactions/ ), are underway.
Backend integration of applications presents another challenge. The J2EE Connector Architecture aims to solve this problem for J2EE platforms, and .NET provides integration capabilities through .NET servers (e.g., BizTalk). However, no standard across platforms and applications that ensures interoperability at this level exists.
Whenever the topic of web services interoperability comes up, interoperability between the .NET and J2EE platforms is usually part of the discussion. While the web services model is based on communication and interoperability across heterogeneous platforms, languages, etc., there seems to be a great deal of skepticism as to how well web services can truly bridge .NET and J2EE technologies.
Given the relative immaturity of the open standards, bridging J2EE and .NET actually seems to work pretty well, as we will see when we discuss the SOAPBuilders Interoperability project. Extensions to the core web services standards, such as BizTalk and ebXML, present a greater challenge to interoperability.
The differences in approach between .NET and J2EE and the technical challenges accompanying them are sometimes significant. However, efforts such as the SOAPBuilders interoperability test labs have helped broker a high level of interoperability.
The following list details some key differences between .NET and J2EE:
J2EE is a set of open standards, not a product. .NET, on the other hand, is a product suite, with some offerings built on standards and others that extend standards in proprietary ways.
.NET provides runtime support for SOAP and UDDI as native .NET protocols.
Integrated support is provided in .NET to build and debug XML-based web services. J2EE vendors must provide integration between their J2EE-based products and an IDE offering; requirements for doing so are not part of the standard.
.NET provides business process management and e-commerce capabilities. These capabilities may be provided in a J2EE implementation, but are not part of the standard.
J2EE is focused on application portability and connectivity between platforms supporting Java. .NET claims to target application integration between platforms using XML. The layer of abstraction has been raised in this model. J2EE 1.4 will include parts of the Java Web Services Developer Pack and web services support.
Application and backend integration approaches differ. J2EE includes the Connector Architecture and the Java Message Service (JMS). The Connector Architecture provides a mechanism for plugging in resource adapters to connect to specific systems and applications. These resource adapters can be used in any container that supports the J2EE Connector Architecture. Communication across disparate applications and platforms is supported through JMS and the Java APIs for XML.
.NET supports integration through several mechanisms: the Host Integration Server 2000, COM Transaction Integrator (COM TI), Microsoft Message Queue (MSMQ), and BizTalk Server 2000. Each solution fits a specific integration space (collaboration transactions across mainframe systems, integrating with legacy systems, integrating with systems based on protocols such as EDI, etc.).
There is currently no general agreement about how to represent business entities and business domains consistently across web services standards. This deficiency presents a large hurdle to interoperability. Identifier schemes for business entities include Dun & Bradstreet’s DUNS numbers, the International Telecommunication Union (ITU), the Object Identifier scheme (OID), vertical domain administered schemes such as the International Air Transport Association (IATA) airline codes, etc. However, there is currently no ubiquitous standard for web services.
For protocols that include the concept of a
“from” and
“to” party, the lack of identifiers
can present an interoperability problem. The ebXML Message Service
Specification Draft Version 2.0 contains a PartyID
element with a type
attribute. The
type
attribute indicates the domain of names used
for the PartyID
(such as DUNS). The
PartyID
is used in the From
and
To
elements. However, a common notation or naming
convention is not specified. Parties must agree on the naming
convention to interoperate.
Similarily, the BizTalk Framework 2.0 states (Section 7.1):
The source and destination are specified as names of business entities in the element marked by the <address> BizTag, and these names in general reflect business-related namespaces (such as DUNS numbers) rather than transport endpoints.
WSDL defines endpoints through ports, which specify a single address for a service binding, rather than using a business naming convention.