<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>MyArch &#187; Web services</title>
	<atom:link href="http://myarch.com/category/soa/webservices/feed" rel="self" type="application/rss+xml" />
	<link>http://myarch.com</link>
	<description>Builds and bytes</description>
	<lastBuildDate>Sat, 17 Mar 2012 14:13:29 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Is The End of SOAP Dominance Nearing?</title>
		<link>http://myarch.com/is-the-end-of-soap-dominance-nearing</link>
		<comments>http://myarch.com/is-the-end-of-soap-dominance-nearing#comments</comments>
		<pubDate>Sun, 12 Aug 2007 01:33:45 +0000</pubDate>
		<dc:creator>Alexander Ananiev</dc:creator>
				<category><![CDATA[Web services]]></category>

		<guid isPermaLink="false">http://myarch.com/is-the-end-of-soap-dominance-nearing</guid>
		<description><![CDATA[SOAP-based services currently dominate the enterprise landscape. Main reasons this are: SOAP tight coupling with WSDL. Until recently, SOAP was the only supported WSDL binding. WSDL, with all of its issues (such as the convoluted structure), remains the only widely accepted vendor-neutral way of defining services. In Java world, SOAP was promoted by adding its [...]]]></description>
			<content:encoded><![CDATA[<p>
SOAP-based services currently dominate the enterprise landscape. Main reasons this are:
<ul>
<li>
SOAP tight coupling with WSDL. Until recently, SOAP was the only supported WSDL binding. WSDL, with all of its issues (such as the convoluted structure), remains the only widely accepted vendor-neutral way of defining services. 
</li>
<li>
In Java world, SOAP was promoted by adding its support to J2EE/Java EE via JAX-RPC and JAX-WS specifications. There is a way to create <a href="http://myarch.com/will-jax-ws-become-the-primary-mechanism-for-invoking-restful-services">RESTful services using JAX-WS</a>, however this approach has not gained wide acceptance due to a number of reasons (lack of standardized WSDL binding being one of them).
</li>
<li>
Solid support by software vendors. SOAP is supported in all application servers; there are plenty of development tools (including Eclipse and NetBeans) that can help with creating SOAP-based services.
</li>
<li>
Availability of a number of WS-* specifications that only work with SOAP.  WS-* specs, such as WS-Security and WS-ReliableMessaging heavily rely on SOAP headers for passing message metadata.
</li>
</ul>
<p>
SOAP, however, is far from perfect. It adds complexity and overhead and makes implementation of message intermediaries (e.g., gateway products) more difficult (XML message has to be parsed in order to obtain any information about the message, such as an operation name). On the other hand, the uptake of WS-* standards has been very slow, perhaps with the exception of WS-Security, so the benefit of WS-* integration with SOAP failed to materialize. Another supposed SOAP benefit is the protocol neutrality, i.e., a SOAP message looks the same over HTTP, JMS, RMI or any other supported protocol. However, most services are implemented using HTTP, or in some cases, JMS without any headers (unless WS-* is used), so this benefit has limited value. 
</p>
<p>
So it is fair to say that in many instances, SOAP itself does not add any value to Web services implementation.  Nevertheless, it's continued to be used because of the reasons listed above. But this situation might be changing in the future.
</p>
<p>
WSDL 2.0 fully supports <a href="http://www.w3.org/TR/2006/CR-wsdl20-adjuncts-20060327/#http-binding_/">HTTP binding</a>. WSDL 2.0 stirred <a href="http://webservices.xml.com/pub/a/ws/2004/11/17/salz.html">a lot of controversy</a> (I personally think that it's a step forward from WSDL 1), however, it was finally accepted as a W3C recommendation in June, so we can fully expect that vendors support will follow. 
</p>
<p>
Additionally, <a href=http://jcp.org/en/jsr/detail?id=311>JAX-RS</a> specification was created and included into Java EE 6. This will also promote development of RESTful services behind the firewall. 
</p>
<p>
Currently, there a preconceived notion that REST is only good for Internet/WEB 2.0 environment, whereas enterprise services should all be using SOAP. The emergence of the two new standards will help change this notion.
</p>
<p>
Ideally, developers should be able to use the simplest binding that gets the job done. HTTP/REST can be a good choice for many "query-style" services. Services that accept more complex data can use "Plain Old XML" over HTTP post. Finally, services that have to rely on WS-* specifications will utilize SOAP. In all these cases, developers should be able to use same set of APIs for invoking the service and same set of annotations (obviously, with different parameters) for creating the service. 
</p>
<p>
Perhaps this is how Web service development will be done in the future, but we are certainly not there yet.
</p>
]]></content:encoded>
			<wfw:commentRss>http://myarch.com/is-the-end-of-soap-dominance-nearing/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Using Maven Repository as Web Services Registry</title>
		<link>http://myarch.com/using-maven-repository-as-web-services-registry</link>
		<comments>http://myarch.com/using-maven-repository-as-web-services-registry#comments</comments>
		<pubDate>Sun, 01 Jul 2007 18:45:10 +0000</pubDate>
		<dc:creator>Alexander Ananiev</dc:creator>
				<category><![CDATA[Web services]]></category>
		<category><![CDATA[Web Services Registry]]></category>

		<guid isPermaLink="false">http://myarch.com/using-maven-repository-as-web-services-registry</guid>
		<description><![CDATA[A Web services registry is arguably one of the most important components of SOA. The registry provides a single source of information about all services in an enterprise. There are a number of commercial registry/repository products but all of them are quite pricey. Also, smaller organizations or organizations just starting with SOA may not need [...]]]></description>
			<content:encoded><![CDATA[<p>
A Web services registry is arguably one of the most important components of SOA. The registry provides a single source of information about all services in an enterprise. 
<p>
There are a number of commercial registry/repository products but all of them are quite pricey. Also, smaller organizations or organizations just starting with SOA may not need the full power of a commercial registry/repository product; most of it functionality will remain unutilized. On the other hand, existing registries do not do a particularly good job of managing dependencies between services as well as between service consumers and service providers. Dependency management must be a key consideration in SOA since, unlike in the case of monolithic applications, an SOA consists of a large number of “moving parts”, that is, services. In a well developed SOA most services depend on other services and these services in turn may rely on some other services. Being able to manage and analyze services dependencies is required in order to be able to implement robust and maintainable SOA. 
<p>
Open source <a href=http://maven.apache.org/>Maven project</a> has become something close to a de-facto standard in the area of dependency management for building Java-based projects and components. 
<span id="more-65"></span>
Also, Maven <a href=http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html>dependency mechanism</a> can be used with any Ant build by utilizing Maven Ant dependency tasks (i.e., there is no need to migrate existing Ant build processes to Maven). Maven also has a pretty sophisticated repository support allowing implementing custom central repositories as well as local repository snapshots. Projects like <a href=http://www.jfrog.org/sites/artifactory/latest/>artifactory</a> further enhance Maven repository and add nice UI. 
<p>
So why not use a Maven repository for storing Web services artifacts, such as WSDL, schemas and policy files? Each service or a group of related services from the same service provider can have its own POM. Using Maven (i.e., by executing “deploy” goal) service providers can publish WSDL and other artifacts (but, obviously, no binaries) along with their POMs in a Maven repository. Service consumers could then download these artifacts based on the dependencies defined in their POMs. If the version stays the same, service consumers don’t need to do anything. In case of a change, service consumers may need to make changes to their client’s implementation, including re-generating client’s classes (this is, of course, a manual process that requires some analysis of the changes). In other words, the process is very similar to how we deal with changes in APIs in third-party libraries. 
<p>
The entire process can be supported by out-of –the-box Maven build process. The only required change is a custom artifact handler to support new “service” extension and packaging type. 
<p>
An existing change management process can be adapted for Web services so that service consumers are notified about new versions and their backward compatibility. Again, there is nothing new here; most organizations already have a change management process in place to handle changes in shared libraries. 
<p>
Using Maven for managing Web services releases and dependencies has multiple benefits:
<ul>
<li>Ability to use full range of Maven dependency management capabilities including  version range dependency, snapshot and central repositories and so on.
<li>Ability to use Maven dependency reports for dependency analysis.
<li>Web services dependency management is consistent with the dependency management process used for other artifacts, such as jars, wars and so on. Commercial repository products often provide a proprietary mechanism that can only be used for Web services - related  artifacts. 
<li>Tight integration with any Maven or Ant-based build process, no need for using UDDI or proprietary APIs for publishing services. 
<li>Service consumers that do not use Ant or Maven could still participate in the process by downloading Web services artifacts manually using UI provided by Artifactory or a similar product (although using automated approach should be the preferred option). 
</ul>
<p>
Of course, the Maven-based approach does not do anything for managing and enforcing (including run-time enforcement) of Web services policies which is something that commercial registry/repository products can do quite well. So organizations need to evaluate the need for a commercial registry/repository based on types and complexity of the policies they would like to enforce. In many if not most cases the policies are quite straightforward in which case Maven-based solution becomes a viable option.


]]></content:encoded>
			<wfw:commentRss>http://myarch.com/using-maven-repository-as-web-services-registry/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Comparison of SOA Suites</title>
		<link>http://myarch.com/comparison-of-soa-suites</link>
		<comments>http://myarch.com/comparison-of-soa-suites#comments</comments>
		<pubDate>Sun, 17 Jun 2007 22:53:39 +0000</pubDate>
		<dc:creator>Alexander Ananiev</dc:creator>
				<category><![CDATA[BPEL]]></category>
		<category><![CDATA[ESB]]></category>
		<category><![CDATA[SOA]]></category>
		<category><![CDATA[Web services]]></category>

		<guid isPermaLink="false">http://myarch.com/comparison-of-soa-suites</guid>
		<description><![CDATA[Several SOA vendors are trying to put together comprehensive suites of SOA products that in theory should be capable of addressing all aspects of SOA, including governance, integration, business process management and others. Formation of SOA suites is having a tremendous impacts on how SOA products are selected as many organizations are being tempted to [...]]]></description>
			<content:encoded><![CDATA[<p>
Several SOA vendors are trying to put together comprehensive suites of SOA products that in theory should be  capable of 
addressing
all aspects of SOA, including governance, integration, business process management and others.
<p>
Formation of SOA suites is having a tremendous impacts on how SOA products are selected 
as many organizations 
are being tempted to settle for "one stop shop" approach as opposed to doing proper product evaluation 
within each SOA product category. (Interesting discussion about SOA suites is available at 
<a href="http://blogs.zdnet.com/service-oriented/?p=829">ZDNet</a>).
<p>
So what is a SOA suite and how offerings from different vendors support different aspects of SOA? 
The table below attempts to answer this question. 
<span id="more-63"></span>
<p>
One thing to keep in mind is that SOA products within the same category can differ
substantially in terms of their feature sets. Definitions of ESB, registry and other SOA product
categories are not standardized and so vendors are free to categorize their products as they
wish. Detailed analysis and evaluation is still a requirement when selecting SOA products.
</p>
<p>
IBM, BEA and Oracle are emerging as leaders in terms of completeness of their SOA suites. 
Microsoft's products are not as comprehensive, nevertheless Microsoft's marketshare makes it 
a signifcant player - Micorsoft's shops tend to be very loyal to the vendor even if 
Microsoft's SOA story is not as compelling. 
<p>
Other vendors, including Software AG/webMethods and HP have interesting
offerings too, however, they still have some gaps in their capabilities and so they 
are not covered here (perhaps I'll add more vendors in the future).
</p>
<br />
<table border="1" cellpadding="5" cellspacing="0">
  <tr>
    <td>
      &nbsp;
    </td>
    <td>
      IBM
    </td>
    <td>
      BEA
    </td>
    <td>
      Oracle
    </td>
    <td>
      Microsoft
    </td>
  </tr>
  <tr>
    <td>
      Web Services Container (applicaiton server)
    </td>
    <td>
      <a href="http://www-306.ibm.com/software/webservers/appserv/was/">
      WebSphere Application Serer
      </a>
    </td>
    <td>
      <a href="http://bea.com/framework.jsp?CNT=index.htm&#038;FP=/content/products/weblogic/server/">
      WebLogic Application Server
      </a>
    </td>
    <td>
      <a href="http://www.oracle.com/appserver/index.html">
      Oracle Application Server
      </a>
    </td>
    <td>
      .NET/Windows
    </td>
  </tr>
  <tr>
    <td>
      ESB
    </td>
    <td>
      <a href="http://www-306.ibm.com/software/integration/wsesb/">
      WebSphere ESB
      </a>
      <br /><br />
      <a href="http://www-306.ibm.com/software/integration/wbimessagebroker/">
      Message Broker
      </a>

    </td>
    <td>
      <a href="http://bea.com/framework.jsp?CNT=index.htm&#038;FP=/content/products/aqualogic/service_bus/">
      AquaLogic Service Bus
      </a>
    </td>
    <td>
      <a href="http://www.oracle.com/technologies/soa/index.html">
        Enterprise Service Bus
      </a>
      (part of Oracle SOA suite)
    </td>
    <td>
      <a href="www.microsoft.com/biztalk/default.mspx">
      BizTalk Server 
      </a> (some ESB capabilities)
    </td>
  </tr>
  <tr>
    <td>
      Registry/Repository
    </td>
    <td>
      <a href="www.ibm.com/software/integration/wsrr">
      WebSphere Registry and Repository
      </a>
    </td>
    <td>
      <a href="http://bea.com/framework.jsp?CNT=index.htm&#038;FP=/content/products/aqualogic/service_registry/">
      AquaLogic Service Registry
      </a>
      (re-braned Systinet product)
      <br /><br />
      <a href="http://bea.com/framework.jsp?CNT=index.htm&#038;FP=/content/products/aqualogic/repository/">
      AqualLogic Enterprise Repository
      </a>
      (FlashLine aquisition)
    </td>
    <td>
      <a href="http://www.oracle.com/technology/tech/webservices/htdocs/uddi/index.html">
      Oracle Service Registry
      </a>
      (re-braned Systinet product?)
    </td>
    <td>
      &nbsp;
    </td>
  </tr>

  <tr>
    <td>
      Business Process Management 
    </td>
    <td>
      <a href="www-306.ibm.com/software/integration/wps/">
      WebSphere Process Server
      </a> (also includes ESB)
    </td>
    <td>
      <a href="http://bea.com/framework.jsp?CNT=index.htm&#038;FP=/content/products/aqualogic/albpm/">
        AquaLogic BPM Suite
      </a>
      (Fuego acquisition)
    </td>
    <td>
      <a href="http://www.oracle.com/technology/products/ias/bpel/index.html">
        BPEL Process Manager
      </a>
    </td>
    <td>
      <a href="http://www.microsoft.com/technet/prodtechnol/biztalk/2006/default.mspx">
        BizTalk Server
      </a>
    </td>
  </tr>

  <tr>
    <td>
      Business Activity Monitoring
    </td>
    <td>
      <a href="http://www-306.ibm.com/software/integration/wbimonitor/">
      WebSphere Business Monitor
      </a>
    </td>
    <td>
      <a href="http://bea.com/framework.jsp?CNT=index.htm&#038;FP=/content/products/aqualogic/albpm/">
        AquaLogic BPM Suite
      </a>
    </td>
    <td>
      <a href="http://www.oracle.com/technology/products/integration/bam/index.html">
        Business Activity Monitoring
      </a>
    </td>
    <td>
      <a href="http://www.microsoft.com/technet/prodtechnol/biztalk/2006/default.mspx">
        BizTalk Server
      </a>
    </td>
  </tr>

  <tr>
    <td>
      SOA Security
    </td>
    <td>
      <a href="http://www-306.ibm.com/software/tivoli/products/access-mgr-e-bus/">
      Tivoli Access Manager
      </a>
      <br /><br /><a href="http://www-306.ibm.com/software/tivoli/products/federated-identity-mgr/">
      Tivoli Federated Identity Manager
      </a>
      <br /><br /><a href="http://www-306.ibm.com/software/integration/datapower/">
      WebSphere DataPower SOA Appliances
      </a>
    </td>
    <td>
      <a href="http://bea.com/framework.jsp?CNT=overview.htm&#038;FP=/content/products/aqualogic/security/">
        AquaLogic Enterprise Security
      </a>
    </td>
    <td>
      <a href="http://www.oracle.com/technology/products/webservices_manager/index.html">
        Oracle Web Services Manager
      </a>
      (formerly Oblix COREsv)
    </td>
    <td>
      Windows?
    </td>
  </tr>

  <tr>
    <td>
      SOA Management
    </td>
    <td>
      <a href="http://www-306.ibm.com/software/tivoli/products/composite-application-mgr-soa/">
      Tivoli Composite Application Manager for SOA
      </a> (part of Tivoli suite)
    </td>
    <td>
      <a href="http://bea.com/framework.jsp?CNT=index.jsp&#038;FP=/content/products/aqualogic/soa_management/">
        BEA AquaLogic SOA Management
      </a>
    </td>
    <td>
      <a href="http://www.oracle.com/technology/products/webservices_manager/index.html">
        Oracle Web Services Manager
      </a>
    </td>
    <td>
      &nbsp;
    </td>
  </tr>


</table>


 

]]></content:encoded>
			<wfw:commentRss>http://myarch.com/comparison-of-soa-suites/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Will JAX-WS Become the Primary Mechanism for Invoking RESTful Services?</title>
		<link>http://myarch.com/will-jax-ws-become-the-primary-mechanism-for-invoking-restful-services</link>
		<comments>http://myarch.com/will-jax-ws-become-the-primary-mechanism-for-invoking-restful-services#comments</comments>
		<pubDate>Sun, 03 Jun 2007 01:15:40 +0000</pubDate>
		<dc:creator>Alexander Ananiev</dc:creator>
				<category><![CDATA[JAX-WS]]></category>
		<category><![CDATA[Web services]]></category>

		<guid isPermaLink="false">http://myarch.com/will-jax-ws-become-the-primary-mechanism-for-invoking-restful-services</guid>
		<description><![CDATA[Developers working with REST and XML/HTTP services have traditionally used light-weight APIs, such as java.net classes or Apache HttpClient. Web services APIs provided by JAX-RPC were SOAP and "enterprise" only and they required J2EE libraries. The situation changed with the release of JAX-WS and its inclusion into Java SE 6. JAX-WS supports RESTful services; also, [...]]]></description>
			<content:encoded><![CDATA[ <p>
Developers working with REST and XML/HTTP services have traditionally used light-weight APIs, such as java.net classes or <a href="http://jakarta.apache.org/commons/httpclient/">Apache HttpClient</a>. Web services APIs provided  by JAX-RPC were SOAP and "enterprise" only and  they required J2EE libraries. The situation changed with the release of JAX-WS and its inclusion into Java SE 6. JAX-WS supports RESTful services; also, its <a href="http://java.sun.com/javase/6/docs/api/javax/xml/ws/Dispatch.html">Dispatch interface</a> allows clients to work with XML directly as opposed to having to use object mapping or completely unwieldy SAAJ API. A nice example of using JAX-WS to implement a client for a RESTful service is available in <a href="http://weblogs.java.net/blog/mhadley/archive/2006/01/restful_web_ser.html ">Mark Hadley's blog</a>.
</p>
<p>
However, I don't think that JAX-WS is going to become the primary way of implementing RESTful clients just yet. In many situations, HttpClient provides more flexibility and control over HTTP calls.
</p>
<p>

For example, it is very straightforward to turn on basic authentication for a client using HttpClient APIs:
<span id="more-61"></span>
<code>
<pre>
 HttpState httpState =httpClient.getState();
 httpState.setCredentials( AuthScope.ANY, 
     new UsernamePasswordCredentials(username, password));
 // Set the authentication header on the first request, don't wait for 401
 httpClient.getParams().setAuthenticationPreemptive(true);
        
 postMethod.setDoAuthentication(true);
</pre>
</code>
<p>

Implementing the same requirement in JAX-WS is not a big deal either:
<code>
<pre>

Map<String, Object> requestContext = dispatcher.getRequestContext();
requestContext.put(BindingProvider.USERNAME_PROPERTY, username); 
requestContext.put(BindingProvider.PASSWORD_PROPERTY, password);
</pre>
</code>
<p>

However, it is not clear how to tell the client to set basic authentication header on the very request in case of the service does not issue 401 basic authentication challenge (which is pretty common). It is also not clear if there is a way to change authentication scheme (say, to digest) or authentication scope. 
</p>
<p>

There are also other examples that demonstrate that in attempt to abstract the details of the transport protocol JAX-WS limits capabilities of the clients. 
</p>
<p>
However, using JAX-WS REST capabilities still makes sense for applications that use both SOAP and RESTfull services. This allows developers to use consistent API for both types of services. Also, in some instances, a service provider may initially implement a service using XML/HTTP and later decide to switch to SOAP, say, to be able to use some of the WS-* specifications (this is actually a fairly common situation within an enterprise). In this case, using JAX-WS will certainly make the transition easier for the clients. 

]]></content:encoded>
			<wfw:commentRss>http://myarch.com/will-jax-ws-become-the-primary-mechanism-for-invoking-restful-services/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>soapUI vs. JUnit</title>
		<link>http://myarch.com/soapui-vs-junit</link>
		<comments>http://myarch.com/soapui-vs-junit#comments</comments>
		<pubDate>Sun, 29 Apr 2007 03:15:10 +0000</pubDate>
		<dc:creator>Alexander Ananiev</dc:creator>
				<category><![CDATA[Web services]]></category>

		<guid isPermaLink="false">http://myarch.com/soapui-vs-junit</guid>
		<description><![CDATA[Open source soapUI tool has a number of benefits over developing test cases in Java using JUnit framework. Some of these benefits include: Use of UI for creating/configuring tests. This makes it possible for non-programmers to develop tests, which means that testing of Web services can be performed by a QA/system test group. Auto-generation of [...]]]></description>
			<content:encoded><![CDATA[<p>
Open source <a href="http://www.soapui.org">soapUI</a> tool has a number of benefits over developing test cases in Java  using JUnit framework. Some of these benefits include:
</p>
<ul>
<li>
Use of UI for creating/configuring tests. This makes it possible for non-programmers to develop tests, which means that testing of Web services can be performed by a QA/system test group. 
</li>
<li>
Auto-generation of test messages based on WSDL.
</li>
<li>
Ability to externalize test data using property files.
</li>
<li>
Built-in assertions, such as checking for SOAP faults and validity of the schema. 
</li>
<li>
Built-in stress testing capabilities. 
</li>
<li>
Management of endpoint URLs.
</li>
</ul>
<p>
Overall, soapUI allows developers and testers to create tests quicker and also makes tests easier to manage and update. 
</p>
<p>
However, one needs to understand shortcomings of this approach. soapUI uses its own Web services client. The way it creates test messages is different from how regular (JAX-WS-based and other) Web services clients work. soapUI completely skips the step of generating Java classes from WSDL. It does not have to deal with XML marshalling/unmarshalling from/to Java objects. As a result, you are not invoking your service the way it will be invoked by real Web service consumers. 
</p>
<p>
Technically, it may not be an issue in a majority of cases. The fact that soapUI is able to parse your WSDL/schema and generate test message means that you have a valid WSDL that should also be consumable by other technologies. However, it is possible that your WSDL/ schema may lead to sub-optimal (albeit perfectly valid) generated classes. For example, the schema that defines &lt;addresses&gt;&lt;address&gt;...&lt;/address&gt;...&lt;/addresses&gt; XML will result in JAXB compiler generating Addresses class that returns the list of type Address. This may or may not be how you want Java classes to look like for the clients. Perhaps you may want to consider to get rid of &lt;addresses&gt; so that no extra class is generated. 
</p>
<p>

In other words, using soapUI (or similar UI-based Web services testing tools, such as <a href="http://www.mindreef.com/products/soapscope/features.php">SOAPScope</a>) does not allow you to understand all the details of how your Web service will be consumed in the real world. 
</p>
<p>

Another advantage of JUnit test cases is that they can be used as examples illustrating the use of your service. The test classes can be published along with other Web service documentation or handed over to consumers to help them jump-start their client implementations. Unfortunately, soapUI test cases can't be used for this purpose. 
</p>
<p>

The shortcomings of visual testing tools such as soapUI can be addressed by complementing soapUI tests with JUnit tests. I usually start with soapUI since it is so easy to get up and running with it. Once soapUI test is implemented, I go back to Java, generate Web services client classes from WSDL and implement a JUnit test class.  The logic that goes into a JUnit test class obviously depends upon a Web service. But at the very least, there should be one JUnit test per service that invokes the service using generated classes and libraries provided by your Web service product of choice. This way, we can see exactly how our services will be consumed by our clients. 
</p>




]]></content:encoded>
			<wfw:commentRss>http://myarch.com/soapui-vs-junit/feed</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Create JAX-WS Service in 5 Minutes (Tutorial)</title>
		<link>http://myarch.com/create-jax-ws-service-in-5-minutes</link>
		<comments>http://myarch.com/create-jax-ws-service-in-5-minutes#comments</comments>
		<pubDate>Thu, 19 Apr 2007 04:17:38 +0000</pubDate>
		<dc:creator>Alexander Ananiev</dc:creator>
				<category><![CDATA[JAX-WS]]></category>
		<category><![CDATA[SOA]]></category>
		<category><![CDATA[Web services]]></category>

		<guid isPermaLink="false">http://myarch.com/create-jax-ws-service-in-5-minutes</guid>
		<description><![CDATA[This is a brief tutorial describing how to create a Web service using WSDL and annotations. The approach presented here allows you to design and implement your WSDL/Schema and Java classes independently without having to generate anything. You can then use annotations to map Java classes to appropriate WSDL and Schema elements. Since JAXB and [...]]]></description>
			<content:encoded><![CDATA[<p>
This is a brief tutorial describing how to create a Web service using WSDL and annotations. 
The approach presented here allows you to design and implement your WSDL/Schema and Java classes
independently without having to generate anything. You can then use annotations 
to map Java classes to appropriate WSDL and Schema elements. 
<br />Since JAXB and JAX-WS have sensible defaults, the number of annotations can be kept
to the minimum. 
</p>
<p>
In my opinion, it is always best to develop WSDL and schemas by hand to ensure that the
service contract is appropriately defined and also that the schema
can be re-used (by other services) and extended if necessary. I do not recommend using annotations 
for automatically producing WSDL and schemas at runtime as this leads to
simplistic schemas and WSDLs.
</p>
<p>
Generating classes from WSDL/schema sometimes makes sense, say in situations 
when you have to use a pre-defined schema. However, as with any code generation,
it creates a maitainance problem especially if there is a need to put behavior 
into generated classes. So it is desirable to be able to evolve object model and 
service implementation classes independently
from WSDL/schemas. You can do it quite easily by following the steps below. 
</p>
<p>
Even though I use the word "create" when describing some of the steps, the same approach 
will also work for updates or refactoring caused by changes in 
service requirements. 
</p>
<p>
The steps are the following:
</p>
<ul>
<li>
Design your service interface. In our case the service has a single "add" operation that accepts
a "person" document, adds it to a database and returns back the status:
<br /> <code>public String add( Person person )</code> 
</li>
<li>
Design your data/object model. In our case Person class has three fields  
(ssn, firstName, lastName) and the list of addresses. 
Real world examples will certainly be more complex, but this is good enough for our purposes.
</li>
<li>
Define XML schema based on your object model. 
Use strict datatypes where possible. For example, we use 
<code>xsd:token</code> instead of <code>xsd:string</code> since "token" does not allow 
carriage return, tabs, and leading spaces: 
</li>
<code>
  <pre>
    &lt;xsd:element name="person"&gt;
        &lt;xsd:complexType &gt;
            &lt;xsd:sequence&gt;
                &lt;xsd:element name="ssn" type="xsd:token" 
                        minOccurs="1" maxOccurs="1"/&gt;
                &lt;xsd:element name="firstName" type="xsd:token" 
                        minOccurs="1" maxOccurs="1"/&gt;
                &lt;xsd:element name="lastName" type="xsd:token" 
                        minOccurs="1" maxOccurs="1" /&gt;
                &lt;xsd:element name="address" type="Address" 
                        minOccurs="1" maxOccurs="unbounded"/&gt; 
            &lt;/xsd:sequence&gt;
        &lt;/xsd:complexType&gt;
    &lt;/xsd:element&gt;
  </pre>
</code>
<p>
<a href="/files/jaxws_tutorial/person.xsd">Complete schema file</a>
</p>

<li>
Create an XML file for your schema so you can test the schema. 
You can generate an XML instance document 
automatically from Eclipse (assuming you're using <a href="http://www.eclipse.org/webtools/main.php">
Eclipse Web Tool Platform</a>) 
by right-clicking on the schema in navigator and selecting "generate". 
Test the schema by changing data and making sure that you're getting correct 
validation errors.
</li>
<p>
<a href="/files/jaxws_tutorial/person.xml">Sample XML file</a>
</p>
<li>
  Create WSDL. Our WSDL imports the schema that we just created. 
  Note that the WSDL target namespace is different from the schema namespace since the 
  same schema can be reused by different WSDLs: 
</li>
<code>
  <pre>
    &lt;wsdl:definitions 
          targetNamespace="http://personservice" 
          xmlns="http://personservice" 
          xmlns:pers="http://person"
          xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" 
          xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 
          xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" 
          xmlns:xsd="http://www.w3.org/2001/XMLSchema"&gt;
  
      &lt;wsdl:types&gt;
            &lt;xsd:import namespace="http://person" 
                    schemaLocation="person.xsd" /&gt;
            &lt;!-- Return value --&gt;
            &lt;xsd:element name="status" type="xsd:string" /&gt;
      &lt;/wsdl:types&gt;
      ...
  </pre>
</code>
<p>
<a href="/files/jaxws_tutorial/personService.wsdl">Complete WSDL file</a>
</p>
  <li>
  Create your object model classes and annotate them with appropriate JAXB annotations:
  </li>
<code>
  <pre>
    // By default JAXB uses getters/setters for marshaling/unmarshaling
    // Using fields access allows us not to define getters/setters for 
    // all mapped instance variables.
    @XmlAccessorType(XmlAccessType.FIELD)
    // We need to provide the namespace, otherwise it defaults to
    // the package name
    @XmlRootElement(namespace="http://person")
    public class Person {
    
        // we only need annotations for variables that don't match 
        // element names
        private String ssn;
        private String firstName;
        private String lastName;
        
        @XmlElement(name = "address")
        protected List&lt;Address&gt; addresses;
      ...
  </pre>
</code>
<p>
<a href="/files/jaxws_tutorial/Person.java">Person class</a>
<br />
<a href="/files/jaxws_tutorial/Address.java">Address class</a>
</p>
<li>
  Create ObjectFactory class. This class is required by JAXB and it 
  should contain factory methods for all JAXB-mapped classes. ObjectFactory 
  must resides in the same package with object model classes. 
</li>
<code>
  <pre>
    @XmlRegistry
    public class ObjectFactory {
    
        public Person createPerson() {
            return new Person();
        }
        
        public Address createAddress() {
            return new Address();
        }
    }
  </pre>
</code>
<p>
<a href="/files/jaxws_tutorial/ObjectFactory.java">ObjectFactory class</a>
</p>

<li>
Create Web Service implementation class. Note that with JAX-WS 
Service Endpoint Interface (SEI) is optional, so all you need is an implementation class:
</li>
<code>
  <pre>
      @WebService(
              // all values must match corresponding attributes 
              // and elements of the WSDL file
          
              // Name of the port type in WSDL
              name="PersonService",
              // Target namespace of WSDL, could be 
              // different from the schema namespace
              targetNamespace="http://personservice",
              serviceName="PersonServicePorts",
              portName="PersonService",
              // the file must be available to Web container
              wsdlLocation="WEB-INF/wsdl/PersonService.wsdl"
      )
      
      /*
       * We'are using "bare" style since "add" operation 
       * takes only one argument, person document. Therefore, there 
       * is no need to "wrap" it by nesting it inside operation element.
       * Note that "wrapped" style is the default.
       */
      @SOAPBinding(parameterStyle=SOAPBinding.ParameterStyle.BARE)
      
      public class PersonService {
          
          @WebResult(name = "status")
          public String add( Person person ) {
              
              System.out.println("Adding person :"+person );
              return "Added "+person.getFullName();
          }
      }
  </pre>
</code>
<p>
<a href="/files/jaxws_tutorial/PersonService.java">PersonService class</a>
</p>
<li>
Deploy your Web service to your application server or Web services container. 
Refer to your application server documentation for details. 
</li>
<li>
Test the service. 
The easiest way to test the service is to use open source <a href="http://www.soapui.org">soapUI tool</a>.
You can install it as Eclipse plugin (there are also plugins for
NetBeans and IDEA) following <a href="http://www.soapui.org/eclipse/index.html">these instructions</a>. 
In Eclipse, open SoapUI view, right click and create a project from your WSDL file. SoapUI will automatically
create a sample SOAP request which you can update with your data. You can run it right away.
Later, you can create a repeatable test suite with parametirized data using SoapUI properties and 
assertions:
</li>
</ul>
<br />
<br />
<img src="/files/jaxws_tutorial/soapui.jpg" >

<p>
<a href="/files/jaxws_tutorial/personService-soapui-project.xml">SoapUI Project</a> (you can import it into SoapUI).
<p>
You can also <a href="/files/jaxws_tutorial/personService.zip">download</a> all files in a zip file.
</p>
]]></content:encoded>
			<wfw:commentRss>http://myarch.com/create-jax-ws-service-in-5-minutes/feed</wfw:commentRss>
		<slash:comments>48</slash:comments>
		</item>
		<item>
		<title>WS-I Basic Security Profile Has Been Released</title>
		<link>http://myarch.com/ws-i-basic-security-profile-has-been-released</link>
		<comments>http://myarch.com/ws-i-basic-security-profile-has-been-released#comments</comments>
		<pubDate>Fri, 13 Apr 2007 01:52:34 +0000</pubDate>
		<dc:creator>Alexander Ananiev</dc:creator>
				<category><![CDATA[SOA]]></category>
		<category><![CDATA[Web services]]></category>

		<guid isPermaLink="false">http://myarch.com/ws-i-basic-security-profile-has-been-released</guid>
		<description><![CDATA[The final version of Basic Security Profile 1.0 (BSP) was recently been released by WS-I. This is certainly a welcome event; WS-Security is broad and complex and it has been plagued by interoperability issues for quite some time (although the situation has improved in the last year or so). The BSP document seems to have [...]]]></description>
			<content:encoded><![CDATA[<p>
The final version of <a href="http://www.ws-i.org/Profiles/BasicSecurityProfile-1.0.html">Basic Security Profile 1.0 (BSP)</a> was recently been released by WS-I. This is certainly a welcome event; WS-Security is broad and complex and it has been plagued by interoperability issues for quite some time (although the situation has improved in the last year or so). The BSP document seems to have pretty good level of details with plenty of good examples that are easy to follow. 
</p>
<p>
I looked at a few messages generated by Axis used in conjunction with Apache WS-Security implementation called <a href="http://ws.apache.org/axis2/modules/rampart/1_0/security-module.html">Rampart</a> and at the first glance they seem to be compliant with BSP, although all my examples use WS-Security username token profile, which is the simplest form of passing credentials with WS-Security. 
</p>
<p>
As an example, Rampart generates the correct form of the password tag, which includes "type" attribute (this attribute is not mandated by WS-Security, however, it is required by BSB):
</p>
<code>
<pre>
&lt;wsse:Password
      Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordDigest"&gt;
      B5twk47KwSrjeg==
   &lt;/wsse:Password&gt;
</pre>
</code>

<p>
BSP is going to make the use of WS-Security more widespread, although this is not going to happen overnight. Currently, none of the public Web services (Yahoo, Ebay, Amazon) use WS-Security, which is not surprising since the standard is not fully supported by such languages as PHP, Python and Ruby (although some aspects of WS-Security <a href=" http://wso2.org/wiki/display/wsfphp/WS-Security+API">are supported</a> in PHP). Even platforms for commercial services, such as <a href="http://www.strikeiron.com">StrikeIron</a>, don't use it (StrikeIron does support WS-Security for communication between its broker and service providers, but not for client calls).  
</p>
<p>
In any event, I'm pretty confident that we can count on rising WS-Security adoption in an enterprise. 
</p>]]></content:encoded>
			<wfw:commentRss>http://myarch.com/ws-i-basic-security-profile-has-been-released/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WSDL Naming Conventions</title>
		<link>http://myarch.com/wsdl-naming-conventions</link>
		<comments>http://myarch.com/wsdl-naming-conventions#comments</comments>
		<pubDate>Mon, 09 Apr 2007 01:27:16 +0000</pubDate>
		<dc:creator>Alexander Ananiev</dc:creator>
				<category><![CDATA[SOA]]></category>
		<category><![CDATA[Web services]]></category>

		<guid isPermaLink="false">http://myarch.com/wsdl-naming-conventions</guid>
		<description><![CDATA[Web service providers communicate with their customers (consumers) by the means of publishing WSLD of the service. In most cases, developers create the client code for the service by generating classes from the published WSDL file. While JAX-WS makes it possible to avoid code generation entirely (as I described in this post) and hand-code all [...]]]></description>
			<content:encoded><![CDATA[<p>
Web service providers communicate with their customers (consumers) by the means of publishing WSLD of the service. In most cases, developers create the client code for the service by generating classes from the published WSDL file. While JAX-WS makes it possible to avoid code generation entirely (as I described in 
<a href="http://myarch.com/web-services-without-code-generation">this post</a>) and hand-code all client-side classes, in all but the most trivial cases using code generation is the easiest way to start developing a Web service client.
</p>
<p>
Service providers need to keep in mind that WSDL is the only "bridge" between providers and consumers. Service providers may have great clean code with nicely defined interfaces and object model; however, this code won't be shared with consumers (unless, perhaps, we are talking about an internal service used for integrating components of the same application, but even in this case developers should beware of created tight coupling). Therefore we need to make sure that WSDL that we publish will help service consumers generate good client-side code. 
</p>
<p>
JAX-WS mandates the following mappings between WSDL and the generated client code:
</p>
<ul>
<li>
<code>wsdl:portType</code> translates to the Java interface (business interface) of a Web service (where each operation maps to a method of the interface). 
</li>
<li>
<code>wsdl:service</code> translates to, essentially, a factory class that extends javax.xml.ws.Service. This class has "get" methods for each port defined as part of the service element. "get<i>PortName</i>" methods return dynamic proxy that implements the service business interface. 
</li>
<li>
Some tools (e.g., <a href="https://www14.software.ibm.com/iwm/web/cc/earlyprograms/websphere/wsvwas61/" >WebSphere Web Services Feature Pack</a>) generate additional proxy classes (not to be confused with the dynamic proxy created by the Service subclass) for each port. The proxy class encapsulates logic for accessing javax.xml.ws.Service to invoke the right "get" method. Client code then only needs to instantiate the proxy class and call a business method.  The name of the proxy class is <i>NameOfThePort</i>Proxy.
</li>
</ul>
<p>
Keeping these rules in mind, I use the following naming conventions to ensure that the generated code will contain classes with meaningful names:
</p>

<ul>
<li>
I use the name of the service business interface as the name of the port type, e.g., POProcessor or PersonService. This ensures that service provider and service consumer will use the same name to refer to the business interface (remember that in general service providers and service consumers do not share any Java classes or interfaces). I never add  "PortType" to the name, as this obscures the name of the interface generated for the client. Additionally, it makes names long and POProcessorPortType.process(po) just does not look too good in the code.
</li>

<li> 
I add "Ports" to the service name, e.g., POProcessorPorts or PersonServicePorts. I don't like adding "Service" since most Web service business interfaces already have the name "Service" in them, and "PersonServiceService" looks rather ugly. 
</li>

<li>
For ports, I also use the name of the service business interface (i.e. the port type name). More often then not, SOAP/HTTP is the only service binding and so port type name can be used without any changes. If there are other bindings, I add the binding type to the port type name, e.g., PersonServiceJMS. 
</li>
</ul>
<p>
The following example illustrates the approach:
</p>
<img src="/images/wsdl_naming.jpg" />


]]></content:encoded>
			<wfw:commentRss>http://myarch.com/wsdl-naming-conventions/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JSON Pros and Cons</title>
		<link>http://myarch.com/json-pros-and-cons</link>
		<comments>http://myarch.com/json-pros-and-cons#comments</comments>
		<pubDate>Fri, 09 Feb 2007 03:51:24 +0000</pubDate>
		<dc:creator>Alexander Ananiev</dc:creator>
				<category><![CDATA[SOA]]></category>
		<category><![CDATA[Web services]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://myarch.com/json-pros-and-cons</guid>
		<description><![CDATA[JSON is a simple object serialization approach based on the JavaScript object initializers syntax. The code for initializer (object literal) is put into a string and then interpreted using JavaScript eval() function or JSON parser (which is very lightweight): serializedObj='{firstName:"john", lastName:"doe"}'; ... // This is just an example, JSON parser should be used instead // [...]]]></description>
			<content:encoded><![CDATA[<p>
<a href="http://json.org">JSON</a> is a simple object serialization approach based on 
the JavaScript object initializers syntax. The code for initializer (object 
literal) is put into a string and then interpreted using JavaScript eval() 
function or JSON parser (which is very lightweight):
</p>
<code>
<pre>
serializedObj='{firstName:"john", lastName:"doe"}';
...
// This is just an example, JSON parser should be used instead
// to avoid security vulnerabilities of "eval"
var obj = eval("(" + serializedObj + ")");
document.getElementById("firstName").innerHTML=person.firstName;
</pre>
</code>
<p>
JSON is used extensively in various AJAX frameworks and toolkits to provide easy 
object serialization for remote calls. It is is supported by both <a href="http://code.google.com/webtoolkit">GWT</a> 
and <a href="http://dojotoolkit.org">DOJO</a>. There is a growing realization that 
perhaps JSON should be considered as an option when implementing SOA, for 
example Dion Hinchcliffe recently published a <a href="http://hinchcliffe.org/archive/2007/01/20/12675.aspx">blog 
entry</a> suggesting that JSON (and other Web 2.0 technologies) must be 
seriously considered by SOA architects.
</p>
<p>
So what are the benefits of using JSON relative to XML (for this comparison I 
want to focus  just on XML and stay away from SOAP)? Here is my brief take on 
that, there are also numerous other <a href="http://blogs.msdn.com/mikechampion/archive/2006/12/21/the-json-vs-xml-debate-begins-in-earnest.aspx">articles 
and posts</a> on the subjects.
</p>
<table border="1" cellpadding="3" cellspacing="0">
  <tr>
    <th>JSON</th>
    <th>XML</th>
  </tr>
  <tr>
    <td colspan=2 align="center">JSON strengths</td>
  </tr>

  <tr>
    <td>Fully automated way of de-serializing/serializing JavaScript objects, 
    minimum to no coding</td>
    <td>Developers have to write JavaScript code to serialize/de-serialize to/from 
    XML</td>
  </tr>


  <tr>
    <td>Very good support by all browsers</td>
    <td>While XML parsers are built-in into all modern browsers, cross-browser XML 
    parsing can be tricky, e.g., see <a href="http://www-128.ibm.com/developerworks/web/library/ws-wsajax/">this 
    article</a></td>
  </tr>

  <tr>
    <td>Concise format thanks to name/value pair -based approach</td>
    <td>Verbose format because of tags and namespaces</td>
  </tr>

  <tr>
    <td>Fast object de-serialization in JavaScript (based on anecdotal evidence )</td>
    <td>Slower de-serialization in JavaScript (based on anecdotal evidence )</td>
  </tr>

  <tr>
    <td>Supported by many AJAX toolkits and JavaScript libraries</td>
    <td>Not very well supported by AJAX toolkits</td>
  </tr>

  <tr>
    <td>Simple API (available for JavaScript and many other languages)</td>
    <td>More complex APIs</td>
  </tr>

  <tr>
    <td colspan=2 align="center">JSON weaknesses</td>
  </tr>


  <tr>
    <td>No support for formal grammar definition, hence interface contracts are hard to 
    communicate and enforce</td>
    <td>XML Schema or DTD can be used to define grammars</td>
  </tr>


  <tr>
    <td>No namespace support, hence poor extensibility</td>
    <td>Good namespace support, many different extensibility options in Schema</td>
  </tr>


  <tr>
    <td>Limited development tools support</td>
    <td>Supported by wide array of development and other (e.g., transformation) 
    tools</td>
  </tr>


  <tr>
    <td>Narrow focus, used for RPC only, primarily with JavaScript clients (although 
    one can argue that it's one of the strengths)</td>
    <td>Broad focus - can be used for RPC, EDI, metadata, you name it</td>
  </tr>


  <tr>
    <td>No support in Web services -related products (application servers, ESBs, etc), 
    at least not yet    </td>
    <td>Supported by all Web services products</td>
  </tr>

</table>
<p>
So the bottom line is that JSON and XML are, of course, two very different 
technologies; XML is much broader in scope so I'm not even sure if comparing 
them side by side is fair.
</p>
<p>
As an object serialization technology for AJAX (or should it now be called AJAJ 
since we've replaced XML with JSON?) JSON looks very appealing. Anybody who ever 
tried parsing SOAP directly in a browser (while having to support multiple 
browsers) can attest that this is not a straightforward task. JSON simplifies 
this task dramatically. So I think that ESB vendors should definitely start 
thinking about adding JSON to the list of formats they support.
</p>
<p>
One of the keys to SOA success is that it should be easy to consume a service, 
i.e., the entry barrier for service consumers must be low to support "grass root" SOA adoption. 
While a top-down SOA effort may succeed, it will certainly take 
longer than bottom-up ("grass-root") approach when developers are able to 
consume services as they see fit. AJAX/JSON fits this bill perfectly - it is 
easily understood by developers and it does not require any Web services -specific 
tools or infrastructure.
</p>
<p>
So overall I'm pretty enthusiastic about JSON. 
</p>
]]></content:encoded>
			<wfw:commentRss>http://myarch.com/json-pros-and-cons/feed</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Who Needs Web Services Repository?</title>
		<link>http://myarch.com/who-needs-web-services-repository</link>
		<comments>http://myarch.com/who-needs-web-services-repository#comments</comments>
		<pubDate>Wed, 10 Jan 2007 05:37:08 +0000</pubDate>
		<dc:creator>Alexander Ananiev</dc:creator>
				<category><![CDATA[SOA]]></category>
		<category><![CDATA[Web services]]></category>

		<guid isPermaLink="false">http://myarch.com/who-needs-web-services-repository</guid>
		<description><![CDATA[Web services repositories are almost always mentioned in conjunction with SOA governance as its key enabler and there is a widespread notion that a repository is a key component of an SOA. To me there are two types of SOA governance. There is strategic governance which is part of the overall IT governance that deals [...]]]></description>
			<content:encoded><![CDATA[<p>
Web services repositories are almost always mentioned in conjunction with SOA governance as its key enabler and there is a widespread notion that a repository is a key component of an SOA. 
</p>
<p>
To me there are two types of SOA governance. There is strategic governance which is part of the overall IT governance that deals primarily with funding and other "big" decisions ("big G"). There is also more "tactical" SOA governance which deals mostly with configuration management (CM) (e.g., release management) of individual Web services ("small g"). 
</p>
<p>
There is also Web service management, including SLA monitoring and enforcement, and, perhaps, security, but to me that's just an operational aspect of SOA governance and it's distinctly separate from big G (funding) and small g (configuration and change management). 
</p>
<p>
So, having been in a developer's shoes for the most of my career, I'm primarily interested in "small g", I'm sure management types can figure out "Big G" much better than I am. 
</p>
<p>
So how this "small g", or SOA CM, is different from CM that we've been doing routinely over the last, well, at least 20 years? Why all of a sudden we're told that we need new tools for that, such as Web services registries and repositories? 
</p>
<p>
I thought that we already have a repository that we know very well, and this is our version control repository - CVS, SVN, ClearCase, Perforce, whatever. So all our code and code-related artifacts, including, of course, WSDL and schema files (and whatever WS-* files, such as WS-Policy, we'll need in the future) are already checked into our version control repository of choice. We can do a lot of good things with version control repositories, including all kinds of analysis, diffing, etc. We can develop ant or rake script to integrate build and deploy process with version control. With tools like Maven we can do pretty complicated dependency management. There are also continuous integration tools, build servers, change management tools, reporting tools and all kinds of other software helping us to deal with the code we're developing. In other words, we know how to "govern" our code and so "governing" a few extra XML files (WSDL, Schema) should not be that difficult or special.
</p>
<p>
So I just don't see how a Web services repository is going to make any of these tasks easier.  
</p>
<p>
What we do need is better WSDL and Schema presentation and visualization tools, so that Web service consumers don't have to always deal with raw XML. But I doubt this task warrants an expensive SOA repository, and there are some <a href="/web-services-and-publishing-schema">tools out there</a> that can do it on the cheap.
</p>
<p>
SOA repositories also provide some run-time APIs so that service consumers or intermediaries can dynamically discover the most suitable service. Quite frankly, I think this scenario is a little far-fetched, especially given the lack of support for dynamic discovery in existing WS tools and products. Then there is also support for dynamic endpoints a la UDDI (or directly using UDDI standard), but, again, dynamic endpoints can be supported much more easily using configuration files as opposed to heavy-weight run-time APIs. Extremely low acceptance of UDDI is the proof of that. 
</p>
<p>
So perhaps SOA registries and repositories are useful for "Big G" governance tasks (although I have my doubts - e.g., how relevant are WSDL files for funding decisions?), but the "small g", that is, CM tasks, can certainly be more efficiently handled by existing CM tools. SOA repository vendors should think about extending existing CM tools instead of trying to create specialized environments just for Web services.  
</p>

]]></content:encoded>
			<wfw:commentRss>http://myarch.com/who-needs-web-services-repository/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

