The stubs are threadsafe wrt invocations. You've brought up that they're not wrt properties. But I don't believe it's possible to make a stub threadsafe wrt properties from INSIDE the stub. That's something that the stub caller must do. (This is essentially the reason why we instantiate a new Call object for each invocation, because there are things we do in the stub to the Call object that cannot be made thread-safe from within the Call object.) Even if the stub extended Call, this same issue would still exist (and we'd break the current level of thread safety, I think).
Russell Butek [EMAIL PROTECTED] Rick Rineholt/Raleigh/IBM@IBMUS on 03/29/2002 09:20:30 AM Please respond to [EMAIL PROTECTED] To: [EMAIL PROTECTED] cc: Subject: Re: client.Service getCall() had a chance to very briefly look at this and here are my thoughts: The problem stems that functions are needed from the "call" object which is not generally exposed by the client Stub object, and the need to make the Stub thread safe. - As I think we've all agreed if needed this needs to be moved up to the Stub where the issue lies. -I've scanned JAX-RPC spec and the only reference I see with regard to multi-threading is that serialzer and deserializer need to be thread safe to allow them to be by multiple threads. Question: Are we claiming that Stubs, Locator , Service and Call object are thread safe? Can these objects be created on one thread and used on another? Simultaneously? If yes, from what I can tell there is more work to be done (i.e. client.Stub where setUsername, setTimeout, setMaintainSession etc could all be set by one thread and before a call is made on that thread another thread could change these) If these objects should only be used on a single thread then couldn't the call object be cached and retrieved from a private variable and not threadlocal? Can org.apache.axis.client.Stub not extend the org.apache.axis.client.Call object and instead of creating a new one every time just reuse its logic? That would change String xml = locator.getCall().getResponseMessage ().getSOAPPart().getAsString(); to soap.getResponseMessage().getSOAPPart().getAsString //looks more natural. I have not looked at this idea in depth, but just offer it in case it may be helpful. I really don't know all the implications of this (Caveat Emptor :-) (one side affect is that the Stub would probably not be thread safe unless Call is made to be :-( ). Some un-related observations: Couldnt the firstCall logic be moved up into the generated class and made to be static so that the registration is done only once ever? Why not byte the bullet and assume the call will be made and create a fake call in constructor and do one time TypeMappingRegistry registration there? In any case I think some of the vectors like cachedSerClasses be set to null after the firstCall. Sorry, but there are probably no great revelations here. Rick Rineholt "The truth is out there... All you need is a better search engine!" [EMAIL PROTECTED] Davanum Srinivas <[EMAIL PROTECTED]> on 03/26/2002 03:06:00 PM Please respond to [EMAIL PROTECTED] To: [EMAIL PROTECTED] cc: Subject: Re: client.Service getCall() Please see enclosed WSDL and Main.java. Thanks, dims --- Davanum Srinivas <[EMAIL PROTECTED]> wrote: > Dug, Rick, > > Am open to alternative(s). Please run WSDL2Java on the WSDL and let me know where this support > should be added. > > Thanks, > dims > > --- Doug Davis <[EMAIL PROTECTED]> wrote: > > It seems like a cleaner solution would have been to have the stubs > > manage this for you rather than the Sevice object since, as Rick > > pointed out, in a multithreaded scenario this could get really > > messy. > > -Dug > > > > > > Davanum Srinivas <[EMAIL PROTECTED]> on 03/26/2002 07:50:25 AM > > > > Please respond to [EMAIL PROTECTED] > > > > To: [EMAIL PROTECTED] > > cc: > > Subject: Re: client.Service getCall() > > > > > > > > Dug, > > > > I think i mentioned it. I want WSDL2Java to generate code and i want to use > > JUST the generated > > code!!! > > > > Thanks, > > dims > > > > --- Doug Davis <[EMAIL PROTECTED]> wrote: > > > I'm confused - if you need access to the response XML, why not just ask > > the > > > Call object (or its message context) for the response message. Why does > > > the Service object need to be involved at all? > > > -Dug > > > > > > Davanum Srinivas <[EMAIL PROTECTED]> on 03/26/2002 07:36:06 AM > > > > > > Please respond to [EMAIL PROTECTED] > > > > > > To: Rick Rineholt/Raleigh/IBM@IBMUS > > > cc: [EMAIL PROTECTED] > > > Subject: Re: client.Service getCall() > > > > > > > > > > > > Rick, > > > > > > Here's the scenario where i NEED this (See enclosed WSDL and Main.java > > for > > > running the generated > > > stub). The problem is that when AXIS fails to convert the SOAP Response > > XML > > > into Java objects...I > > > need access to the Response XML itself!!!. Right now this is not possible > > > any other way. If > > > there's a better way to do this, please let me know and we can get rid of > > > this UGLY hack. > > > > > > Thanks, > > > dims > > > > > > --- Rick Rineholt <[EMAIL PROTECTED]> wrote: > > > > Davanum, > > > > I would like to get your thinking about this method and why the need > > for > > > > this functionality in the client.Service object. If presumably the > > > caller > > > > did the createCall, I would think it would be possible for it to cache > > > this > > > > call object away and not have the client.Service object do this. Doing > > > > this has a negative consequence if lets say your an axis handler that > > > wants > > > > make soap calls using this client api. The Servlet engine may/will be > > > > calling you on many POOLED threads and caching this in the thread > > object > > > > means that garbage collection will never be called util that thread is > > > used > > > > by the server again AND it makes another createCall call to replace it. > > > > IMO this is a very bad side effect that I don't think is very desirable > > > for > > > > a functionality that the caller could presumably do and be cognizant > > of > > > > its side effects. > > > > > > > > Rick Rineholt > > > > "The truth is out there... All you need is a better search engine!" > > > > > > > > [EMAIL PROTECTED] > > > > > > > > > > > > > ===== > > > Davanum Srinivas - http://xml.apache.org/~dims/ > > > > > > __________________________________________________ > > > Do You Yahoo!? > > > Yahoo! Movies - coverage of the 74th Academy Awards® > > > http://movies.yahoo.com/ > > > > > > > > > > > > ===== > > Davanum Srinivas - http://xml.apache.org/~dims/ > > > > __________________________________________________ > > Do You Yahoo!? > > Yahoo! Movies - coverage of the 74th Academy Awards® > > http://movies.yahoo.com/ > > > > > > > ===== > Davanum Srinivas - http://xml.apache.org/~dims/ > > __________________________________________________ > Do You Yahoo!? > Yahoo! Movies - coverage of the 74th Academy Awards® > http://movies.yahoo.com/ ===== Davanum Srinivas - http://xml.apache.org/~dims/ __________________________________________________ Do You Yahoo!? Yahoo! Movies - coverage of the 74th Academy Awards® http://movies.yahoo.com/ <?xml version="1.0" encoding="utf-8"?> <definitions xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:soap ="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:s=" http://www.w3.org/2001/XMLSchema" xmlns:s0="http://www.dotnetjunkies.com" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tm=" http://microsoft.com/wsdl/mime/textMatching/" xmlns:mime=" http://schemas.xmlsoap.org/wsdl/mime/" targetNamespace=" http://www.dotnetjunkies.com" xmlns="http://schemas.xmlsoap.org/wsdl/"> <types> <s:schema elementFormDefault="qualified" targetNamespace=" http://www.dotnetjunkies.com"> <s:import namespace="http://www.w3.org/2001/XMLSchema" /> <s:element name="GetNewsSummary"> <s:complexType /> </s:element> <s:element name="GetNewsSummaryResponse"> <s:complexType> <s:sequence> <s:element minOccurs="0" maxOccurs="1" name ="GetNewsSummaryResult"> <s:complexType> <s:sequence> <!-- <s:element ref="s:schema" /> --> <s:any /> </s:sequence> </s:complexType> </s:element> </s:sequence> </s:complexType> </s:element> <s:element name="GetNewsSummary2"> <s:complexType> <s:sequence> <s:element minOccurs="0" maxOccurs="1" name="tableName" type ="s:string" /> </s:sequence> </s:complexType> </s:element> <s:element name="GetNewsSummary2Response"> <s:complexType> <s:sequence> <s:element minOccurs="0" maxOccurs="1" name ="GetNewsSummary2Result"> <s:complexType> <s:sequence> <!-- <s:element ref="s:schema" /> --> <s:any /> </s:sequence> </s:complexType> </s:element> </s:sequence> </s:complexType> </s:element> <s:element name="GetTutorialsSummary"> <s:complexType /> </s:element> <s:element name="GetTutorialsSummaryResponse"> <s:complexType> <s:sequence> <s:element minOccurs="0" maxOccurs="1" name ="GetTutorialsSummaryResult"> <s:complexType> <s:sequence> <!-- <s:element ref="s:schema" /> --> <s:any /> </s:sequence> </s:complexType> </s:element> </s:sequence> </s:complexType> </s:element> <s:element name="GetTutorialsSummary2"> <s:complexType> <s:sequence> <s:element minOccurs="0" maxOccurs="1" name="tableName" type ="s:string" /> </s:sequence> </s:complexType> </s:element> <s:element name="GetTutorialsSummary2Response"> <s:complexType> <s:sequence> <s:element minOccurs="0" maxOccurs="1" name ="GetTutorialsSummary2Result"> <s:complexType> <s:sequence> <!-- <s:element ref="s:schema" /> --> <s:any /> </s:sequence> </s:complexType> </s:element> </s:sequence> </s:complexType> </s:element> <s:element name="GetTutorialsSummaryByTopic"> <s:complexType> <s:sequence> <s:element minOccurs="1" maxOccurs="1" name="topicID" type ="s:int" /> <s:element minOccurs="0" maxOccurs="1" name="tableName" type ="s:string" /> </s:sequence> </s:complexType> </s:element> <s:element name="GetTutorialsSummaryByTopicResponse"> <s:complexType> <s:sequence> <s:element minOccurs="0" maxOccurs="1" name ="GetTutorialsSummaryByTopicResult"> <s:complexType> <s:sequence> <!-- <s:element ref="s:schema" /> --> <s:any /> </s:sequence> </s:complexType> </s:element> </s:sequence> </s:complexType> </s:element> <s:element name="Get4NewestTutorialsSummary"> <s:complexType> <s:sequence> <s:element minOccurs="0" maxOccurs="1" name="tableName" type ="s:string" /> </s:sequence> </s:complexType> </s:element> <s:element name="Get4NewestTutorialsSummaryResponse"> <s:complexType> <s:sequence> <s:element minOccurs="0" maxOccurs="1" name ="Get4NewestTutorialsSummaryResult"> <s:complexType> <s:sequence> <!-- <s:element ref="s:schema" /> --> <s:any /> </s:sequence> </s:complexType> </s:element> </s:sequence> </s:complexType> </s:element> <s:element name="GetFAQ"> <s:complexType /> </s:element> <s:element name="GetFAQResponse"> <s:complexType> <s:sequence> <s:element minOccurs="0" maxOccurs="1" name="GetFAQResult"> <s:complexType> <s:sequence> <!-- <s:element ref="s:schema" /> --> <s:any /> </s:sequence> </s:complexType> </s:element> </s:sequence> </s:complexType> </s:element> <s:element name="GetFAQ2"> <s:complexType> <s:sequence> <s:element minOccurs="0" maxOccurs="1" name="tableName" type ="s:string" /> </s:sequence> </s:complexType> </s:element> <s:element name="GetFAQ2Response"> <s:complexType> <s:sequence> <s:element minOccurs="0" maxOccurs="1" name="GetFAQ2Result"> <s:complexType> <s:sequence> <!-- <s:element ref="s:schema" /> --> <s:any /> </s:sequence> </s:complexType> </s:element> </s:sequence> </s:complexType> </s:element> <s:element name="DataSet" nillable="true"> <s:complexType> <s:sequence> <!-- <s:element ref="s:schema" /> --> <s:any /> </s:sequence> </s:complexType> </s:element> </s:schema> </types> <message name="GetNewsSummarySoapIn"> <part name="parameters" element="s0:GetNewsSummary" /> </message> <message name="GetNewsSummarySoapOut"> <part name="parameters" element="s0:GetNewsSummaryResponse" /> </message> <message name="GetNewsSummary2SoapIn"> <part name="parameters" element="s0:GetNewsSummary2" /> </message> <message name="GetNewsSummary2SoapOut"> <part name="parameters" element="s0:GetNewsSummary2Response" /> </message> <message name="GetTutorialsSummarySoapIn"> <part name="parameters" element="s0:GetTutorialsSummary" /> </message> <message name="GetTutorialsSummarySoapOut"> <part name="parameters" element="s0:GetTutorialsSummaryResponse" /> </message> <message name="GetTutorialsSummary2SoapIn"> <part name="parameters" element="s0:GetTutorialsSummary2" /> </message> <message name="GetTutorialsSummary2SoapOut"> <part name="parameters" element="s0:GetTutorialsSummary2Response" /> </message> <message name="GetTutorialsSummaryByTopicSoapIn"> <part name="parameters" element="s0:GetTutorialsSummaryByTopic" /> </message> <message name="GetTutorialsSummaryByTopicSoapOut"> <part name="parameters" element="s0:GetTutorialsSummaryByTopicResponse" /> </message> <message name="Get4NewestTutorialsSummarySoapIn"> <part name="parameters" element="s0:Get4NewestTutorialsSummary" /> </message> <message name="Get4NewestTutorialsSummarySoapOut"> <part name="parameters" element="s0:Get4NewestTutorialsSummaryResponse" /> </message> <message name="GetFAQSoapIn"> <part name="parameters" element="s0:GetFAQ" /> </message> <message name="GetFAQSoapOut"> <part name="parameters" element="s0:GetFAQResponse" /> </message> <message name="GetFAQ2SoapIn"> <part name="parameters" element="s0:GetFAQ2" /> </message> <message name="GetFAQ2SoapOut"> <part name="parameters" element="s0:GetFAQ2Response" /> </message> <message name="GetNewsSummaryHttpGetIn" /> <message name="GetNewsSummaryHttpGetOut"> <part name="Body" element="s0:DataSet" /> </message> <message name="GetNewsSummary2HttpGetIn"> <part name="tableName" type="s:string" /> </message> <message name="GetNewsSummary2HttpGetOut"> <part name="Body" element="s0:DataSet" /> </message> <message name="GetTutorialsSummaryHttpGetIn" /> <message name="GetTutorialsSummaryHttpGetOut"> <part name="Body" element="s0:DataSet" /> </message> <message name="GetTutorialsSummary2HttpGetIn"> <part name="tableName" type="s:string" /> </message> <message name="GetTutorialsSummary2HttpGetOut"> <part name="Body" element="s0:DataSet" /> </message> <message name="GetTutorialsSummaryByTopicHttpGetIn"> <part name="topicID" type="s:string" /> <part name="tableName" type="s:string" /> </message> <message name="GetTutorialsSummaryByTopicHttpGetOut"> <part name="Body" element="s0:DataSet" /> </message> <message name="Get4NewestTutorialsSummaryHttpGetIn"> <part name="tableName" type="s:string" /> </message> <message name="Get4NewestTutorialsSummaryHttpGetOut"> <part name="Body" element="s0:DataSet" /> </message> <message name="GetFAQHttpGetIn" /> <message name="GetFAQHttpGetOut"> <part name="Body" element="s0:DataSet" /> </message> <message name="GetFAQ2HttpGetIn"> <part name="tableName" type="s:string" /> </message> <message name="GetFAQ2HttpGetOut"> <part name="Body" element="s0:DataSet" /> </message> <message name="GetNewsSummaryHttpPostIn" /> <message name="GetNewsSummaryHttpPostOut"> <part name="Body" element="s0:DataSet" /> </message> <message name="GetNewsSummary2HttpPostIn"> <part name="tableName" type="s:string" /> </message> <message name="GetNewsSummary2HttpPostOut"> <part name="Body" element="s0:DataSet" /> </message> <message name="GetTutorialsSummaryHttpPostIn" /> <message name="GetTutorialsSummaryHttpPostOut"> <part name="Body" element="s0:DataSet" /> </message> <message name="GetTutorialsSummary2HttpPostIn"> <part name="tableName" type="s:string" /> </message> <message name="GetTutorialsSummary2HttpPostOut"> <part name="Body" element="s0:DataSet" /> </message> <message name="GetTutorialsSummaryByTopicHttpPostIn"> <part name="topicID" type="s:string" /> <part name="tableName" type="s:string" /> </message> <message name="GetTutorialsSummaryByTopicHttpPostOut"> <part name="Body" element="s0:DataSet" /> </message> <message name="Get4NewestTutorialsSummaryHttpPostIn"> <part name="tableName" type="s:string" /> </message> <message name="Get4NewestTutorialsSummaryHttpPostOut"> <part name="Body" element="s0:DataSet" /> </message> <message name="GetFAQHttpPostIn" /> <message name="GetFAQHttpPostOut"> <part name="Body" element="s0:DataSet" /> </message> <message name="GetFAQ2HttpPostIn"> <part name="tableName" type="s:string" /> </message> <message name="GetFAQ2HttpPostOut"> <part name="Body" element="s0:DataSet" /> </message> <portType name="ContentServicesSoap"> <operation name="GetNewsSummary"> <documentation>Returns a DataSet with one DataTable (News). The DataTable contains summaries for all News articles in the past 14 days in the database ordered by SubDate descending.</documentation> <input message="s0:GetNewsSummarySoapIn" /> <output message="s0:GetNewsSummarySoapOut" /> </operation> <operation name="GetNewsSummary2"> <documentation>Returns a DataSet with one DataTable named from the tableName parameter. The DataTable contains summaries for all News articles in the past 14 days in the database ordered by SubDate descending.</documentation> <input message="s0:GetNewsSummary2SoapIn" /> <output message="s0:GetNewsSummary2SoapOut" /> </operation> <operation name="GetTutorialsSummary"> <documentation>Returns a DataSet with one DataTable (Tutorials). The DataTable contains summaries for all tutorials in the database ordered by SubDate descending. Levels indicated in the result set are:<ol><li>Beginner</li> <li>Intermediate</li><li>Advanced</li> </ol></documentation> <input message="s0:GetTutorialsSummarySoapIn" /> <output message="s0:GetTutorialsSummarySoapOut" /> </operation> <operation name="GetTutorialsSummary2"> <documentation>Returns a DataSet with one DataTable named from the tableName parameter. The DataTable contains summaries for all tutorials in the database ordered by SubDate descending. Levels indicated in the result set are:<ol> <li>Beginner</li><li>Intermediate</li> <li>Advanced</li></ol></documentation> <input message="s0:GetTutorialsSummary2SoapIn" /> <output message="s0:GetTutorialsSummary2SoapOut" /> </operation> <operation name="GetTutorialsSummaryByTopic"> <documentation>Returns a DataSet with one DataTable named from the tableName parameter. The DataTable contains summaries for all tutorials of the specified topicID ordered by SubDate descending. <p>Topic IDs are:<ol><li>General</li> <li>Web Forms</li><li>Server Controls</li> <li>Data Binding</li><li>Advanced Techniques</li><li>Web Services</li> <li>Custom ASP.NET Components</li><li>ASP to ASP.NET Migration</li><li>COM+</li><li>Mobile Web Forms</li></ol></p><p>Levels indicated in the result set are:<ol><li>Beginner</li> <li>Intermediate</li><li>Advanced</li> </ol></p></documentation> <input message="s0:GetTutorialsSummaryByTopicSoapIn" /> <output message="s0:GetTutorialsSummaryByTopicSoapOut" /> </operation> <operation name="Get4NewestTutorialsSummary"> <documentation>Returns a DataSet with one DataTable named from the tableName parameter. The DataTable contains summaries for the four (4) newset tutorials in the database ordered by SubDate descending.Levels indicated in the result set are:<ol> <li>Beginner</li><li>Intermediate</li> <li>Advanced</li></ol></documentation> <input message="s0:Get4NewestTutorialsSummarySoapIn" /> <output message="s0:Get4NewestTutorialsSummarySoapOut" /> </operation> <operation name="GetFAQ"> <documentation>Returns a DataSet with one DataTable (FAQs) of .NET FAQs and answers.</documentation> <input message="s0:GetFAQSoapIn" /> <output message="s0:GetFAQSoapOut" /> </operation> <operation name="GetFAQ2"> <documentation>Returns a DataSet with one DataTable named from the tableName parameter of .NET FAQs and answers.</documentation> <input message="s0:GetFAQ2SoapIn" /> <output message="s0:GetFAQ2SoapOut" /> </operation> </portType> <portType name="ContentServicesHttpGet"> <operation name="GetNewsSummary"> <documentation>Returns a DataSet with one DataTable (News). The DataTable contains summaries for all News articles in the past 14 days in the database ordered by SubDate descending.</documentation> <input message="s0:GetNewsSummaryHttpGetIn" /> <output message="s0:GetNewsSummaryHttpGetOut" /> </operation> <operation name="GetNewsSummary2"> <documentation>Returns a DataSet with one DataTable named from the tableName parameter. The DataTable contains summaries for all News articles in the past 14 days in the database ordered by SubDate descending.</documentation> <input message="s0:GetNewsSummary2HttpGetIn" /> <output message="s0:GetNewsSummary2HttpGetOut" /> </operation> <operation name="GetTutorialsSummary"> <documentation>Returns a DataSet with one DataTable (Tutorials). The DataTable contains summaries for all tutorials in the database ordered by SubDate descending. Levels indicated in the result set are:<ol><li>Beginner</li> <li>Intermediate</li><li>Advanced</li> </ol></documentation> <input message="s0:GetTutorialsSummaryHttpGetIn" /> <output message="s0:GetTutorialsSummaryHttpGetOut" /> </operation> <operation name="GetTutorialsSummary2"> <documentation>Returns a DataSet with one DataTable named from the tableName parameter. The DataTable contains summaries for all tutorials in the database ordered by SubDate descending. Levels indicated in the result set are:<ol> <li>Beginner</li><li>Intermediate</li> <li>Advanced</li></ol></documentation> <input message="s0:GetTutorialsSummary2HttpGetIn" /> <output message="s0:GetTutorialsSummary2HttpGetOut" /> </operation> <operation name="GetTutorialsSummaryByTopic"> <documentation>Returns a DataSet with one DataTable named from the tableName parameter. The DataTable contains summaries for all tutorials of the specified topicID ordered by SubDate descending. <p>Topic IDs are:<ol><li>General</li> <li>Web Forms</li><li>Server Controls</li> <li>Data Binding</li><li>Advanced Techniques</li><li>Web Services</li> <li>Custom ASP.NET Components</li><li>ASP to ASP.NET Migration</li><li>COM+</li><li>Mobile Web Forms</li></ol></p><p>Levels indicated in the result set are:<ol><li>Beginner</li> <li>Intermediate</li><li>Advanced</li> </ol></p></documentation> <input message="s0:GetTutorialsSummaryByTopicHttpGetIn" /> <output message="s0:GetTutorialsSummaryByTopicHttpGetOut" /> </operation> <operation name="Get4NewestTutorialsSummary"> <documentation>Returns a DataSet with one DataTable named from the tableName parameter. The DataTable contains summaries for the four (4) newset tutorials in the database ordered by SubDate descending.Levels indicated in the result set are:<ol> <li>Beginner</li><li>Intermediate</li> <li>Advanced</li></ol></documentation> <input message="s0:Get4NewestTutorialsSummaryHttpGetIn" /> <output message="s0:Get4NewestTutorialsSummaryHttpGetOut" /> </operation> <operation name="GetFAQ"> <documentation>Returns a DataSet with one DataTable (FAQs) of .NET FAQs and answers.</documentation> <input message="s0:GetFAQHttpGetIn" /> <output message="s0:GetFAQHttpGetOut" /> </operation> <operation name="GetFAQ2"> <documentation>Returns a DataSet with one DataTable named from the tableName parameter of .NET FAQs and answers.</documentation> <input message="s0:GetFAQ2HttpGetIn" /> <output message="s0:GetFAQ2HttpGetOut" /> </operation> </portType> <portType name="ContentServicesHttpPost"> <operation name="GetNewsSummary"> <documentation>Returns a DataSet with one DataTable (News). The DataTable contains summaries for all News articles in the past 14 days in the database ordered by SubDate descending.</documentation> <input message="s0:GetNewsSummaryHttpPostIn" /> <output message="s0:GetNewsSummaryHttpPostOut" /> </operation> <operation name="GetNewsSummary2"> <documentation>Returns a DataSet with one DataTable named from the tableName parameter. The DataTable contains summaries for all News articles in the past 14 days in the database ordered by SubDate descending.</documentation> <input message="s0:GetNewsSummary2HttpPostIn" /> <output message="s0:GetNewsSummary2HttpPostOut" /> </operation> <operation name="GetTutorialsSummary"> <documentation>Returns a DataSet with one DataTable (Tutorials). The DataTable contains summaries for all tutorials in the database ordered by SubDate descending. Levels indicated in the result set are:<ol><li>Beginner</li> <li>Intermediate</li><li>Advanced</li> </ol></documentation> <input message="s0:GetTutorialsSummaryHttpPostIn" /> <output message="s0:GetTutorialsSummaryHttpPostOut" /> </operation> <operation name="GetTutorialsSummary2"> <documentation>Returns a DataSet with one DataTable named from the tableName parameter. The DataTable contains summaries for all tutorials in the database ordered by SubDate descending. Levels indicated in the result set are:<ol> <li>Beginner</li><li>Intermediate</li> <li>Advanced</li></ol></documentation> <input message="s0:GetTutorialsSummary2HttpPostIn" /> <output message="s0:GetTutorialsSummary2HttpPostOut" /> </operation> <operation name="GetTutorialsSummaryByTopic"> <documentation>Returns a DataSet with one DataTable named from the tableName parameter. The DataTable contains summaries for all tutorials of the specified topicID ordered by SubDate descending. <p>Topic IDs are:<ol><li>General</li> <li>Web Forms</li><li>Server Controls</li> <li>Data Binding</li><li>Advanced Techniques</li><li>Web Services</li> <li>Custom ASP.NET Components</li><li>ASP to ASP.NET Migration</li><li>COM+</li><li>Mobile Web Forms</li></ol></p><p>Levels indicated in the result set are:<ol><li>Beginner</li> <li>Intermediate</li><li>Advanced</li> </ol></p></documentation> <input message="s0:GetTutorialsSummaryByTopicHttpPostIn" /> <output message="s0:GetTutorialsSummaryByTopicHttpPostOut" /> </operation> <operation name="Get4NewestTutorialsSummary"> <documentation>Returns a DataSet with one DataTable named from the tableName parameter. The DataTable contains summaries for the four (4) newset tutorials in the database ordered by SubDate descending.Levels indicated in the result set are:<ol> <li>Beginner</li><li>Intermediate</li> <li>Advanced</li></ol></documentation> <input message="s0:Get4NewestTutorialsSummaryHttpPostIn" /> <output message="s0:Get4NewestTutorialsSummaryHttpPostOut" /> </operation> <operation name="GetFAQ"> <documentation>Returns a DataSet with one DataTable (FAQs) of .NET FAQs and answers.</documentation> <input message="s0:GetFAQHttpPostIn" /> <output message="s0:GetFAQHttpPostOut" /> </operation> <operation name="GetFAQ2"> <documentation>Returns a DataSet with one DataTable named from the tableName parameter of .NET FAQs and answers.</documentation> <input message="s0:GetFAQ2HttpPostIn" /> <output message="s0:GetFAQ2HttpPostOut" /> </operation> </portType> <binding name="ContentServicesSoap" type="s0:ContentServicesSoap"> <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style ="document" /> <operation name="GetNewsSummary"> <soap:operation soapAction=" http://www.dotnetjunkies.com/GetNewsSummary" style="document" /> <input> <soap:body use="literal" /> </input> <output> <soap:body use="literal" /> </output> </operation> <operation name="GetNewsSummary2"> <soap:operation soapAction=" http://www.dotnetjunkies.com/GetNewsSummary2" style="document" /> <input> <soap:body use="literal" /> </input> <output> <soap:body use="literal" /> </output> </operation> <operation name="GetTutorialsSummary"> <soap:operation soapAction=" http://www.dotnetjunkies.com/GetTutorialsSummary" style="document" /> <input> <soap:body use="literal" /> </input> <output> <soap:body use="literal" /> </output> </operation> <operation name="GetTutorialsSummary2"> <soap:operation soapAction=" http://www.dotnetjunkies.com/GetTutorialsSummary2" style="document" /> <input> <soap:body use="literal" /> </input> <output> <soap:body use="literal" /> </output> </operation> <operation name="GetTutorialsSummaryByTopic"> <soap:operation soapAction=" http://www.dotnetjunkies.com/GetTutorialsSummaryByTopic" style ="document" /> <input> <soap:body use="literal" /> </input> <output> <soap:body use="literal" /> </output> </operation> <operation name="Get4NewestTutorialsSummary"> <soap:operation soapAction=" http://www.dotnetjunkies.com/Get4NewestTutorialsSummary" style ="document" /> <input> <soap:body use="literal" /> </input> <output> <soap:body use="literal" /> </output> </operation> <operation name="GetFAQ"> <soap:operation soapAction="http://www.dotnetjunkies.com/GetFAQ" style="document" /> <input> <soap:body use="literal" /> </input> <output> <soap:body use="literal" /> </output> </operation> <operation name="GetFAQ2"> <soap:operation soapAction="http://www.dotnetjunkies.com/GetFAQ2" style="document" /> <input> <soap:body use="literal" /> </input> <output> <soap:body use="literal" /> </output> </operation> </binding> <binding name="ContentServicesHttpGet" type="s0:ContentServicesHttpGet"> <http:binding verb="GET" /> <operation name="GetNewsSummary"> <http:operation location="/GetNewsSummary" /> <input> <http:urlEncoded /> </input> <output> <mime:mimeXml part="Body" /> </output> </operation> <operation name="GetNewsSummary2"> <http:operation location="/GetNewsSummary2" /> <input> <http:urlEncoded /> </input> <output> <mime:mimeXml part="Body" /> </output> </operation> <operation name="GetTutorialsSummary"> <http:operation location="/GetTutorialsSummary" /> <input> <http:urlEncoded /> </input> <output> <mime:mimeXml part="Body" /> </output> </operation> <operation name="GetTutorialsSummary2"> <http:operation location="/GetTutorialsSummary2" /> <input> <http:urlEncoded /> </input> <output> <mime:mimeXml part="Body" /> </output> </operation> <operation name="GetTutorialsSummaryByTopic"> <http:operation location="/GetTutorialsSummaryByTopic" /> <input> <http:urlEncoded /> </input> <output> <mime:mimeXml part="Body" /> </output> </operation> <operation name="Get4NewestTutorialsSummary"> <http:operation location="/Get4NewestTutorialsSummary" /> <input> <http:urlEncoded /> </input> <output> <mime:mimeXml part="Body" /> </output> </operation> <operation name="GetFAQ"> <http:operation location="/GetFAQ" /> <input> <http:urlEncoded /> </input> <output> <mime:mimeXml part="Body" /> </output> </operation> <operation name="GetFAQ2"> <http:operation location="/GetFAQ2" /> <input> <http:urlEncoded /> </input> <output> <mime:mimeXml part="Body" /> </output> </operation> </binding> <binding name="ContentServicesHttpPost" type ="s0:ContentServicesHttpPost"> <http:binding verb="POST" /> <operation name="GetNewsSummary"> <http:operation location="/GetNewsSummary" /> <input> <mime:content type="application/x-www-form-urlencoded" /> </input> <output> <mime:mimeXml part="Body" /> </output> </operation> <operation name="GetNewsSummary2"> <http:operation location="/GetNewsSummary2" /> <input> <mime:content type="application/x-www-form-urlencoded" /> </input> <output> <mime:mimeXml part="Body" /> </output> </operation> <operation name="GetTutorialsSummary"> <http:operation location="/GetTutorialsSummary" /> <input> <mime:content type="application/x-www-form-urlencoded" /> </input> <output> <mime:mimeXml part="Body" /> </output> </operation> <operation name="GetTutorialsSummary2"> <http:operation location="/GetTutorialsSummary2" /> <input> <mime:content type="application/x-www-form-urlencoded" /> </input> <output> <mime:mimeXml part="Body" /> </output> </operation> <operation name="GetTutorialsSummaryByTopic"> <http:operation location="/GetTutorialsSummaryByTopic" /> <input> <mime:content type="application/x-www-form-urlencoded" /> </input> <output> <mime:mimeXml part="Body" /> </output> </operation> <operation name="Get4NewestTutorialsSummary"> <http:operation location="/Get4NewestTutorialsSummary" /> <input> <mime:content type="application/x-www-form-urlencoded" /> </input> <output> <mime:mimeXml part="Body" /> </output> </operation> <operation name="GetFAQ"> <http:operation location="/GetFAQ" /> <input> <mime:content type="application/x-www-form-urlencoded" /> </input> <output> <mime:mimeXml part="Body" /> </output> </operation> <operation name="GetFAQ2"> <http:operation location="/GetFAQ2" /> <input> <mime:content type="application/x-www-form-urlencoded" /> </input> <output> <mime:mimeXml part="Body" /> </output> </operation> </binding> <service name="ContentServices"> <documentation>DotNetJunkies.com ContentServices provides access to news and tutorial summaries and FAQs from DotNetJunkies.com</documentation> <port name="ContentServicesSoap" binding="s0:ContentServicesSoap"> <soap:address location=" http://www.dotnetjunkies.com/services/ContentServices.asmx" /> </port> <port name="ContentServicesHttpGet" binding ="s0:ContentServicesHttpGet"> <http:address location=" http://www.dotnetjunkies.com/services/ContentServices.asmx" /> </port> <port name="ContentServicesHttpPost" binding ="s0:ContentServicesHttpPost"> <http:address location=" http://www.dotnetjunkies.com/services/ContentServices.asmx" /> </port> </service> </definitions> package com.dotnetjunkies.www; public class Main { public static void main(String[] args) throws Exception { ContentServicesLocator locator = new ContentServicesLocator(); ContentServicesSoap soap = locator.getContentServicesSoap(); try { GetNewsSummaryResult result = soap.getNewsSummary(); } catch (Exception e){ } String xml = locator.getCall().getResponseMessage().getSOAPPart ().getAsString(); System.out.println("==============="); System.out.println(xml); System.out.println("==============="); } }