<?xml version="1.0" encoding="UTF-8"?><!-- generator="wordpress.com" -->
<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/"
	>

<channel>
	<title>wsdl &amp;laquo; WordPress.com Tag Feed</title>
	<link>http://en.wordpress.com/tag/wsdl/</link>
	<description>Feed of posts on WordPress.com tagged "wsdl"</description>
	<pubDate>Mon, 28 Dec 2009 13:27:17 +0000</pubDate>

	<generator>http://en.wordpress.com/tags/</generator>
	<language>en</language>

<item>
<title><![CDATA[wsdl references generated by a WCF service hosted in IIS uses machine name vs ip...]]></title>
<link>http://dwhittenburg.wordpress.com/2009/12/21/iis-hosted-wcf-service-issues-with-references-in-generated-wsdl/</link>
<pubDate>Mon, 21 Dec 2009 19:31:48 +0000</pubDate>
<dc:creator>dwhittenburg</dc:creator>
<guid>http://dwhittenburg.wordpress.com/2009/12/21/iis-hosted-wcf-service-issues-with-references-in-generated-wsdl/</guid>
<description><![CDATA[The problem: I created a WCF service library and was able to consume it in a web site on my local ma]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p><strong>The problem</strong>:</p>
<p style="padding-left:30px;">I created a WCF service library and was able to consume it in a web site on my local machine and call the functions within the service library via creating a proxy class that was generated via svcutil.exe.  I moved the .svc, .config and /bin to my development server and tried to access the .svc and noticed that the reference exposed was to the machine name of the server rather than the ip that I was expecting.  Because the server is not on the domain, I am unable to access the references from my local machine.</p>
<p><strong>The solution</strong>:</p>
<p style="padding-left:30px;">Thanks to the linked blog below I found one solution in which I can set the IIS Site Binding that will allow the service to use this as the base address.  A link to this blog is <a href="http://blogs.msdn.com/wenlong/archive/2007/08/02/how-to-change-hostname-in-wsdl-of-an-iis-hosted-service.aspx">http://blogs.msdn.com/wenlong/archive/2007/08/02/how-to-change-hostname-in-wsdl-of-an-iis-hosted-service.aspx</a>.</p>
<p><strong>Follow up</strong>:</p>
<p style="padding-left:30px;">I&#8217;m not sure why this isn&#8217;t a setting in the config file.  I&#8217;m still looking into this.  Here are some posts on the issue at Stackoverflow.com <a href="http://stackoverflow.com/questions/1925519/net-wcf-service-references-use-server-name-rather-than-ip-causing-issues-when-co">http://stackoverflow.com/questions/1925519/net-wcf-service-references-use-server-name-rather-than-ip-causing-issues-when-co</a> and <a href="http://stackoverflow.com/questions/1941900/wcf-hosting-service-in-iis-machine-name-automattically-being-picked-up-by-wcf">http://stackoverflow.com/questions/1941900/wcf-hosting-service-in-iis-machine-name-automattically-being-picked-up-by-wcf</a> and <a href="http://stackoverflow.com/questions/1220904/how-to-bind-wcf-service-to-ip-address">http://stackoverflow.com/questions/1220904/how-to-bind-wcf-service-to-ip-address</a></p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Petals Master 1.0 is out]]></title>
<link>http://chamerling.wordpress.com/2009/12/14/petals-master-1-0-is-out/</link>
<pubDate>Mon, 14 Dec 2009 14:40:09 +0000</pubDate>
<dc:creator>Kitov</dc:creator>
<guid>http://chamerling.wordpress.com/2009/12/14/petals-master-1-0-is-out/</guid>
<description><![CDATA[Petals Master v1.0, the first official version of the Petals governance tool has been finally releas]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p><a href="http://dragon.ow2.org">Petals Master</a> v1.0, the first official version of the Petals governance tool has been finally released on OW2 today. Here is the quick release note from the Team :</p>
<blockquote><p>Petals Master 1.0, includes a lot of improvements for users, as well as optimisations, and nice new features :</p>
<ul>
<li>Categorize your services, endpoints and enterprises with UDDI based categories or add your own categorization value sets</li>
<li>Community capabilities : Share ratings, tags and comments on registered services and endpoints with all users</li>
<li>Share additional information about services by uploading related documents. Supported related document types are: DOC, PDF, XML, HTML, XLS, PPT, TXT, RTF, ODT, ODS, ODP</li>
<li>Identify your Enterprises with UDDI based identification system (Thomas Register, Dun and Bradstreet (DUNS)), or add your own identification system)</li>
<li>Search registered entities with a UDDI V2/V3 compliant Inquiry WS API</li>
<li>Do all what you can do with Petals Master UI with the Petals Master specific WS API</li>
<li>SLA Management is disabled, but will be back soon, with lots of improvements: SLA enforcement, service contract creation and management based on information collected on execution environments</li>
<li>Integration with new Petals ESB v3.0 Camelia edition: Govern services and endpoints deployed in Petals ESB by just providing Petals ESB specific WS address and click &#8220;synchronize&#8221;. That&#8217;s all !</li>
</ul>
</blockquote>
<p>As mentioned, this tool is integrated with Petals ESB v3.x, so now you can govern services from your Entreprise Service Bus.<br />
There are also several new tools which are connected to Petals ESB, I think that more news will come soon&#8230;</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Could not see my WSDL using Apache Axis 2 with Eclipse WTP]]></title>
<link>http://ltalbot.wordpress.com/2009/12/07/could-not-see-my-wsdl-using-apache-axis-2-with-eclipse-wtp/</link>
<pubDate>Mon, 07 Dec 2009 13:23:10 +0000</pubDate>
<dc:creator>ltalbot</dc:creator>
<guid>http://ltalbot.wordpress.com/2009/12/07/could-not-see-my-wsdl-using-apache-axis-2-with-eclipse-wtp/</guid>
<description><![CDATA[I have spent some time figuring out why I could not see any WSDL despite everything else seemed to b]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>I have spent some time figuring out why I could not see any WSDL despite everything else seemed to be OK.</p>
<p>After having followed these kind of steps: <a href="http://www.softwareagility.gr/index.php?q=node/21"> Creating web services with Eclipse (Bottom up)</a> it appears that I could not see any WSDL.<br />
So I have typed <a href="http://localhost:8080/Axis2/axis2-web/index.jsp">http://localhost:8080/Axis2/axis2-web/index.jsp</a> , then clicked on services and the following screen was displayed:</p>
<div id="attachment_42" class="wp-caption alignleft" style="width: 310px"><a href="http://ltalbot.wordpress.com/files/2009/12/picture-5.png"><img class="size-medium wp-image-42" title="Axis main screen" src="http://ltalbot.wordpress.com/files/2009/12/picture-5.png?w=300" alt="Axis main screen" width="300" height="209" /></a><p class="wp-caption-text">Axis main screen</p></div>
<p>The service  - Converter &#8211; seemed to be running ! but when trying to reach the WSDL by clicking on the Converter link I had this:</p>
<div id="attachment_43" class="wp-caption alignleft" style="width: 490px"><a href="http://ltalbot.wordpress.com/files/2009/12/picture-6.png"><img class="size-full wp-image-43" title="WSDL page" src="http://ltalbot.wordpress.com/files/2009/12/picture-6.png" alt="WSDL page" width="480" height="335" /></a><p class="wp-caption-text">WSDL page</p></div>
<p>After some experiments I have found that the WSDL was actually correct (!) . it was just not displayed in Safari. Running the same URL on Firefox confirmed it.</p>
<p>It&#8217;s not the first time something is hidden by Safari unfortunately. It seems it waits a really clean html code. It&#8217;s still viewable by clicking on <strong>view-&#62; view Source</strong> but you don&#8217;t expect immediately such a thing to happen.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[ProcessMaker: workflows from Open Source]]></title>
<link>http://tabulacrypticum.wordpress.com/2009/11/22/processmaker-workflows-from-open-source/</link>
<pubDate>Sun, 22 Nov 2009 10:32:22 +0000</pubDate>
<dc:creator>The Crypticum Keeper</dc:creator>
<guid>http://tabulacrypticum.wordpress.com/2009/11/22/processmaker-workflows-from-open-source/</guid>
<description><![CDATA[In my last article I hinted about investigating the use of an open source tool in support of my curr]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p><a href="http://tabulacrypticum.wordpress.com/2009/11/19/opening-up-to-open-source/">In my last article</a> I hinted about investigating the use of an open source tool in support of my current employment.  I won&#8217;t go into details about the use case itself but I will gladly describe the tool and its potential.  First, a little background.</p>
<p><strong>The Need</strong></p>
<p>As noted in previous articles, a large part of my work the past several years has been in information management, specifically product and application configuration.  I&#8217;ve so far had the pleasure of leading and supporting work on two major enterprise rollouts of workflow solutions, each employing different commercial offerings and approaches to implementation.</p>
<p>The first project addressed a huge gap in product data and change management for consumer products development.  <a href="http://www.ptc.com/products/windchill/">PTC Windchill</a> was selected for the workflow solution based on its own strengths and helped by the fact that PTC product engineering applications were already in use.</p>
<p>The next project at a later employer involved replacing a claims handling application with a true process workflow solution.  <a href="http://www.serena.com/products/business-mashups/overview.html">Serena Business Mashup (SBM)</a> was selected over competing products due to its rich feature set and seemingly unlimited extensibility.  I found the development environment (<a href="http://www.serena.com/products/mashup-composer/">Mashup Composer</a>) to be flexible, powerful and intuitive.</p>
<p>Both projects were very successful in streamlining and improving the ability of stakeholders to view end-to-end processes and manage events in their domains.  The commercial products involved proved their value although expenses were certainly significant.</p>
<p><!--more--></p>
<p><strong>An Open Alternative</strong></p>
<p>In my current employment I am once again faced with the need to improve management of an enterprise activity, except that the prevailing economic decline prevents the sort of corporate funding that had been required for the other two projects.  This led me to search for low cost or even free solutions.</p>
<p>I found several tools that looked promising, but just about every search highlighted one in particular: the open source <a href="http://www.processmaker.com/">ProcessMaker</a>.  Glowing write-ups such as <a href="http://python.sys-con.com/node/1132281">this one by Python Developer&#8217;s Journal</a> gave the impression that this free tool just might be close enough to WindChill or SBM to significantly improve our change management process.</p>
<p><strong>The Short Take</strong></p>
<p>ProcessMaker is 100% web-based and managed at popular open source hoster <a href="http://sourceforge.net/">SourceForge</a>.  <a href="http://www.processmaker.com/open-source/">The PM website</a> states that its code “&#8230; is licensed under the GNU Affero General Public License version 3”.  It is provided in Windows and Linux versions.</p>
<p>I downloaded and installed the latest Windows version (1.2-2865) to my work laptop running XP.  The installation included MySQL and the Apache web server.  The first installation attempt hung up on the Apache portion at the end, but the second try went smoothly.  I&#8217;m not sure what happened (<em>or didn&#8217;t happen</em>) the first time.</p>
<p>I&#8217;ve barely explored what ProcessMaker can do and yet so far I am impressed.  While <a href="http://www.processmaker.com/mashups">its mashups</a> have not yet reached <a href="http://www.serena.com/products/business-mashups/central/">the number that one can access for Serena&#8217;s offerings</a>, the same potential is there and hopefully the open source community is already at work developing more to be shared.  ProcessMaker supports <a href="http://www.w3.org/TR/wsdl">Web Service Definition Language (WSDL)</a>, enabling a process developer to integrate numerous off-the-shelf applications that provide similar access.</p>
<p>The interface is clean and fairly easy to navigate.  However, I could see immediately that I&#8217;ll have to read the documentation and/or follow tutorials before being able to develop a useful process model.  Still, by sheer intuition alone I was able to create a new user, associate him with a group, install a sample weather report mashup and run the activity successfully.  This speaks well for the UI design.</p>
<p>I did find some minor but obvious phrasing issues in some areas, possibly reflecting ProcessMaker&#8217;s international heritage (<em>Colosa has offices in New York, Bolivia and Peru and partners with a Danish IT firm</em>) but they were not showstoppers.  Indeed, even in my untrained fumbling I did not run into anything that raised any real concerns.</p>
<p>ProcessMaker has recently brought data table creation and management to its set of features, bringing it closer to its commercial peers.  I&#8217;m eager to test this particular addition and see how it stacks up against Mashup Composer&#8217;s robust equivalent.</p>
<p><strong>Bottom Line</strong></p>
<p> WindChill was the first purely Internet-architectured data management and collaboration tool, so by now (<em>version 9.1</em>) it&#8217;s very mature.  Too much time has passed since I worked with WindChill so I couldn&#8217;t do a post mortem justice.  I do recall that it easily handled everything we threw at it and integrated well with our other enterprise systems&#8230; SAP, BPCS et al.  It&#8217;s strictly a commercial offering.</p>
<p>Serena&#8217;s Business Mashup solution certainly has the power to wire together any silos across an enterprise landscape.  Serena has taken a hybrid approach in this space, offering a closed commercial product supported by a growing collection of popular user-developed mashups.</p>
<p>ProcessMaker, however, is completely free and open so that the developer community can create and push upstream additions and improvements not only to <a href="http://en.wikipedia.org/wiki/Mashup_(web_application_hybrid)">mashup</a>s but also the core product.  Colosa, the group behind ProcessMaker, charges only for training, hosting and other support.</p>
<p>There&#8217;s nothing wrong with PTC&#8217;s and Serena&#8217;s commercialization of course but lately I&#8217;m coming to believe more and more that ProcessMaker&#8217;s open mode is that of the future&#8230; assuming of course it reaches the critical mass necessary to attract enough mashup developers.  My initial take is that it definitely has the potential.</p>
<p>I plan to continue exploring that potential and expect to do at least one more general follow-up once I&#8217;m more familiar with the product&#8230; hopefully soon!</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[CXF WSDL vs. Java first]]></title>
<link>http://sharpeideas.wordpress.com/2009/11/14/cxf-wsdl-vs-java-first/</link>
<pubDate>Sat, 14 Nov 2009 17:24:22 +0000</pubDate>
<dc:creator>Phil</dc:creator>
<guid>http://sharpeideas.wordpress.com/2009/11/14/cxf-wsdl-vs-java-first/</guid>
<description><![CDATA[Over the last 2 years I have worked on a number of CXF projects. In this time frame I alternated bet]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Over the last 2 years I have worked on a number of CXF projects. In this time frame I alternated between WSDL first and Java first methodologies. Each have benefits but I think I have finally settled on a preferred solution. First lets weigh up the two options.</p>
<h2>WSDL First</h2>
<p>This is the classic purists solution. It ticks all of the boxes for large project design, laying down a language agnostic contract for interfaces in advance. You can hand-craft your WSDL file, simultaneously give it to the service team and any other interacting teams (be it UI or up/down stream apps), everyone can develop to it and in the end everything can be plugged together and it just works (yeah right!).</p>
<h3>Pros &#38; Cons</h3>
<div style="width:50%;float:left;">
<ul>
<li>Up-front contract - Project managers like this idea</li>
<li>Easier to design XML structures in XSD</li>
<li>Will not contain unknown language quirks &#8211; the transform from code to schema is not always intuitive</li>
</ul>
</div>
<div style="width:50%;float:right;">
<ul>
<li>Difficult to change &#8211; any oversights require a rebuild of all endpoints (not very nice with source control)</li>
<li>Just because data is clean XML does mean it works with all languages</li>
<li>WSDL is dog to edit manually</li>
<li>The WSDL to Java generator creates wrapper classes for collections</li>
</ul>
</div>
<h2 style="clear:both;">Java First</h2>
<p style="clear:both;">This is solution suits the agile developer must better, the service can evolve over time as new functions are added and existing ones modified. The code can be more intuitively updated as it is not an all-or-nothing generation. Most importantly the communication objects can be more than just PJOs, they can contain custom business logic functions as they will not be blown away the next time they are generated.</p>
<h3>Pros &#38; Cons</h3>
<div style="width:50%;float:left;">
<ul>
<li>No need to edit Verbose WSDL.</li>
<li>Java data structures resemble the way we would want to use them.</li>
<li>The communication objects can have business logic built into them &#8211; removing the need for a translation layer.</li>
<li>Finer grain control over type converters and data structure types.</li>
</ul>
</div>
<div style="width:50%;float:right;">
<ul>
<li>Need to clearly understand the JAXB and CXF Markup syntax</li>
<li>Your schema doesn&#8217;t exist in a single file that you can hand out (unless you dump it off your server)</li>
<li>Just because data is clean XML does mean it works with all languages</li>
<li>No Up-front contract</li>
</ul>
</div>
<h2 style="clear:both;">Conclusion</h2>
<p style="clear:both;">After a number of projects I now favour the <em>Java first</em> solution this is for a number of key reason:</p>
<ol>
<li> I like being able to use my CXF objects in business logic and tie them to Hibernate via Annotations</li>
<li> I find I rarely can define a complete interface at the beinning of a project and regeneration from WSDL is a pain</li>
<li> <em>Java first</em> allows me to use more complex data structures (like maps)</li>
<li> I dislike the way WSDL to Java generates container classes for any collections of objects</li>
</ol>
<p>However, beware of the following pitfalls:</p>
<ol>
<li>You neeed to use the @WrappedElement attribute to ensure that collections are compatible with Flex (and look reasonable)</li>
<li>Be careful with namespaces</li>
<li>If possible don&#8217;t return Dates (compatibility issues with Flex and C#)</li>
</ol>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[LSNED 6: Marshalling to/from XML/java objects using CXF and JAXB]]></title>
<link>http://yaytay.wordpress.com/2009/11/05/lsned-6-marshalling-tofrom-xmljava-objects-using-cxf-and-jaxb/</link>
<pubDate>Thu, 05 Nov 2009 08:35:02 +0000</pubDate>
<dc:creator>yaytay</dc:creator>
<guid>http://yaytay.wordpress.com/2009/11/05/lsned-6-marshalling-tofrom-xmljava-objects-using-cxf-and-jaxb/</guid>
<description><![CDATA[If you have a java object marked with the attribute @XmlElementRoot you can convert it to an XML str]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>If you have a java object marked with the attribute @XmlElementRoot you can convert it to an XML string like this:</p>
<pre class="brush: java;">
            JAXBDataBinding binding = new JAXBDataBinding();
            JAXBContext jc = JAXBContext.newInstance(&#34;com.groupgti.esb.jobengines.email.service.groupgtisupportsystem.emailschedulertarget&#34; );
            Marshaller marshaller = jc.createMarshaller();
            StringWriter writer = new StringWriter();

            marshaller.marshal( javaObject, writer );
            System.out.println( writer.toString() );
</pre>
<p>This does not work quite so simply if the object is not marked with @XmlElementRoot &#8211; which means that marshalling an arbitrary object received via a SOAP interface needs a bit more work:</p>
<pre class="brush: java;">
            JAXBDataBinding binding = new JAXBDataBinding();
            JAXBContext jc = JAXBContext.newInstance(&#34;com.groupgti.esb.jobengines.email.service.groupgtisupportsystem.emailschedulertarget&#34; );
            Marshaller marshaller = jc.createMarshaller();
            StringWriter writer = new StringWriter();

            marshaller.marshal( new JAXBElement( new QName( &#34;http://xml/namespace/for/type&#34;, &#34;XMLType&#34; ), JavaClass.class, javaObject ), writer );
            marshaller.marshal( object, writer );
            System.out.println( writer.toString() );
</pre>
<p>You can unmarshall (from XML string to java object) like this:</p>
<pre class="brush: java;">
            StringReader reader = new StringReader( xmlString );
            Unmarshaller unmarshaller = jc.createUnmarshaller();
            JAXBElement&#60; JavaClass &#62; root = unmarshaller.unmarshal( new StreamSource( reader ), JavaClass.class );
            JavaClass javaObject = root.getValue();
            System.out.println( &#34;Read back as &#34; + javaObject.toString() );
</pre>
<p>If you want to change the namespace prefix used when marshalling you can override the NamespacePrefixMapper like so:</p>
<pre class="brush: java;">
    private class NamespaceMapper extends NamespacePrefixMapper
    {

        @Override
        public String getPreferredPrefix( String namespaceUri, String suggestion, boolean requirePrefix )
        {
            if( &#34;http://xml/namespace/for/type&#34;.equals( namespaceUri ) )
            {
                return &#34;MINE&#34;;
            }
            else
            {
                return suggestion;
            }
        }
    }

...
            marshaller.setProperty( &#34;com.sun.xml.bind.namespacePrefixMapper&#34;, new NamespaceMapper() );
            marshaller.marshal( new JAXBElement( new QName( &#34;http://xml/namespace/for/type&#34;, &#34;XMLType&#34; ), JavaClass.class, javaObject ), writer );
</pre>
<p>You can also try to force the use of the default namespace by returning an empty string from the getPreferredPrefix function.<br />
Unfortunately there is a small <a href="https://jaxb.dev.java.net/issues/show_bug.cgi?id=710">bug</a> in JAXB in that it uses the namespace prefix blindly for namespace qualified attributes &#8211; but XML does not consider unqualified attributes to be in the default namespace.<br />
If you use qualified attributes don&#8217;t try to force CXF/JAXB to use the default namespace.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[LSNED 3: The best way to represent arrays in WSDL]]></title>
<link>http://yaytay.wordpress.com/2009/11/02/lsned-3-the-best-way-to-represent-arrays-in-wsdl/</link>
<pubDate>Mon, 02 Nov 2009 06:48:34 +0000</pubDate>
<dc:creator>yaytay</dc:creator>
<guid>http://yaytay.wordpress.com/2009/11/02/lsned-3-the-best-way-to-represent-arrays-in-wsdl/</guid>
<description><![CDATA[When writing web services it&#8217;s quite common to need to represent an array of some custom type.]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p><P>When writing web services it&#8217;s quite common to need to represent an array of some custom type.<br />
For this example I&#8217;m working with a &#8220;Box&#8221; that contains an array of &#8220;Thing&#8221; elements (it&#8217;ll also contain a &#8220;Colour&#8221; element, for reasons that will become clear).<br />
Each &#8220;Thing&#8221; element has to have an attribute (&#8220;name&#8221;).<br />
<P><br />
There are two basic ways of doing this in XML:</p>
<table width="100%">
<tr>
<td>Bare:</td>
<td>Wrapped:</td>
</tr>
<tr>
<td width="50%">
<pre class="brush: xml;">
&#60;Box&#62;
  &#60;Thing name=&#34;Thing 1&#34;/&#62;
  &#60;Thing name=&#34;Thing 2&#34;/&#62;
&#60;/Box&#62;
</pre>
</td>
<td width="50%">
<pre class="brush: xml;">
&#60;Box&#62;
  &#60;Things&#62;
    &#60;Thing name=&#34;Thing 1&#34;/&#62;
    &#60;Thing name=&#34;Thing 2&#34;/&#62;
  &#60;/Things&#62;
&#60;/Box&#62;
</pre>
</td>
</tr>
</table>
<p>When we prepare the schema for representing these structures we have two options: use an inline complex type or use a top level named complex type.</p>
<table width="100%">
<tr>
<td>Inline:</td>
<td>Global:</td>
</tr>
<tr>
<td width="50%">
<pre class="brush: xml;">
&#60;xsd:element name=&#34;Box&#34;&#62;
    &#60;xsd:complexType&#62;
        &#60;xsd:sequence&#62;
            &#60;xsd:element name=&#34;Thing&#34; minOccurs=&#34;0&#34; maxOccurs=&#34;unbounded&#34;&#62;
                &#60;xsd:complexType&#62;
                        &#60;xsd:attribute name=&#34;name&#34; type=&#34;xsd:token&#34;/&#62;
                    &#60;/xsd:complexType&#62;
            &#60;/xsd:element&#62;
        &#60;/xsd:sequence&#62;
    &#60;/xsd:complexType&#62;
&#60;/xsd:element&#62;
</pre>
</td>
<td width="50%">
<pre class="brush: xml;">
&#60;xsd:complexType name=&#34;BoxType&#34;&#62;
  &#60;xsd:attribute name=&#34;name&#34; type=&#34;xsd:token&#34;/&#62;
&#60;/xsd:complexType&#62;
...
    &#60;xsd:element name=&#34;Box&#34;&#62;
      &#60;xsd:complexType&#62;
        &#60;xsd:sequence&#62;
          &#60;xsd:element name=&#34;Thing&#34; type=&#34;BoxType&#34; minOccurs=&#34;0&#34; maxOccurs=&#34;unbounded&#34;&#62;&#60;/xsd:element&#62;
        &#60;/xsd:sequence&#62;
      &#60;/xsd:complexType&#62;
    &#60;/xsd:element&#62;
</pre>
</td>
</tr>
</table>
<p>So we have a total of four options for what to put in our schema.<br />
The question is, which is best?<br />
For my purposes the answer is based on which gives the best representation as XML and when converted into java (by wsdl2java) or c# (by wsdl.exe).<br />
<P><br />
What do I want to see?<br />
Well, what I don&#8217;t want are things like this:</p>
<table width="100%" border="0px">
<tr>
<td width="50%">
<pre class="brush: java;">
List&#60;Things&#62; things = Box.getThings();
</pre>
</td>
<td width="50%">
I have a list of Thing objects, not Things objects.
</td>
</tr>
<tr>
<td>
<pre class="brush: java;">
List&#60;Thing&#62; things = Box.getThings().getThing();
</pre>
</td>
<td>
Too verbose, and getThings() may return null, which makes it even more verbose.
</td>
</tr>
<tr>
<td>
<pre class="brush: java;">
List&#60;Thing&#62; things = Box.getThing();
</pre>
</td>
<td>
getThing() is singular, why is it returning a list of things?.
</td>
</tr>
<tr>
<td>
<pre class="brush: xml;">
&#60;Box&#62;
  &#60;Things name=&#34;Thing 1&#34;/&#62;
  &#60;Things name=&#34;Thing 2&#34;/&#62;
&#60;/Box&#62;
</pre>
</td>
<td>
Thing 1 is a Thing, not a Things.
</td>
</tr>
</table>
<p>Although the examples above are java, I have the same requirements from C#.<br />
So, four options, and three things to look at for each one.</p>
<h2>Bare, Inline complex type</h2>
<p>The schema:</p>
<pre class="brush: xml;">
            &#60;xsd:complexType name=&#34;TricksResponseType&#34;&#62;
                &#60;xsd:sequence&#62;
                    &#60;xsd:element name=&#34;Box&#34;&#62;
                        &#60;xsd:complexType&#62;
                            &#60;xsd:sequence&#62;
                                &#60;xsd:element name=&#34;Colour&#34; type=&#34;xsd:token&#34;&#62;&#60;/xsd:element&#62;
                                &#60;xsd:element name=&#34;Thing&#34; minOccurs=&#34;0&#34; maxOccurs=&#34;unbounded&#34;&#62;
                                    &#60;xsd:complexType&#62;
                                            &#60;xsd:attribute name=&#34;name&#34; type=&#34;xsd:token&#34;/&#62;
                                        &#60;/xsd:complexType&#62;
                                &#60;/xsd:element&#62;
                            &#60;/xsd:sequence&#62;
                        &#60;/xsd:complexType&#62;
                    &#60;/xsd:element&#62;
                &#60;/xsd:sequence&#62;
            &#60;/xsd:complexType&#62;
</pre>
<p>The XML:</p>
<pre class="brush: xml;">
      &#60;cat:TricksResponse&#62;
         &#60;Box&#62;
            &#60;Colour&#62;?&#60;/Colour&#62;
            &#60;Thing name=&#34;Thing 1&#34;/&#62;
            &#60;Thing name=&#34;Thing 2&#34;/&#62;
         &#60;/Box&#62;
      &#60;/cat:TricksResponse&#62;
</pre>
<p>Java usage:</p>
<pre class="brush: java;">
{
    TricksResponseType response = hat.getTricks( null );
    Box box = response.getBox();
    String colour = box.getColour();
    List&#60; Thing &#62; things = box.getThing();
}
</pre>
<p>C# usage</p>
<pre class="brush: csharp;">
{
    TricksResponseType response = svc.GetTricks( null );
    TricksResponseTypeBox box = response.Box;
    string colour = box.Colour;
    TricksResponseTypeBoxThing[] things = box.Thing;
}
</pre>
<p>What&#8217;s wrong with that?<br />
Well the XML representation is as good as we can get, it&#8217;s concise (it doesn&#8217;t need a pointless wrapper) and the elements have a nice singular name.<br />
The downside is that the properties in java and C# are singular, and they shouldn&#8217;t be.</p>
<h2>Bare, Global complex type</h2>
<p>The schema:</p>
<pre class="brush: xml;">
&#60;xsd:complexType name=&#34;ThingType&#34;&#62;
    &#60;xsd:attribute name=&#34;name&#34; type=&#34;xsd:token&#34;/&#62;
&#60;/xsd:complexType&#62;

&#60;xsd:complexType name=&#34;TricksResponseType&#34;&#62;
    &#60;xsd:sequence&#62;
        &#60;xsd:element name=&#34;Box&#34;&#62;
            &#60;xsd:complexType&#62;
                &#60;xsd:sequence&#62;
                    &#60;xsd:element name=&#34;Colour&#34; type=&#34;xsd:token&#34;&#62;&#60;/xsd:element&#62;
                    &#60;xsd:element name=&#34;Things&#34; type=&#34;tns:ThingType&#34; minOccurs=&#34;0&#34; maxOccurs=&#34;unbounded&#34;&#62;&#60;/xsd:element&#62;
                &#60;/xsd:sequence&#62;
            &#60;/xsd:complexType&#62;
        &#60;/xsd:element&#62;
    &#60;/xsd:sequence&#62;
&#60;/xsd:complexType&#62;
</pre>
<p>The XML:</p>
<pre class="brush: xml;">
&#60;cat:TricksResponse&#62;
    &#60;Box&#62;
        &#60;Colour&#62;?&#60;/Colour&#62;
        &#60;Things name=&#34;Thing 1&#34;/&#62;
        &#60;Things name=&#34;Thing 2&#34;/&#62;
    &#60;/Box&#62;
&#60;/cat:TricksResponse&#62;
</pre>
<p>Java usage:</p>
<pre class="brush: java;">
{
    TricksResponseType response = hat.getTricks( null );
    Box box = response.getBox();
    String colour = box.getColour();
    List&#60; ThingType &#62; things = box.getThings();
}
</pre>
<p>C# usage</p>
<pre class="brush: csharp;">
{
    TricksResponseType response = svc.GetTricks( null );
    TricksResponseTypeBox box = response.Box;
    string colour = box.Colour;
    ThingType[] things = box.Things;
}
</pre>
<p>Well that&#8217;s tidied up the java and C# representation, but made a total mess of the XML.<br />
Notice that the name of the customType is seen in both java and C#, but is not seen at all in the XML itself.</p>
<h2>Wrapped, Inline complex type</h2>
<p>The schema:</p>
<pre class="brush: xml;">
&#60;xsd:complexType name=&#34;TricksResponseType&#34;&#62;
    &#60;xsd:sequence&#62;
        &#60;xsd:element name=&#34;Box&#34;&#62;
            &#60;xsd:complexType&#62;
                &#60;xsd:sequence&#62;
                    &#60;xsd:element name=&#34;Colour&#34; type=&#34;xsd:token&#34;&#62;&#60;/xsd:element&#62;
                    &#60;xsd:element name=&#34;Things&#34; minOccurs=&#34;1&#34; maxOccurs=&#34;1&#34;&#62;
                        &#60;xsd:complexType&#62;
                            &#60;xsd:sequence&#62;
                                &#60;xsd:element name=&#34;Thing&#34; minOccurs=&#34;0&#34; maxOccurs=&#34;unbounded&#34;&#62;
                                    &#60;xsd:complexType&#62;
                                        &#60;xsd:attribute name=&#34;name&#34; type=&#34;xsd:token&#34;/&#62;
                                    &#60;/xsd:complexType&#62;
                                &#60;/xsd:element&#62;
                            &#60;/xsd:sequence&#62;
                        &#60;/xsd:complexType&#62;
                    &#60;/xsd:element&#62;
                &#60;/xsd:sequence&#62;
            &#60;/xsd:complexType&#62;
        &#60;/xsd:element&#62;
    &#60;/xsd:sequence&#62;
&#60;/xsd:complexType&#62;
</pre>
<p>The XML:</p>
<pre class="brush: xml;">
&#60;cat:TricksResponse&#62;
    &#60;Box&#62;
        &#60;Colour&#62;?&#60;/Colour&#62;
		&#60;Things&#62;
            &#60;Thing name=&#34;Thing 1&#34;/&#62;
            &#60;Thing name=&#34;Thing 2&#34;/&#62;
		&#60;/Things&#62;
    &#60;/Box&#62;
&#60;/cat:TricksResponse&#62;
</pre>
<p>Java usage:</p>
<pre class="brush: java;">
{
    TricksResponseType response = hat.getTricks( null );
    Box box = response.getBox();
    String colour = box.getColour();
    Things things = box.getThings();
    List&#60; Thing &#62; thingList = things.getThing();
}
</pre>
<p>C# usage</p>
<pre class="brush: csharp;">
{
    TricksResponseType response = svc.GetTricks( null );
    TricksResponseTypeBox box = response.Box;
    string colour = box.Colour;
    TricksResponseTypeBoxThing[] things = box.Things;

}
</pre>
<p>Well now this is interesting &#8211; the XML has gained an unnecessary wrapper, but maybe I can live with that if it makes the generated code look good.<br />
But see how the C# code is almost perfect (the type name is messy, but the pluralities are perfect) whilst the java code is horrid.<br />
This bonus for the C# is because the .net wsdl.exe code generator short circuits elements that only have one child element.<br />
Worth noting that C# has to generate a nasty name for the &#8216;Thing&#8217; type, whilst java (with ubiquitus namespaces) is able to provide a much nicer name.</p>
<h2>Wrapped, Global complex type</h2>
<p>The schema:</p>
<pre class="brush: xml;">
&#60;xsd:complexType name=&#34;ThingType&#34;&#62;
    &#60;xsd:attribute name=&#34;name&#34; type=&#34;xsd:token&#34;/&#62;
&#60;/xsd:complexType&#62;

&#60;xsd:complexType name=&#34;TricksResponseType&#34;&#62;
    &#60;xsd:sequence&#62;
        &#60;xsd:element name=&#34;Box&#34;&#62;
            &#60;xsd:complexType&#62;
                &#60;xsd:sequence&#62;
                    &#60;xsd:element name=&#34;Colour&#34; type=&#34;xsd:token&#34;&#62;&#60;/xsd:element&#62;
                    &#60;xsd:element name=&#34;Things&#34; minOccurs=&#34;1&#34; maxOccurs=&#34;1&#34;&#62;
                        &#60;xsd:complexType&#62;
                            &#60;xsd:sequence&#62;
                                &#60;xsd:element name=&#34;Thing&#34; type=&#34;tns:ThingType&#34; minOccurs=&#34;0&#34; maxOccurs=&#34;unbounded&#34;&#62;&#60;/xsd:element&#62;
                            &#60;/xsd:sequence&#62;
                        &#60;/xsd:complexType&#62;
                    &#60;/xsd:element&#62;
                &#60;/xsd:sequence&#62;
            &#60;/xsd:complexType&#62;
        &#60;/xsd:element&#62;
    &#60;/xsd:sequence&#62;
&#60;/xsd:complexType&#62;</pre>
<p>The XML:</p>
<pre class="brush: xml;">
&#60;cat:TricksResponse&#62;
    &#60;Box&#62;
        &#60;Colour&#62;?&#60;/Colour&#62;
		&#60;Things&#62;
            &#60;Thing name=&#34;Thing 1&#34;/&#62;
            &#60;Thing name=&#34;Thing 2&#34;/&#62;
		&#60;/Things&#62;
    &#60;/Box&#62;
&#60;/cat:TricksResponse&#62;
</pre>
<p>Java usage:</p>
<pre class="brush: java;">
{
    TricksResponseType response = hat.getTricks( null );
    Box box = response.getBox();
    String colour = box.getColour();
    Things things = box.getThings();
    List&#60; ThingType &#62; thingList = things.getThing();
}
</pre>
<p>C# usage</p>
<pre class="brush: csharp;">
{
    TricksResponseType response = svc.GetTricks( null );
    TricksResponseTypeBox box = response.Box;
    string colour = box.Colour;
    ThingType[] things = box.Things;
}
</pre>
<p>This structure provides a perfect solution for the .net users, but the java users are still lumbered with the intermediate object.</p>
<h2>Conclusions</h2>
<p>The first conclusion is that the use of wrapper objects, handled so nicely in C#, is really ugly in java so I recommend against using it at all.<br />
The benefit of having control over the name makes global complex types nicer to work with in both C# and java.<br />
But this leaves a problem with the plurality, it&#8217;s going to end up being wrong in either the XML or the code.<br />
I think it&#8217;s more important to be right in the XML, so I&#8217;ll be using the schema from my first example.</p>
<p><P><br />
In case you think the C# wsdl tool is much better than the java one from this please bear in mind that wsdl2java can work with abstract wsdl files, whereas the C# equivalent generates nothing unless the WSDL file has a concrete service defined &#8211; which is rubbish.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[JAXBElement types generated when schema contain minOccurs="0" and nillable="true"]]></title>
<link>http://jamesbnuzzo.wordpress.com/2009/11/01/jaxbelement-types-generated-when-schema-contain-minoccurs0-and-nillabletrue/</link>
<pubDate>Sun, 01 Nov 2009 22:17:29 +0000</pubDate>
<dc:creator>cyclocrossboy</dc:creator>
<guid>http://jamesbnuzzo.wordpress.com/2009/11/01/jaxbelement-types-generated-when-schema-contain-minoccurs0-and-nillabletrue/</guid>
<description><![CDATA[Problem JAXB is great for generating JAVA code necessary to support marshalling and unmarshalling of]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><h2>Problem</h2>
<p>JAXB is great for generating JAVA code necessary to support marshalling and unmarshalling of XML to Java Pojo&#8217;s particularly when working with web services.  However with some WSDL&#8217;s the Java code generated contain JAXBElement types instead of Java data types. For example a schema fragment from a Salesforce notification wsdl:</p>
<pre class="brush: xml;">
        &#60;schema elementFormDefault=&#34;qualified&#34; xmlns=&#34;http://www.w3.org/2001/XMLSchema&#34; targetNamespace=&#34;urn:sobject.enterprise.soap.sforce.com&#34;&#62;
            &#60;import namespace=&#34;urn:enterprise.soap.sforce.com&#34;/&#62;
            &#60;!-- Base sObject (abstract) --&#62;
            &#60;complexType name=&#34;sObject&#34;&#62;
                &#60;sequence&#62;
                    &#60;element name=&#34;fieldsToNull&#34; type=&#34;xsd:string&#34; nillable=&#34;true&#34; minOccurs=&#34;0&#34; maxOccurs=&#34;unbounded&#34;/&#62;
                    &#60;element name=&#34;Id&#34; type=&#34;ent:ID&#34; nillable=&#34;true&#34; minOccurs=&#34;0&#34; maxOccurs=&#34;1&#34;/&#62;
                &#60;/sequence&#62;
            &#60;/complexType&#62;
            &#60;complexType name=&#34;Opportunity&#34;&#62;
                &#60;complexContent&#62;
                    &#60;extension base=&#34;ens:sObject&#34;&#62;
                        &#60;sequence&#62;
                        &#60;element name=&#34;Sales_Opportunity_Number__c&#34; nillable=&#34;true&#34; minOccurs=&#34;0&#34; type=&#34;xsd:string&#34;/&#62;
                        &#60;/sequence&#62;
                    &#60;/extension&#62;
                &#60;/complexContent&#62;
            &#60;/complexType&#62;
        &#60;/schema&#62;
</pre>
<p>would generate the following corresponding Java code fragments:</p>
<pre class="brush: java;">
public class Opportunity
    extends SObject
{

    @XmlElementRef(name = &#34;Sales_Opportunity_Number__c&#34;, namespace = &#34;urn:sobject.enterprise.soap.sforce.com&#34;, type = JAXBElement.class)
    protected JAXBElement&#60;String&#62; salesOpportunityNumberC;

    /**
     * Gets the value of the salesOpportunityNumberC property.
     *
     * @return
     *     possible object is
     *     {@link JAXBElement }{@code &#60;}{@link String }{@code &#62;}
     *
     */
    public JAXBElement&#60;String&#62; getSalesOpportunityNumberC() {
        return salesOpportunityNumberC;
    }

    /**
     * Sets the value of the salesOpportunityNumberC property.
     *
     * @param value
     *     allowed object is
     *     {@link JAXBElement }{@code &#60;}{@link String }{@code &#62;}
     *
     */
    public void setSalesOpportunityNumberC(JAXBElement&#60;String&#62; value) {
        this.salesOpportunityNumberC = ((JAXBElement&#60;String&#62; ) value);
    }
}
</pre>
<p>The JAXBElementsalesOpportunityNumberC type is a bit cumbersome to work with your Java code.</p>
<h2>Solution</h2>
<p>A simple solution to this problem is to edit a <strong>copy</strong> of your wsdl. Do the following:</p>
<ul>
<li>Replace all <strong>nillable=”true”</strong> to <strong>nillable=&#8221;false&#8221;</strong>
</ul>
<p>The desired side effect of this generating Java code with the desired Java types in place.  See corresponding example:</p>
<pre class="brush: java;">
public class Opportunity
    extends SObject
{

    @XmlElement(name = &#34;Sales_Opportunity_Number__c&#34;, namespace = &#34;urn:sobject.enterprise.soap.sforce.com&#34;)
    protected String salesOpportunityNumberC;

    /**
     * Gets the value of the SalesOpportunityNumberC property.
     *
     * @return
     *     possible object is
     *     {@link String }
     *
     */
    public String getSalesOpportunityNumberC() {
        return salesOpportunityNumberC;
    }

    /**
     * Sets the value of the salesOpportunityNumberC property.
     *
     * @param value
     *     allowed object is
     *     {@link String }
     *
     */
    public void setSalesOpportunityNumberC(String value) {
        this.salesOpportunityNumberC = value;
    }

}
</pre>
<h2>Props</h2>
<p><a href="http://www.linkedin.com/profile?viewProfile=&#38;key=12388388">Brian Dussault</a> and <a href="http://www.linkedin.com/pub/julie-dougherty/6/214/2b3">Julie Dougherty</a> word on this problem and came up with the solution documented and currently used by my team.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Flex and WCF not playing nicely]]></title>
<link>http://thejlog.wordpress.com/2009/10/27/flex-and-wcf-not-playing-nicely/</link>
<pubDate>Tue, 27 Oct 2009 20:10:11 +0000</pubDate>
<dc:creator>apcig</dc:creator>
<guid>http://thejlog.wordpress.com/2009/10/27/flex-and-wcf-not-playing-nicely/</guid>
<description><![CDATA[For the most part the two have been working okay, but 1 thing that keeps getting messed up is when a]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>For the most part the two have been working okay, but 1 thing that keeps getting messed up is when an input parameter gets added to a WCF web service.  I added the parameter value to the Flex code, but it still would not get received by WCF.</p>
<p>Apparently this happens for return parameters too.  The solution is similar to fixing the web service call &#8212; modify the generated code.  (Apparently when I do an update on the WSDL, the code edit remains and I do not have to manually edit it again &#8212; adding to the mystery.)</p>
<p>So, in src/generated/webservices/Base[Name of my svc file]Schema.as, find the return list of the operation being called, and any new parameters that Flex is not picking up.</p>
<p>Massaging away.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Web Services, SOA, BPM, and Cloud Computing - I]]></title>
<link>http://linusfernandes.com/2009/10/27/web-services-soa-bpm-and-cloud-computing-i/</link>
<pubDate>Tue, 27 Oct 2009 05:37:00 +0000</pubDate>
<dc:creator>Linus Fernandes</dc:creator>
<guid>http://linusfernandes.com/2009/10/27/web-services-soa-bpm-and-cloud-computing-i/</guid>
<description><![CDATA[The field of IT technology is an ever-changing one. Just when you think that you are on the cusp of ]]></description>
<content:encoded><![CDATA[The field of IT technology is an ever-changing one. Just when you think that you are on the cusp of ]]></content:encoded>
</item>
<item>
<title><![CDATA[BPEL // Cannot find partnerLinkType 2]]></title>
<link>http://snowjunkiedev.wordpress.com/2009/10/19/bpel-cannot-find-partnerlinktype-2/</link>
<pubDate>Mon, 19 Oct 2009 18:02:08 +0000</pubDate>
<dc:creator>Alastair Vance</dc:creator>
<guid>http://snowjunkiedev.wordpress.com/2009/10/19/bpel-cannot-find-partnerlinktype-2/</guid>
<description><![CDATA[I had a BPEL process that was using a File Adapter to poll a new folder for incoming files.  It was ]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>I had a BPEL process that was using a File Adapter to poll a new folder for incoming files.  It was not behaving like I wanted it too, so in order to control the execution better I changed the BPEL process to trigger based on a field value in the database.</p>
<p>I deleted the File Adapter and added the Database Adapter.  It compiled and deployed successfully.  However in the logs the following errors were recorded when the criteria in the database was met.</p>
<pre>&#60;2009-10-19 13:44:02,202&#62; &#60;ERROR&#62; &#60;default.collaxa.cube&#62;
&#60;BaseCubeSessionBean::logError&#62; Error while invoking bean "process manager":
[com.collaxa.cube.ws.WebServiceException: Cannot find partnerLinkType 2.
PartnerLinkType "{http://xmlns.oracle.com/.../TableWatch/}TableWatch_plt"
is not found in WSDL at "file:/C:/product/....BPEL.wsdl". Please make sure the
partnerLinkType is defined in the WSDL.] ORABPEL-08016 Cannot find
partnerLinkType 2. PartnerLinkType "{http://xmlns.oracle.com/.../TableWatch/}
TableWatch_plt" is not found in WSDL at "file:/C:/product/....BPEL.wsdl".
Please make sure the partnerLinkType is defined in the WSDL.
</pre>
<p>After much hair pulling re-engineering my BPEL process, I eventually resorted to google and found <a href="http://merelyoraclemiddleware.blogspot.com/2009/03/bpel-error-cannot-find-partnerlinktype.html" target="_self">this brief post</a> that saved the day.</p>
<p>To fix the problem, load up the BPEL console and go to the &#8220;BPEL Processes&#8221; tab.  From there select &#8220;Clear WSDL Cache&#8221;.  And that&#8217;s it sorted.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[.NET Web Services, Objects, WSDL.exe, and Reference.cs]]></title>
<link>http://mikevallotton.wordpress.com/2009/10/15/net-web-services-objects-wsdl-exe-and-reference-cs/</link>
<pubDate>Fri, 16 Oct 2009 01:55:58 +0000</pubDate>
<dc:creator>mikevallotton</dc:creator>
<guid>http://mikevallotton.wordpress.com/2009/10/15/net-web-services-objects-wsdl-exe-and-reference-cs/</guid>
<description><![CDATA[This problem is annoying. If you make a .NET web service and you add the web reference to another pr]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>This problem is annoying.</p>
<p>If you make a .NET web service and you add the web reference to another project, Visual Studio runs WSDL.exe in the background to create a Reference.cs file &#8211; which is awesome (sort of).  The Reference.cs file gives you the ability to call your web service just as if it were any other .NET class you have a reference to, which again, is awesome (sort of).</p>
<p>The problem arises when you have a class defined that is accepted as a parameter to, or returned from, a method in your web service.  WSDL.exe generates a class definition for this class in the Reference.cs file, which is great if you don&#8217;t want to reference the actual class.</p>
<p>The standard <a href="http://blogs.objectsharp.com/CS/blogs/bruce/archive/2004/05/23/499.aspx">solution to this problem is much as Bruce Johnson describes</a>, which is to hand-edit the Reference.cs file to remove the generated class, and add a &#8220;using&#8221; statement or fully qualify the class name to point to the correct (the original) namespace.</p>
<p>Unfortunately, this means that every time you need to update the web reference, and the Reference.cs file is regenerated, you need to hand edit the Reference.cs file, which is a huge waste of time and kind of a pain in the butt.</p>
<p>There is apparently <a href="http://social.msdn.microsoft.com/Forums/en-US/asmxandxml/thread/24c0ecde-ce9a-4aa6-8fc7-42c186a887ae">a way to use SchemaImporterExtensions to affect the way that WSDL.exe generates the Reference.cs file</a>, but to be honest, it looked really confusing and also difficult to maintain.  I didn&#8217;t really attempt to do it, though, so maybe it&#8217;s easier than it looks.</p>
<p>So, after having to deal with this on a project I&#8217;m working with currently, I decided that it would make sense to automate this annoying problem.  I built an executable that accepts, on the command line, the path to a dll, and the path to a Reference.cs file.  The executable looks for any public classes or enums that are defined in both the dll and the Reference.cs file, removes the class declaration from the Reference.cs file, and fully qualifies the class references.  </p>
<p><img src="http://mikevallotton.wordpress.com/files/2009/10/prebuild.jpg?w=300" alt="prebuild" title="prebuild" width="300" height="206" class="alignleft size-medium wp-image-299" />I then changed the project properties (in the project that contains the web references) to add several pre-build commands.  The commands call the executable with whatever combination of dll&#8217;s and Reference.cs files.  This way, you can update the web reference as often as necessary, and before the project builds, the executable will run and fix all the issues in the Reference.cs file.</p>
<p>This code is kind of hacked together, but I really had a hard time justifying spending much time on polishing it, so I&#8217;m just going to post it as is.  It&#8217;ll only work on C#, and as far as I know, there aren&#8217;t any bugs, although you might have some.  If you use it and find anything wrong with it, leave a comment, and I&#8217;ll update the code.</p>
<p>Anyway, here&#8217;s the code &#8211; I&#8217;m kind of surprised I couldn&#8217;t find something to do this already, so hopefully it&#8217;ll help you.</p>
<div style="font-family:Courier New;font-size:10pt;color:black;background:white;">
<p style="margin:0;"><span style="color:blue;">using</span> System;</p>
<p style="margin:0;"><span style="color:blue;">using</span> System.Collections.Generic;</p>
<p style="margin:0;"><span style="color:blue;">using</span> System.Text;</p>
<p style="margin:0;"><span style="color:blue;">using</span> System.Reflection;</p>
<p style="margin:0;"><span style="color:blue;">using</span> System.IO;</p>
<p style="margin:0;"><span style="color:blue;">using</span> System.Text.RegularExpressions;</p>
<p style="margin:0;">&#160;</p>
<p style="margin:0;"><span style="color:blue;">namespace</span> WebServiceReferenceResolver</p>
<p style="margin:0;">{</p>
<p style="margin:0;">&#160;&#160;&#160; <span style="color:blue;">class</span> <span style="color:#2b91af;">Program</span></p>
<p style="margin:0;">&#160;&#160;&#160; {</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; <span style="color:gray;">///</span><span style="color:green;"> </span><span style="color:gray;">&#60;summary&#62;</span></p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; <span style="color:gray;">///</span><span style="color:green;"> Mains the specified args.</span></p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; <span style="color:gray;">///</span><span style="color:green;"> </span><span style="color:gray;">&#60;/summary&#62;</span></p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; <span style="color:gray;">///</span><span style="color:green;"> </span><span style="color:gray;">&#60;param name=&#8221;args&#8221;&#62;</span><span style="color:green;">The args.</span><span style="color:gray;">&#60;/param&#62;</span></p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; <span style="color:blue;">static</span> <span style="color:blue;">void</span> Main(<span style="color:blue;">string</span>[] args)</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; {</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; <span style="color:blue;">if</span> (args.Length != 2)</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; {</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; <span style="color:#2b91af;">Console</span>.WriteLine(<span style="color:#a31515;">&#8220;Correct Usage: WebServiceReferenceResolver [ASSEMBLYNAME] [REFERENCE.CS]&#8220;</span>);</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; <span style="color:blue;">return</span>;</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; }</p>
<p style="margin:0;">&#160;</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; <span style="color:blue;">try</span></p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; {</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; <span style="color:blue;">string</span> assemblyName = <span style="color:blue;">new</span> <span style="color:#2b91af;">FileInfo</span>(args[0]).FullName;</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; <span style="color:blue;">string</span> referenceCsName = <span style="color:blue;">new</span> <span style="color:#2b91af;">FileInfo</span>(args[1]).FullName;</p>
<p style="margin:0;">&#160;</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; <span style="color:#2b91af;">List</span>&#60;<span style="color:#2b91af;">Type</span>&#62; classList = GetPublicClasses(assemblyName);</p>
<p style="margin:0;">&#160;</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; <span style="color:#2b91af;">StreamReader</span> sr = <span style="color:blue;">new</span> <span style="color:#2b91af;">StreamReader</span>(referenceCsName);</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; <span style="color:blue;">string</span> referenceCsSource = sr.ReadToEnd();</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; sr.Close();</p>
<p style="margin:0;">&#160;</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; <span style="color:green;">// remove class definitions</span></p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; <span style="color:blue;">for</span> (<span style="color:blue;">int</span> i = classList.Count &#8211; 1; i &#62;= 0; i&#8211;)</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; {</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; <span style="color:blue;">bool</span> typeFound = <span style="color:blue;">false</span>;</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; referenceCsSource = RemoveClassDeclaration(referenceCsSource, classList[i], <span style="color:blue;">ref</span> typeFound);</p>
<p style="margin:0;">&#160;</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; <span style="color:blue;">if</span> (!typeFound)</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; {</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; classList.RemoveAt(i);</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; }</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; }</p>
<p style="margin:0;">&#160;</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; <span style="color:green;">// properly resolve class references</span></p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; <span style="color:blue;">foreach</span> (<span style="color:#2b91af;">Type</span> t <span style="color:blue;">in</span> classList)</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; {</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; referenceCsSource = ResolveClassReference(referenceCsSource, t);</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; }</p>
<p style="margin:0;">&#160;</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; <span style="color:#2b91af;">StreamWriter</span> sw = <span style="color:blue;">new</span> <span style="color:#2b91af;">StreamWriter</span>(referenceCsName, <span style="color:blue;">false</span>);</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; sw.Write(referenceCsSource);</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; sw.Close();</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; }</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; <span style="color:blue;">catch</span> (<span style="color:#2b91af;">Exception</span> ex)</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; {</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; <span style="color:#2b91af;">Console</span>.WriteLine(ex.ToString());</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; }</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; }</p>
<p style="margin:0;">&#160;</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; <span style="color:gray;">///</span><span style="color:green;"> </span><span style="color:gray;">&#60;summary&#62;</span></p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; <span style="color:gray;">///</span><span style="color:green;"> Gets the public classes.</span></p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; <span style="color:gray;">///</span><span style="color:green;"> </span><span style="color:gray;">&#60;/summary&#62;</span></p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; <span style="color:gray;">///</span><span style="color:green;"> </span><span style="color:gray;">&#60;param name=&#8221;assemblyName&#8221;&#62;</span><span style="color:green;">Name of the assembly.</span><span style="color:gray;">&#60;/param&#62;</span></p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; <span style="color:gray;">///</span><span style="color:green;"> </span><span style="color:gray;">&#60;returns&#62;&#60;/returns&#62;</span></p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; <span style="color:blue;">private</span> <span style="color:blue;">static</span> <span style="color:#2b91af;">List</span>&#60;<span style="color:#2b91af;">Type</span>&#62; GetPublicClasses(<span style="color:blue;">string</span> assemblyName)</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; {</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; <span style="color:#2b91af;">Assembly</span> assembly = <span style="color:#2b91af;">Assembly</span>.LoadFile(assemblyName);</p>
<p style="margin:0;">&#160;</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; <span style="color:#2b91af;">Type</span>[] types = <span style="color:blue;">new</span> <span style="color:#2b91af;">Type</span>[0];</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; <span style="color:blue;">try</span></p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; {</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; types = assembly.GetTypes();</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; }</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; <span style="color:blue;">catch</span> (<span style="color:#2b91af;">ReflectionTypeLoadException</span> rtle)</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; {</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; types = rtle.Types;</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; }</p>
<p style="margin:0;">&#160;</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; <span style="color:#2b91af;">List</span>&#60;<span style="color:#2b91af;">Type</span>&#62; returnList= <span style="color:blue;">new</span> <span style="color:#2b91af;">List</span>&#60;<span style="color:#2b91af;">Type</span>&#62;();</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; <span style="color:blue;">foreach</span>(<span style="color:#2b91af;">Type</span> t <span style="color:blue;">in</span> types)</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; {</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; <span style="color:blue;">if</span> (t != <span style="color:blue;">null</span> &#38;&#38; t.IsPublic)</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; {</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; returnList.Add(t);</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; }</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; }</p>
<p style="margin:0;">&#160;</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; <span style="color:blue;">return</span> returnList;</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; }</p>
<p style="margin:0;">&#160;</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; <span style="color:gray;">///</span><span style="color:green;"> </span><span style="color:gray;">&#60;summary&#62;</span></p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; <span style="color:gray;">///</span><span style="color:green;"> Removes the class declaration.</span></p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; <span style="color:gray;">///</span><span style="color:green;"> </span><span style="color:gray;">&#60;/summary&#62;</span></p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; <span style="color:gray;">///</span><span style="color:green;"> </span><span style="color:gray;">&#60;param name=&#8221;referenceCsSource&#8221;&#62;</span><span style="color:green;">The reference cs source.</span><span style="color:gray;">&#60;/param&#62;</span></p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; <span style="color:gray;">///</span><span style="color:green;"> </span><span style="color:gray;">&#60;param name=&#8221;t&#8221;&#62;</span><span style="color:green;">The t.</span><span style="color:gray;">&#60;/param&#62;</span></p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; <span style="color:gray;">///</span><span style="color:green;"> </span><span style="color:gray;">&#60;param name=&#8221;typeFound&#8221;&#62;</span><span style="color:green;">if set to </span><span style="color:gray;">&#60;c&#62;</span><span style="color:green;">true</span><span style="color:gray;">&#60;/c&#62;</span><span style="color:green;"> [type found].</span><span style="color:gray;">&#60;/param&#62;</span></p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; <span style="color:gray;">///</span><span style="color:green;"> </span><span style="color:gray;">&#60;returns&#62;&#60;/returns&#62;</span></p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; <span style="color:blue;">private</span> <span style="color:blue;">static</span> <span style="color:blue;">string</span> RemoveClassDeclaration(<span style="color:blue;">string</span> referenceCsSource, <span style="color:#2b91af;">Type</span> t, <span style="color:blue;">ref</span> <span style="color:blue;">bool</span> typeFound)</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; {</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; <span style="color:blue;">int</span> startIndex = -1;</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; typeFound = <span style="color:blue;">false</span>;</p>
<p style="margin:0;">&#160;</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; <span style="color:#2b91af;">Regex</span> r = <span style="color:blue;">new</span> <span style="color:#2b91af;">Regex</span>(<span style="color:#a31515;">&#8220;(class&#124;enum) &#8220;</span> + t.Name + <span style="color:#a31515;">&#8221; ({&#124;:)&#8221;</span>);</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; <span style="color:#2b91af;">Match</span> m = r.Match(referenceCsSource);</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; <span style="color:blue;">if</span> (m != <span style="color:blue;">null</span> &#38;&#38; m.Index != 0)</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; {</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; startIndex = m.Index;</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; }</p>
<p style="margin:0;">&#160;</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; <span style="color:blue;">if</span> (startIndex != -1)</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; {</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; <span style="color:blue;">int</span> firstBracketIndex = referenceCsSource.IndexOf(<span style="color:#a31515;">&#8220;{&#8220;</span>, startIndex);</p>
<p style="margin:0;">&#160;</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; <span style="color:blue;">int</span> lastBracketIndex = referenceCsSource.LastIndexOf(<span style="color:#a31515;">&#8220;}&#8221;</span>, startIndex) + 1;</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; <span style="color:blue;">int</span> lastSemicolonIndex = referenceCsSource.LastIndexOf(<span style="color:#a31515;">&#8220;;&#8221;</span>, startIndex) + 1;</p>
<p style="margin:0;">&#160;</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; <span style="color:blue;">if</span> (lastBracketIndex &#62; lastSemicolonIndex)</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; {</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; startIndex = lastBracketIndex;</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; }</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; <span style="color:blue;">else</span></p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; {</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; startIndex = lastSemicolonIndex;</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; }</p>
<p style="margin:0;">&#160;</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; <span style="color:blue;">int</span> characterIndex = firstBracketIndex + 1;</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; <span style="color:blue;">int</span> bracketIndexCount = 1;</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; <span style="color:blue;">while</span> (characterIndex &#60; referenceCsSource.Length &#38;&#38; bracketIndexCount &#62; 0)</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; {</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; <span style="color:blue;">if</span> (referenceCsSource[characterIndex] == <span style="color:#a31515;">&#8216;{&#8216;</span>)</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; {</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; bracketIndexCount++;</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; }</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; <span style="color:blue;">else</span> <span style="color:blue;">if</span> (referenceCsSource[characterIndex] == <span style="color:#a31515;">&#8216;}&#8217;</span>)</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; {</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; bracketIndexCount&#8211;;</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; }</p>
<p style="margin:0;">&#160;</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; characterIndex++;</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; }</p>
<p style="margin:0;">&#160;</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; <span style="color:blue;">if</span> (characterIndex &#60; referenceCsSource.Length)</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; {</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; <span style="color:green;">// remove it</span></p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; typeFound = <span style="color:blue;">true</span>;</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; referenceCsSource = referenceCsSource.Remove(startIndex, characterIndex &#8211; startIndex);</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; }</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; }</p>
<p style="margin:0;">&#160;</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; <span style="color:blue;">return</span> referenceCsSource;</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; }</p>
<p style="margin:0;">&#160;</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; <span style="color:gray;">///</span><span style="color:green;"> </span><span style="color:gray;">&#60;summary&#62;</span></p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; <span style="color:gray;">///</span><span style="color:green;"> Resolves the class reference.</span></p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; <span style="color:gray;">///</span><span style="color:green;"> </span><span style="color:gray;">&#60;/summary&#62;</span></p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; <span style="color:gray;">///</span><span style="color:green;"> </span><span style="color:gray;">&#60;param name=&#8221;referenceCsSource&#8221;&#62;</span><span style="color:green;">The reference cs source.</span><span style="color:gray;">&#60;/param&#62;</span></p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; <span style="color:gray;">///</span><span style="color:green;"> </span><span style="color:gray;">&#60;param name=&#8221;t&#8221;&#62;</span><span style="color:green;">The t.</span><span style="color:gray;">&#60;/param&#62;</span></p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; <span style="color:gray;">///</span><span style="color:green;"> </span><span style="color:gray;">&#60;returns&#62;&#60;/returns&#62;</span></p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; <span style="color:blue;">private</span> <span style="color:blue;">static</span> <span style="color:blue;">string</span> ResolveClassReference(<span style="color:blue;">string</span> referenceCsSource, <span style="color:#2b91af;">Type</span> t)</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; {</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; <span style="color:green;">// yeah, this is tacky, but whatever</span></p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; referenceCsSource = ResolveClassReference(referenceCsSource, t, <span style="color:blue;">string</span>.Format(<span style="color:#a31515;">&#8221; {0} &#8220;</span>, t.Name));</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; referenceCsSource = ResolveClassReference(referenceCsSource, t, <span style="color:blue;">string</span>.Format(<span style="color:#a31515;">&#8221; {0}[&#8220;</span>, t.Name));</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; referenceCsSource = ResolveClassReference(referenceCsSource, t, <span style="color:blue;">string</span>.Format(<span style="color:#a31515;">&#8221; {0}(&#8220;</span>, t.Name));</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; referenceCsSource = ResolveClassReference(referenceCsSource, t, <span style="color:blue;">string</span>.Format(<span style="color:#a31515;">&#8220;({0} &#8220;</span>, t.Name));</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; referenceCsSource = ResolveClassReference(referenceCsSource, t, <span style="color:blue;">string</span>.Format(<span style="color:#a31515;">&#8220;({0}[&#8220;</span>, t.Name));</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; referenceCsSource = ResolveClassReference(referenceCsSource, t, <span style="color:blue;">string</span>.Format(<span style="color:#a31515;">&#8220;({0})&#8221;</span>, t.Name));</p>
<p style="margin:0;">&#160;</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; <span style="color:blue;">return</span> referenceCsSource;</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; }</p>
<p style="margin:0;">&#160;</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; <span style="color:gray;">///</span><span style="color:green;"> </span><span style="color:gray;">&#60;summary&#62;</span></p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; <span style="color:gray;">///</span><span style="color:green;"> Resolves the class reference.</span></p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; <span style="color:gray;">///</span><span style="color:green;"> </span><span style="color:gray;">&#60;/summary&#62;</span></p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; <span style="color:gray;">///</span><span style="color:green;"> </span><span style="color:gray;">&#60;param name=&#8221;referenceCsSource&#8221;&#62;</span><span style="color:green;">The reference cs source.</span><span style="color:gray;">&#60;/param&#62;</span></p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; <span style="color:gray;">///</span><span style="color:green;"> </span><span style="color:gray;">&#60;param name=&#8221;t&#8221;&#62;</span><span style="color:green;">The t.</span><span style="color:gray;">&#60;/param&#62;</span></p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; <span style="color:gray;">///</span><span style="color:green;"> </span><span style="color:gray;">&#60;param name=&#8221;matchString&#8221;&#62;</span><span style="color:green;">The match string.</span><span style="color:gray;">&#60;/param&#62;</span></p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; <span style="color:gray;">///</span><span style="color:green;"> </span><span style="color:gray;">&#60;returns&#62;&#60;/returns&#62;</span></p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; <span style="color:blue;">private</span> <span style="color:blue;">static</span> <span style="color:blue;">string</span> ResolveClassReference(<span style="color:blue;">string</span> referenceCsSource, <span style="color:#2b91af;">Type</span> t, <span style="color:blue;">string</span> matchString)</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; {</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; <span style="color:blue;">int</span> index = 0;</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; <span style="color:blue;">while</span> (index != -1)</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; {</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; index = referenceCsSource.IndexOf(matchString, index);</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; <span style="color:blue;">if</span> (index != -1)</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; {</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; referenceCsSource = referenceCsSource.Insert(index + 1, <span style="color:blue;">string</span>.Format(<span style="color:#a31515;">&#8220;{0}.&#8221;</span>, t.Namespace));</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; index += t.Namespace.Length + matchString.Length;</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; }</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; }</p>
<p style="margin:0;">&#160;</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; <span style="color:blue;">return</span> referenceCsSource;</p>
<p style="margin:0;">&#160;&#160;&#160; &#160;&#160;&#160; }</p>
<p style="margin:0;">&#160;&#160;&#160; }</p>
<p style="margin:0;">}</p>
</div>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[New WSDL format for TCA]]></title>
<link>http://transoftdev.wordpress.com/2009/10/13/new-wsdl-format-for-tca/</link>
<pubDate>Tue, 13 Oct 2009 10:27:26 +0000</pubDate>
<dc:creator>tsahayward</dc:creator>
<guid>http://transoftdev.wordpress.com/2009/10/13/new-wsdl-format-for-tca/</guid>
<description><![CDATA[Back when TCA SOAP support was implemented, the most common SOAP format was the rpc/encoded.  At tha]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Back when TCA SOAP support was implemented, the most common SOAP format was the rpc/encoded.  At that time, Java implementations were the most common client for SOAP.</p>
<p>As time has moved on, the .NET framework has dominated the Web Services landscape.  By default, .NET uses the document/literal style (although it happily interoperates with rpc/encoded)</p>
<p>Now the latest Java libraries have dropped support for rpc/encoded (Apache Axis2 &#8211; see <a href="http://ws.apache.org/axis2/1_1_1/Axis2-rpc-support.html">http://ws.apache.org/axis2/1_1_1/Axis2-rpc-support.html</a>).  Attempting to use Axis2 to read the TCA WSDL will fail with an exception stating : &#8220;Encoded use is not supported&#8221;.  Obviously this will cause problems with any software built on Axis2, such as Crystal Reports.</p>
<p>To address this, TCA has been modified to support the wrapped document/literal format (described here: <a href="http://www.ibm.com/developerworks/webservices/library/ws-whichwsdl/">http://www.ibm.com/developerworks/webservices/library/ws-whichwsdl/</a>).  The modifications come as an updated .mac file for the Transoft Development Suite and as a modified Component Broker.</p>
<p>The changes will be part of the next release, but in the meantime if you find yourself needing to interoperate with a SOAP framework that doesn&#8217;t support rpc/encoded, contact customer services and we can supply an update</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[SOAP - its Simple]]></title>
<link>http://knwrites.wordpress.com/2009/10/12/soap-its-simple/</link>
<pubDate>Mon, 12 Oct 2009 10:56:19 +0000</pubDate>
<dc:creator>knwrites</dc:creator>
<guid>http://knwrites.wordpress.com/2009/10/12/soap-its-simple/</guid>
<description><![CDATA[SOAP &#8211; Simple Object Access Protocol Definition:     SOAP is a simple XML based protocol used ]]></description>
<content:encoded><![CDATA[SOAP &#8211; Simple Object Access Protocol Definition:     SOAP is a simple XML based protocol used ]]></content:encoded>
</item>
<item>
<title><![CDATA[Time to come clean aka problems with SOAP and WSDLs!]]></title>
<link>http://branchonmaybe.wordpress.com/2009/09/29/time-to-come-clean-aka-problems-with-soap-and-wsdls/</link>
<pubDate>Wed, 30 Sep 2009 01:45:31 +0000</pubDate>
<dc:creator>ltlfrari</dc:creator>
<guid>http://branchonmaybe.wordpress.com/2009/09/29/time-to-come-clean-aka-problems-with-soap-and-wsdls/</guid>
<description><![CDATA[I know nothing about this stuff other than some basic XML knowledge so this is a bit like climbing E]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>I know nothing about this stuff other than some basic XML knowledge so this is a bit like climbing Everest in winter in your skivvies for me (not that I would, I don’t even like heights!).</p>
<p>I have a SOAP service that I can make requests to quite fine thank you if I hard code the soap request string. So what I want to do is to create a wsdl for the service so that anyone can use it. Fine so far.</p>
<p>&#160;</p>
<p>However the actual data being requested is determined by one of the attributes of the request and the attributes in the response vary depending upon what is being requested. So imagine the following:</p>
<p>&#160;</p>
<p>&#60;Get&#62;</p>
<blockquote><p><font color="#333333">&#60;name&#62;ident_of_thing_I_want&#60;/name&#62;</font></p>
</blockquote>
<blockquote><p><font color="#333333">&#60;other attributes&#62; etc</font></p>
</blockquote>
<p>&#60;/Get&#62;</p>
<p>&#160;</p>
<p>Now for any given request the ident_of_thing_I_want is a fixed string so I want to be able to define that in the wsdl itself so that when I gen a SOAP request from the wsdl for this ‘thing’, that ident string, i.e. ‘ident_of_thing_I_want’ is automatically included into the soap request between the attributes.</p>
<p>In other words, not only does the wsdl define the request attributes, but in the case of this one, the actual contents as well.</p>
<p>&#160;</p>
<p>However, so far I have been unable to figure out if this is even possible, never mind how to do it.</p>
<p>I am using the WSDL editor of the Web Tools Project in Eclipse to create my wsdl and BIRT (also in Eclipse) to test it. to make matters worse I am unfamiliar with either tool or indeed even Eclipse itself so the whole experience so far ‘sucks’.</p>
<p>Plus, the tools are all Java based and Java runs like a snail on my machine!</p>
<p>I’ve been fighting with this for a week now and it’s driving me barmy. This is why I hate all this ‘clever’ stuff. Give me good old assembler any day. Heck I’d even write Cobol if I had to but they’ve even ‘webized’ that these days (sob!).</p>
<p><font color="#333333">P.S. If you know how to do this, pleeeeze let me know!</font></p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[WebService WSDL e RESTful com Java]]></title>
<link>http://dchohfi.wordpress.com/2009/09/10/webservice-wsdl-restful-java/</link>
<pubDate>Thu, 10 Sep 2009 05:23:01 +0000</pubDate>
<dc:creator>dchohfi</dc:creator>
<guid>http://dchohfi.wordpress.com/2009/09/10/webservice-wsdl-restful-java/</guid>
<description><![CDATA[Neste post demonstrarei como criar um WebService WSDL e RESTful na mesma aplicação de modo simplific]]></description>
<content:encoded><![CDATA[Neste post demonstrarei como criar um WebService WSDL e RESTful na mesma aplicação de modo simplific]]></content:encoded>
</item>
<item>
<title><![CDATA[OpenClinica 3.0 Features Preview: Part III]]></title>
<link>http://clinicalresearch.wordpress.com/2009/09/08/openclinica-3-0-features-preview-part-iii/</link>
<pubDate>Tue, 08 Sep 2009 17:48:46 +0000</pubDate>
<dc:creator>paulgalvin</dc:creator>
<guid>http://clinicalresearch.wordpress.com/2009/09/08/openclinica-3-0-features-preview-part-iii/</guid>
<description><![CDATA[Welcome to the 3rd and final installment of the OpenClinica 3.0 features preview!  This post covers ]]></description>
<content:encoded><![CDATA[Welcome to the 3rd and final installment of the OpenClinica 3.0 features preview!  This post covers ]]></content:encoded>
</item>
<item>
<title><![CDATA[The best open source performance load testing tool]]></title>
<link>http://jkvine.wordpress.com/2009/09/08/the-best-open-source-performance-load-testing-tool/</link>
<pubDate>Tue, 08 Sep 2009 04:33:18 +0000</pubDate>
<dc:creator>Nick</dc:creator>
<guid>http://jkvine.wordpress.com/2009/09/08/the-best-open-source-performance-load-testing-tool/</guid>
<description><![CDATA[For a comprehensive list of open source performance test tools please refer here Open Source Perform]]></description>
<content:encoded><![CDATA[For a comprehensive list of open source performance test tools please refer here Open Source Perform]]></content:encoded>
</item>
<item>
<title><![CDATA[WebService, simples assim - Parte 3]]></title>
<link>http://codeerror.wordpress.com/2009/09/06/webservice-simples-assim-parte-3/</link>
<pubDate>Sun, 06 Sep 2009 19:04:49 +0000</pubDate>
<dc:creator>codeerror</dc:creator>
<guid>http://codeerror.wordpress.com/2009/09/06/webservice-simples-assim-parte-3/</guid>
<description><![CDATA[Implementando um Web Service simples O objetivo é aprender, então será criado um serviço bem simples]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><h4>Implementando um Web Service simples</h4>
<p>O objetivo é aprender, então será criado um serviço bem simples. O serviço é a soma de duas variáveis inteiras retornando o resultado. Este exemplo poderá servir para qualquer outra implementação. Abaixo está a classe implementada. O nome do arquivo é Servico.java:<br />
<blockquote>
<p><font color="#800040"><b>public</b> <b>class</b></font> Servico {<br /><b>&#160;&#160;&#160;&#160;&#160; <font color="#800040">public</font></b><font color="#800040"> <b>int</b></font> soma(<b><font color="#800040">int</font></b> valor1, <b><font color="#800040">int</font></b> valor2) {<br /><b>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <font color="#800040">return</font></b> valor1 + valor2;<br />&#160;&#160;&#160;&#160;&#160; } <br />}</p>
</blockquote>
<p>Agora só falta disponibilizá-lo no nosso servidor para o mundo acessar. E, para fazer isso, deve-se alterar o nome do arquivo de <strong>Servico.java</strong> para <strong>Servico.jws</strong>, coloca-lo no diretório: <strong>CATALINA_HOME / webapps / axis /</strong> e iniciar o servidor, se ele já não estiver iniciado. Se já estiver iniciado, o seu Web Service está publicado.
<p>Os arquivos. jws são lidos pelo Axis e representam <strong>Java Web Services</strong>. O Axis se baseará nesses arquivos (. jws) para criar os arquivos de definição WSDL. Todos os métodos públicos existentes nessas classes serão automaticamente disponibilizados para terceiros.
<p>Criar documentos <strong>XML</strong> é demorado e, muitas vezes, chato. Gerar o <strong>WSDL</strong> é uma característica muito relevante na escolha de uma implementação de SOAP e o Axis é um dos poucos frameworks que conseguem fazer essa façanha de maneira transparente para o desenvolvedor. É por esse motivo que ele é altamente recomendado na construção de Web Services.
<p>Para acessar o Web Service criado basta abrir um navegador e ir ao endereço: http://localhost:8080/axis/Servico.jws . Da mesma forma que os outros dois Web Services foram vistos, este também terá um link para ver a especificação WSDL, e novamente poderá ser visto ou não dependendo do seu navegador.
<p>O arquivo WSDL da classe Servico ficará como abaixo:
<p><font color="#4f4f4f">&#60;?xml version=&#8221;1.0&#8243; encoding=&#8221;UTF-8&#8243;?&#62;<br />&#60;wsdl:definitions targetNamespace=&#8221;http://localhost:8080/axis/Servico.jws&#8221;&#160;&#160;&#160; <br />&#160;&#160;&#160;&#160;&#160;&#160; xmlns=&#8221;http://schemas.xmlsoap.org/wsdl/&#8221;&#160;&#160;&#160; <br />&#160;&#160;&#160;&#160;&#160;&#160; xmlns:apachesoap=&#8221;http://xml.apache.org/xml-soap&#8221;&#160;&#160;&#160; <br />&#160;&#160;&#160;&#160;&#160;&#160; xmlns:impl=&#8221;http://localhost:8080/axis/Servico.jws&#8221;&#160;&#160;&#160; <br />&#160;&#160;&#160;&#160;&#160;&#160; xmlns:intf=&#8221;http://localhost:8080/axis/Servico.jws&#8221;&#160;&#160;&#160; <br />&#160;&#160;&#160;&#160;&#160;&#160; xmlns:soapenc=&#8221;http://schemas.xmlsoap.org/soap/encoding/&#8221;&#160;&#160;&#160; <br />&#160;&#160;&#160;&#160;&#160;&#160; xmlns:wsdl=&#8221;http://schemas.xmlsoap.org/wsdl/&#8221;&#160;&#160;&#160; <br />&#160;&#160;&#160;&#160;&#160;&#160; xmlns:wsdlsoap=&#8221;http://schemas.xmlsoap.org/wsdl/soap/&#8221;&#160;&#160;&#160; <br />&#160;&#160;&#160;&#160;&#160;&#160; xmlns:xsd=&#8221;http://www.w3.org/2001/XMLSchema&#8221;&#62;&#160;&#160; <br />&#160;&#160;&#160; &#60;wsdl:message name=&#8221;somaRequest&#8221;&#62;&#160;&#160; <br />&#60;wsdl:part name=&#8221;valor1&#8243; type=&#8221;xsd:int&#8221;/&#62;&#160;&#160; <br />&#60;wsdl:part name=&#8221;valor2&#8243; type=&#8221;xsd:int&#8221;/&#62;&#160;&#160; <br />&#160;&#160; &#60;/wsdl:message&#62;&#160;&#160; <br />&#160;&#160; &#60;wsdl:message name=&#8221;somaResponse&#8221;&#62;&#160;&#160; <br />&#60;wsdl:part name=&#8221;somaReturn&#8221; type=&#8221;xsd:int&#8221;/&#62;&#160;&#160; <br />&#160;&#160; &#60;/wsdl:message&#62;&#160;&#160; <br />&#160;&#160; &#60;wsdl:portType name=&#8221;Servico&#8221;&#62;&#160;&#160; <br />&#160;&#160;&#160;&#160; &#60;wsdl:operation name=&#8221;soma&#8221; parameterOrder=&#8221;valor1 valor2&#8243;&#62;&#160;&#160; <br />&#60;wsdl:input message=&#8221;impl:somaRequest&#8221; name=&#8221;somaRequest&#8221;/&#62;&#160;&#160; <br />&#160;&#160;&#160;&#160;&#160;&#160; &#60;wsdl:output message=&#8221;impl:somaResponse&#8221; name=&#8221;somaResponse&#8221;/&#62;&#160;&#160; <br />&#160;&#160;&#160;&#160; &#60;/wsdl:operation&#62;&#160;&#160; <br />&#160;&#160; &#60;/wsdl:portType&#62;&#160;&#160; <br />&#60;wsdl:binding name=&#8221;ServicoSoapBinding&#8221; type=&#8221;impl:Servico&#8221;&#62;&#160;&#160; <br />&#60;wsdlsoap:binding style=&#8221;rpc&#8221; transport=&#8221;http://schemas.xmlsoap.org/soap/http&#8221;/&#62;&#160;&#160; <br />&#160;&#160;&#160;&#160; &#60;wsdl:operation name=&#8221;soma&#8221;&#62;&#160;&#160; <br />&#160;&#160;&#160;&#160;&#160;&#160; &#60;wsdlsoap:operation soapAction=&#8221;"/&#62;&#160;&#160; <br />&#160;&#160;&#160;&#160;&#160;&#160; &#60;wsdl:input name=&#8221;somaRequest&#8221;&#62;&#160;&#160; <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#60;wsdlsoap:body encodingStyle=&#8221;http://schemas.xmlsoap.org/soap/encoding/&#8221;&#160;&#160;&#160; <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; namespace=&#8221;http://DefaultNamespace&#8221; use=&#8221;encoded&#8221;/&#62;&#160;&#160; <br />&#160;&#160;&#160;&#160;&#160;&#160; &#60;/wsdl:input&#62;&#160;&#160; <br />&#160;&#160;&#160;&#160;&#160;&#160; &#60;wsdl:output name=&#8221;somaResponse&#8221;&#62;&#160;&#160; <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#60;wsdlsoap:body encodingStyle=&#8221;http://schemas.xmlsoap.org/soap/encoding/&#8221;&#160;&#160;&#160; <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; namespace=&#8221;http://localhost:8080/axis/Servico.jws&#8221; use=&#8221;encoded&#8221;/&#62;&#160;&#160; <br />&#160;&#160;&#160;&#160;&#160;&#160; &#60;/wsdl:output&#62;&#160;&#160; <br />&#160;&#160;&#160;&#160; &#60;/wsdl:operation&#62;&#160;&#160; <br />&#160;&#160; &#60;/wsdl:binding&#62;&#160;&#160; <br />&#160;&#160; &#60;wsdl:service name=&#8221;ServicoService&#8221;&#62;&#160;&#160; <br />&#60;wsdl:port binding=&#8221;impl:ServicoSoapBinding&#8221; name=&#8221;Servico&#8221;&#62;&#160;&#160; <br />&#60;wsdlsoap:address location=&#8221;http://localhost:8080/axis/Servico.jws&#8221;/&#62;&#160;&#160; <br />&#160;&#160;&#160;&#160; &#60;/wsdl:port&#62;&#160;&#160; <br />&#160;&#160; &#60;/wsdl:service&#62;&#160;&#160; <br /> &#60;/wsdl:definitions&#62;&#160;&#160; </font></p>
<p>&#160;</p>
<p>Analisar este arquivo é essencial para entender a profundidade da implementação. Uma das linhas mais importantes para este arquivo é a 19ª linha, onde define-se o nome do método e o nome de seus parâmetros. Eles deverão ser de conhecimento público para que as interfaces cliente consigam se comunicar com o Web Service. </p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Web Services in Ubuntu - JAX-WS]]></title>
<link>http://tutysara.wordpress.com/2009/09/05/web-services-in-ubuntu-jax-ws/</link>
<pubDate>Sat, 05 Sep 2009 06:34:17 +0000</pubDate>
<dc:creator>tutysara</dc:creator>
<guid>http://tutysara.wordpress.com/2009/09/05/web-services-in-ubuntu-jax-ws/</guid>
<description><![CDATA[In this post let me go through the process of creating a web service client in java on ubuntu. We ne]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>In this post let me go through the process of creating a web service client in java on ubuntu.</p>
<p>We need to have the apis for programming web services. Java provides a api called JAX-WS which is version 2 of the java web services api the previous version being JAX-RPC. JAX-WS comes a part of JDK6.0 and above. If you are using jdk5 then we need to download the JAX-WS web-service apis. JAX-WS is developed as a separate project called Metro and the latest version can be downloaded from the Metro project site &#8211; <a href="https://jax-ws.dev.java.net/">https://jax-ws.dev.java.net/</a>. you can follow the instructions on the site for installing it.<br />
Once installed it can be checked by tying wsimport at the terminal. It should give an output which looks like this</p>
<p><code><br />
Usage: wsimport [options]<br />
</code><br />
<code><br />
where [options] include:<br />
  -b                  specify jaxws/jaxb binding files or additional schemas<br />
                            (Each  must have its own -b)<br />
  -B            Pass this option to JAXB schema compiler<br />
  -catalog            specify catalog file to resolve external entity references<br />
                            supports TR9401, XCatalog, and OASIS XML Catalog format.<br />
  -d             specify where to place generated output files<br />
  -extension                allow vendor extensions - functionality not specified<br />
                            by the specification.  Use of extensions may<br />
                            result in applications that are not portable or<br />
                            may not interoperate with other implementations<br />
  -help                     display help<br />
  -httpproxy::  specify a HTTP proxy server (port defaults to 8080)<br />
  -keep                     keep generated files<br />
  -p                   specifies the target package<br />
  -quiet                    suppress wsimport output<br />
  -s             specify where to place generated source files<br />
  -target          generate code as per the given JAXWS specification version.<br />
                            version 2.0 will generate compliant code for JAXWS 2.0 spec.<br />
  -verbose                  output messages about what the compiler is doing<br />
  -version                  print version information<br />
  -wsdllocation   @WebServiceClient.wsdlLocation value</p>
<p></code><br />
<code><br />
Examples:<br />
  wsimport stock.wsdl -b stock.xml -b stock.xjb<br />
  wsimport -d generated http://example.org/stock?wsdl</p>
<p></code></p>
<p>If you get an output like this then we are done with the installation. we can proceed to the next step. Otherwise refer tot he metro site for installing this. For people using jdk6 everything is set by default and they can verify their installation by typing the above command in a terminal<br />
Now we will find a site which provides free web service. I found a site <a href="http://www.webservicex.net/">http://www.webservicex.net/</a> which hosts lot of free web services organized into different categories. For this example lets us take a service which is called  WHOIS web service which is available in the utilities section. The url for this is &#8211; <a href="http://www.webservicex.net/WCF/ServiceDetails.aspx?SID=51">http://www.webservicex.net/WCF/ServiceDetails.aspx?SID=51</a></p>
<p>Now we have to get the WSDL for this web service and compile it using the wsimport utility to get the start-up code for our web service.<br />
To do this open a terminal and type<br />
<code></p>
<p>wsimport -keep -verbose -d whois http://www.webservicex.net/whois.asmx?wsdl</p>
<p></code></p>
<p>here the -keep tells the command to keep the generated java files and the -d is used to specify the output directory. we would get a output like this</p>
<p><code><br />
parsing WSDL...<br />
</code><br />
<code><br />
[WARNING] Ignoring SOAP port "whoisSoap12": it uses non-standard SOAP 1.2 binding.<br />
You must specify the "-extension" option to use this binding.<br />
  line 113 of http://www.webservicex.net/whois.asmx?wsdl<br />
</code><code><br />
[WARNING] ignoring port "whoisHttpGet": no SOAP address specified. try running wsimport with -extension switch.<br />
  line 116 of http://www.webservicex.net/whois.asmx?wsdl<br />
</code><code><br />
[WARNING] ignoring port "whoisHttpPost": no SOAP address specified. try running wsimport with -extension switch.<br />
  line 119 of http://www.webservicex.net/whois.asmx?wsdl<br />
</code><code><br />
generating code...<br />
net/webservicex/GetWhoIS.java<br />
net/webservicex/GetWhoISResponse.java<br />
net/webservicex/ObjectFactory.java<br />
net/webservicex/Whois.java<br />
net/webservicex/WhoisSoap.java<br />
net/webservicex/package-info.java<br />
</code><code><br />
</code></p>
<p>Now go to the directory where these files are created and we can create the client.</p>
<p>Create a java file with the following contents</p>
<p><code><br />
package net.webservicex;<br />
public class WhoisClient{<br />
	public static void main(String args[]){<br />
		Whois whois=new Whois();<br />
		WhoisSoap whoisSoap=whois.getWhoisSoap();<br />
		System.out.println(whoisSoap.getWhoIS("www.google.com"));</p>
<p>	}<br />
}<br />
</code></p>
<p>or still more usable as</p>
<p><code><br />
package net.webservicex;<br />
public class WhoisClient{<br />
	public static void main(String args[]){<br />
		Whois whois=new Whois();<br />
		WhoisSoap whoisSoap=whois.getWhoisSoap();<br />
		System.out.println(whoisSoap.getWhoIS(args[0]));</p>
<p>	}<br />
}<br />
</code></p>
<p>That is it we are donw with our web service client. Now compile the program by setting the classpath to point to the directory that contains the generated class files using the command</p>
<p><code><br />
javac WhoisClient.java<br />
</code></p>
<p>Now the program can be run with by typing this in the terminal</p>
<p><code><br />
java net.webservicex.WhoisClient www.google.com<br />
</code></p>
<p>we would get an output as below</p>
<p><code><br />
Whois Server Version 2.0<br />
</code><code><br />
Domain names in the .com and .net domains can now be registered<br />
with many different competing registrars. Go to http://www.internic.net<br />
for detailed information.<br />
</code><code><br />
WWW.GOOGLE.COM.VN<br />
WWW.GOOGLE.COM.TW<br />
WWW.GOOGLE.COM.TR<br />
WWW.GOOGLE.COM.SA<br />
WWW.GOOGLE.COM.PE<br />
WWW.GOOGLE.COM.MX<br />
WWW.GOOGLE.COM.CO<br />
WWW.GOOGLE.COM.BR<br />
WWW.GOOGLE.COM.AU<br />
WWW.GOOGLE.COM.AR<br />
</code><code><br />
To single out one record, look it up with "xxx", where xxx is one of the<br />
of the records displayed above. If the records are the same, look them up<br />
with "=xxx" to receive a full display for each record.<br />
</code><code><br />
&#62;&#62;&#62; Last update of whois database: Sat, 05 Sep 2009 06:29:11 UTC &#60;&#60;&#60;<br />
</code><code><br />
NOTICE: The expiration date displayed in this record is the date the<br />
registrar&#39;s sponsorship of the domain name registration in the registry is<br />
currently set to expire. This date does not necessarily reflect the expiration<br />
date of the domain name registrant&#39;s agreement with the sponsoring<br />
registrar.  Users may consult the sponsoring registrar&#39;s Whois database to<br />
view the registrar&#39;s reported date of expiration for this registration.<br />
</code><code><br />
TERMS OF USE: You are not authorized to access or query our Whois<br />
database through the use of electronic processes that are high-volume and<br />
automated except as reasonably necessary to register domain names or<br />
modify existing registrations; the Data in VeriSign Global Registry<br />
Services&#39; (&#34;VeriSign&#34;) Whois database is provided by VeriSign for<br />
information purposes only, and to assist persons in obtaining information<br />
about or related to a domain name registration record. VeriSign does not<br />
guarantee its accuracy. By submitting a Whois query, you agree to abide<br />
by the following terms of use: You agree that you may use this Data only<br />
for lawful purposes and that under no circumstances will you use this Data<br />
to: (1) allow, enable, or otherwise support the transmission of mass<br />
unsolicited, commercial advertising or solicitations via e-mail, telephone,<br />
or facsimile; or (2) enable high volume, automated, electronic processes<br />
that apply to VeriSign (or its computer systems). The compilation,<br />
repackaging, dissemination or other use of this Data is expressly<br />
prohibited without the prior written consent of VeriSign. You agree not to<br />
use electronic processes that are automated and high-volume to access or<br />
query the Whois database except as reasonably necessary to register<br />
domain names or modify existing registrations. VeriSign reserves the right<br />
to restrict your access to the Whois database in its sole discretion to ensure<br />
operational stability.  VeriSign may restrict or terminate your access to the<br />
Whois database for failure to abide by these terms of use. VeriSign<br />
reserves the right to modify these terms at any time.<br />
</code><code><br />
The Registry database contains ONLY .COM, .NET, .EDU domains and<br />
Registrars.<br />
</code><code><br />
</code></p>
<p>Here we can give different host names as argument and experiment with it. There are many free web services available at http://www.webservicex.net and almost all of them can be consumed using the same method by using java clients. Thanks for reading</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Webservice, simples assim - Parte 1]]></title>
<link>http://codeerror.wordpress.com/2009/08/29/webservice-simples-assim-parte-1/</link>
<pubDate>Sat, 29 Aug 2009 18:07:29 +0000</pubDate>
<dc:creator>codeerror</dc:creator>
<guid>http://codeerror.wordpress.com/2009/08/29/webservice-simples-assim-parte-1/</guid>
<description><![CDATA[Introdução a Web Service utilizando Axis A galera da Apache nos disponibilizou essa grande ferrament]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p><strong><u>Introdução a Web Service utilizando Axis</u></strong></p>
<p>A galera da Apache nos disponibilizou essa grande ferramenta que irá ajudar muito no desenvolvimento e implementação de Web Services, ela é super fácil de utilizar, sendo que faz quase todo o trabalho sozinha, escrevendo os XML, interpretando os métodos implementados nas classes JAVA e gerando o tal arquivo WSDL.</p>
<p>Um requisito básico de qualquer empresa é prover serviços, sejam os vendedores de uma empresa, o setor de custos e compras, os prestadores de serviço, etc. Cada empresa oferece serviços para a comunicação entre ela e outras pessoas, sejam pessoas físicas ou jurídicas, internas ou externas a empresa.<br />Alguns desses serviços podem ser automatizados. Por exemplo, não é necessário existir um representante de vendas se o seu cliente já tem, em mãos, o preço e todos os outros dados relevantes para constituir um pedido de compra. Este pedido pode e, em muitos casos, já é feito, via interfaces computacionais. O cliente entra em seu site, monta o pedido como desejar e confirma a compra. Isto é um serviço web, ou seja, um serviço que está publicado na web para que qualquer pessoa possa fazer uso.</p>
<p>Web Services foram criados para construir aplicações deste tipo, aplicações que são serviços na internet. Porém não faz parte do conceito de Web Service a criação de interfaces gráficas para os usuários, deixando esta parte para outras empresas ou pessoas desenvolverem. É comum encontrar textos afirmando que Web Services disponibilizam serviços somente para desenvolvedores, ou que Web Services nada mais são do que chamada de métodos usando XML. Estas definições estão corretas.</p>
<p>Web Services é a tecnologia ideal para comunicação entre sistemas, sendo muito usado em aplicações B2B. A comunicação entre os serviços é padronizada possibilitando a independência de plataforma e de linguagem de programação. Por exemplo, um sistema de reserva de passagens aéreas feito em Java e rodando em um servidor Linux pode acessar, com transparência, um serviço de reserva de hotel feito em. Net rodando em um servidor Microsoft.<br />Para comunicar-se com o Web Service, é necessário uma implementação do protocolo SOAP (Simple Object Access Protocol) definido no W3C . Este protocolo é o responsável pela independência que o Web Service precisa. Atualmente já encontra-se várias implementações disponíveis em várias linguagens. É só escolher uma e usar.</p>
<p>Na Figura abaixo encontra-se um diagrama mostrando as mensagens trocadas entre cliente e servidor em uma comunicação SOAP. Existem duas aplicações se comunicando, um Client Wrapper e um Server Wrapper que estão disponibilizando a transparência para as aplicações. Entre eles só trafega XML, seguindo o protocolo SOAP sobre HTTP.<br /> <img alt="Imagem: Descri&#231;&#227;o de um webservice" src="http://codeerror.background.googlepages.com/webservice_1.jpg"><br />Um Web Service será publicado, e para que outras pessoas possam utilizá-lo é necessário definir como ele é, como deve ser acessado, e que valores ele retornará. Estas definições são descritas em um arquivo XML de acordo com a padronização <strong><font color="#ff0000">Web Service Description Language</font></strong> (<strong>WSDL</strong>). Este arquivo deve ser construído para que os usuários do serviço possam entender o funcionamento do Web Service e, logicamente, será de acesso público.<br />Os Web Services também podem ser utilizados para implementar arquiteturas orientadas a serviços, as Service-Oriented Architectures (SOA). Neste modelo de arquitetura os principais requisitos viram serviços e são acessados por outros serviços, modularizando e aumentando a coesão dos componentes da aplicação.<br />O que será implementado neste artigo é um Web Service simples, para aprendizado da tecnologia e para desmentir a afirmação que Web Services são complexos de construir e complexos para utilizar. </p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[معرفی چند کتاب عالی برای کار با XML]]></title>
<link>http://technologyirani.wordpress.com/2009/08/29/%d9%85%d8%b9%d8%b1%d9%81%db%8c-%da%86%d9%86%d8%af-%da%a9%d8%aa%d8%a7%d8%a8-%d8%b9%d8%a7%d9%84%db%8c-%d8%a8%d8%b1%d8%a7%db%8c-%da%a9%d8%a7%d8%b1-%d8%a8%d8%a7-xml/</link>
<pubDate>Sat, 29 Aug 2009 10:50:56 +0000</pubDate>
<dc:creator>technologyirani</dc:creator>
<guid>http://technologyirani.wordpress.com/2009/08/29/%d9%85%d8%b9%d8%b1%d9%81%db%8c-%da%86%d9%86%d8%af-%da%a9%d8%aa%d8%a7%d8%a8-%d8%b9%d8%a7%d9%84%db%8c-%d8%a8%d8%b1%d8%a7%db%8c-%da%a9%d8%a7%d8%b1-%d8%a8%d8%a7-xml/</guid>
<description><![CDATA[برای آن دسته از دوستانی که با زبان PHP آشنا هستند کتاب زیر را پیشنهاد می نمایم در این کتاب علاقه مند]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p style="text-align:right;">برای آن دسته از دوستانی که با زبان PHP آشنا هستند کتاب زیر را پیشنهاد می نمایم در این کتاب علاقه مندان با حدود 20 تکنولوژی زیر شاخه XML آشنا خواهند شد مانند ( DOM,XSD,RelaxNG,XSL,XSLT,&#8230;. )</p>
<p style="text-align:center;"><a href="http://www.amazon.com/Pro-PHP-XML-Web-Services/dp/1590596331" target="_blank"><img class="size-full wp-image-314 alignnone" title="xml-4" src="http://technologyirani.wordpress.com/files/2009/08/xml-4.jpg" alt="xml-4" width="250" height="340" /></a></p>
<p style="text-align:center;"><span id="main" style="visibility:visible;"> </span></p>
<p style="text-align:center;"><strong><em><em>Pro PHP XML and Web Services</em></em></strong></p>
<p style="text-align:center;"><strong><em><em>Buy: </em></em><span style="color:#ff6600;">$171.98</span></strong></p>
<p style="text-align:right;">برای دوستان علاقه مند به پایگاه داده کتاب زیر را پیشنهاد می نمایم</p>
<p style="text-align:center;"><a href="http://www.amazon.com/Professional-XML-Databases-Kevin-Williams/dp/1861003587"><img class="size-full wp-image-315 alignnone" title="xml-1" src="http://technologyirani.wordpress.com/files/2009/08/xml-1.jpg" alt="xml-1" width="250" height="315" /></a></p>
<p style="text-align:center;"><strong><span id="btAsinTitle">Professional XML Databases</span></strong></p>
<p style="text-align:center;"><strong>Buy: <span style="color:#ff6600;">$25.87</span></strong></p>
<p style="text-align:right;">برای آنان که کم و بیش با XML آشنا هستند کتاب زیر را پیشنهاد می کنم</p>
<p style="text-align:center;"><a href="http://www.amazon.com/Understanding-Web-Services-Independent-Technology/dp/0201750813"><img class="size-full wp-image-316 alignnone" title="xml-5" src="http://technologyirani.wordpress.com/files/2009/08/xml-5.jpg" alt="xml-5" width="250" height="314" /></a></p>
<p style="text-align:center;"><strong><span id="btAsinTitle">Understanding Web Services: XML, WSDL, SOAP, and UDDI</span></strong></p>
<p style="text-align:center;"><strong>Buy: <span style="color:#ff6600;"><strong>$32.84</strong></span></strong></p>
<p style="text-align:center;">
<p style="text-align:right;"><span style="color:#333333;">این هم دو کتاب در دو سطح مقدماتی و پیشرفته در دنیای XML</span><strong><span style="color:#ff6600;"><strong><br />
</strong></span></strong></p>
<p style="text-align:center;"><a href="http://www.amazon.com/Beginning-XML-Programmer-David-Hunter/dp/0764570773"><img class="size-full wp-image-317 alignnone" title="xml-7" src="http://technologyirani.wordpress.com/files/2009/08/xml-7.jpg" alt="xml-7" width="250" height="314" /></a></p>
<p style="text-align:center;"><strong><span id="btAsinTitle">Beginning XML</span></strong></p>
<p style="text-align:center;"><strong>Buy: <span style="color:#ff6600;">$8.00</span></strong></p>
<p style="text-align:center;"><a href="http://www.amazon.com/exec/obidos/tg/detail/-/0471777773/ref=ord_cart_shr?_encoding=UTF8&#38;m=ATVPDKIKX0DER&#38;v=glance"><img class="size-full wp-image-318 alignnone" title="xml-6" src="http://technologyirani.wordpress.com/files/2009/08/xml-6.jpg" alt="xml-6" width="250" height="322" /></a></p>
<p style="text-align:center;"><strong><span id="btAsinTitle">Professional XML</span></strong></p>
<p style="text-align:center;"><strong>Buy: <span style="color:#ff6600;">$31.49</span></strong></p>
<p style="text-align:right;">تهیه و تنظیم : بهنام سلطان رضایی</p>
<p style="text-align:right;">Produced by : Behnam Soltanrezaey</p>
</div>]]></content:encoded>
</item>

</channel>
</rss>
