Same problem posted on axis-user a while ago -- my solution (workaround?) was to modify the Axis WSDL (attached).
Why this WSDL works and not the one generated by java2wsdl, I leave to the experts to analyze... The bottom line of the typedef is the same (an array of anyType). It's either a bug in .Net, or in the generated WSDL (or perhaps something in between?)... -- Oliver Tom Jordahl wrote: > > If I have a Java class that looks like this: > public class ArrayEcho { > public Object[] echoArray (Object[] a) > { > return a; > } > > } > > The WSDL we generate looks like this: > <types> > <schema targetNamespace="http://schemas.xmlsoap.org/soap/encoding/" > xmlns="http://www.w3.org/2001/XMLSchema"> > <element name="Array" nillable="true" type="SOAP-ENC:Array"/> > </schema> > </types> > <wsdl:message name="echoArrayRequest"> > <wsdl:part name="a" type="SOAP-ENC:Array"/> > </wsdl:message> > <wsdl:message name="echoArrayResponse"> > <wsdl:part name="return" type="SOAP-ENC:Array"/> > </wsdl:message> > > Is this valid WSDL? > > .NET wsdl.exe reports: > ------------------------------------- > Schema validation warning: Type 'http://schemas.xmlsoap.org/soap/encoding/:Array' is >not declared. > > Warning: Schema could not be validated. Class generation may fail or may produce >incorrect results. > > Error: Unable to import binding 'ArrayEchoSoapBinding' from namespace >'http://localhost:8080/ArrayEcho.jws'. > - Unable to import operation 'echoArray'. > - The datatype 'Array' is missing. > -------------------------------------------- > > But our tool correctly generates the stub: > public java.lang.Object[] echoArray(java.lang.Object[] a) > > Does anyone (Rich?) who understands the WSDL we generate for Arrays have any insight >on this? Are generating (and parsing) incorrect WSDL or do we understand >SOAP-ENC:Array and .NET just doesn't? > > -- > Tom Jordahl > Macromedia Server Development
<?xml version="1.0" encoding="UTF-8"?> <wsdl:definitions targetNamespace="http://domain.forwardvue.com" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:intf="http://domain.forwardvue.com" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:impl="http://domain.forwardvue.com-impl" xmlns="http://schemas.xmlsoap.org/wsdl/"> <types> <!-- Replaced this typedef (SOAP-ENC:Array) with "ArrayOf_xsd_anyType", and the references to "SOAP-ENC:Array" with "intf:ArrayOf_xsd_anyType": <schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://schemas.xmlsoap.org/soap/encoding/"> <element name="Array" nillable="true" type="SOAP-ENC:Array"/> </schema> --> <schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://domain.forwardvue.com"> <complexType name="ArrayOf_xsd_anyType"> <complexContent> <restriction base="SOAP-ENC:Array"> <attribute ref="SOAP-ENC:arrayType" wsdl:arrayType="xsd:anyType[]"/> </restriction> </complexContent> </complexType> <element name="ArrayOf_xsd_anyType" nillable="true" type="intf:ArrayOf_xsd_anyType"/> </schema> </types> <wsdl:message name="setFooRequest"> <wsdl:part name="arrayList" type="intf:ArrayOf_xsd_anyType"/> </wsdl:message> <wsdl:message name="getFooRequest"> </wsdl:message> <wsdl:message name="setFooResponse"> </wsdl:message> <wsdl:message name="getFooResponse"> <wsdl:part name="return" type="intf:ArrayOf_xsd_anyType"/> </wsdl:message> <wsdl:message name="TestResponse"> </wsdl:message> <wsdl:message name="TestRequest"> <wsdl:part name="arrayList" type="intf:ArrayOf_xsd_anyType"/> </wsdl:message> <wsdl:portType name="Test"> <wsdl:operation name="Test"> <wsdl:input message="intf:TestRequest"/> <wsdl:output message="intf:TestResponse"/> </wsdl:operation> <wsdl:operation name="setFoo" parameterOrder="arrayList"> <wsdl:input message="intf:setFooRequest"/> <wsdl:output message="intf:setFooResponse"/> </wsdl:operation> <wsdl:operation name="getFoo"> <wsdl:input message="intf:getFooRequest"/> <wsdl:output message="intf:getFooResponse"/> </wsdl:operation> </wsdl:portType> <wsdl:binding name="ContractVueSoapBinding" type="intf:Test"> <wsdlsoap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/> <wsdl:operation name="Test"> <wsdlsoap:operation soapAction=""/> <wsdl:input> <wsdlsoap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://domain.forwardvue.com"/> </wsdl:input> <wsdl:output> <wsdlsoap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://domain.forwardvue.com"/> </wsdl:output> </wsdl:operation> <wsdl:operation name="setFoo"> <wsdlsoap:operation soapAction=""/> <wsdl:input> <wsdlsoap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://domain.forwardvue.com"/> </wsdl:input> <wsdl:output> <wsdlsoap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://domain.forwardvue.com"/> </wsdl:output> </wsdl:operation> <wsdl:operation name="getFoo"> <wsdlsoap:operation soapAction=""/> <wsdl:input> <wsdlsoap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://domain.forwardvue.com"/> </wsdl:input> <wsdl:output> <wsdlsoap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://domain.forwardvue.com"/> </wsdl:output> </wsdl:operation> </wsdl:binding> <wsdl:service name="TestService"> <wsdl:port name="ContractVue" binding="intf:ContractVueSoapBinding"> <wsdlsoap:address location="http://localhost:8080/axis/services/ContractVue"/> </wsdl:port> </wsdl:service> </wsdl:definitions>