I have a message service that I have written and deployed into Axis, which Axis accepts using the "method (SOAPEnvelope, SOAPEnvelope)" signature. On the server the implementation searches for a list of products and returns a SOAP body like this:
<soapenv:Body>
<m:SearchProductsResponse xmlns:m="http://orderware.net">
<Product>
<Code>AWSCU-100</Code>
<Qty>AWSCU-100</Qty>
<Price>123.45</Price>
</Product>
<Product>
... // repeating list of products
</Product>
</m:SearchProductsResponse>
</soapenv:Body>
Because this is a pure message service there are no java classes on the server side so I hand coded a WSDL file. I was suprised to find that after a bit of tinkering that Axis could generate client side stubs (using WSDL2Java) to correctly call my service ( I wasn't aware that Axis was able to generate client side code for Message services) . A bean class SearchProductsResponse is created that has an accessor to an array of Product[] beans. A bean class is also created for the ProductRequest top level namespace in the request which contains an array of Filters[] which are basically a set of WHERE clauses to the server side product search. I created up a little tester class and great I was able to call my service and return products.
Now armed with the WSDL file I tried calling the service with the .NET test client (our Customer wants to consume the service with a C# client) and although it interprets the WSDL file and creates all the relevant proxies, null Product[] beans are returned. On the server side my service is called and it does seem to return all the data in the same way it returns it to the Axis client.
Unfortunately I'm a complete novice when it comes to .NET and C# but was wondering if someone has come across this problem or if there are known interop issues with Axis document style webservices and .NET?
Finally one difference I noticed in the generted .NET code was that in the Axis client a bean is created for the request (containing the filters[]) and a bean is created for the response (ProductSearchResponse) containing the products[]. In .NET the Filter[] seems to be passed directly to the invoke() method and it attempts to decode a Product[] array directly from the return of the invoke method (i.e. no bean classes are created for the top level namespaced element in the SOAP body).
Any pointers would be much appreciated...
darren.
-------------------------------------------------
Darren Rowley
Software Architect
OrderWare� Solutions Limited
[EMAIL PROTECTED]
www.orderware.net
PH: +64 9 573 3316
FX: +64 9 573 3301
-------------------------------------------------
