At work we are moving to weblogic 8.1 from iPlanet 6.5. We had up some SOAP services using legacy apache SOAP 2.2 and I wanted to see if I could get the SOAP 2.2 clients to work with Weblogic Web Services. I was able to get things working pretty quickly except for a method that took an array of strings as an argument.

The Weblogic documentation is a bit confusing, calling an array of strings (or other built-in data type) a Supported Java Non-Built-In Data Type. It's also poorly organized, IMO. After following all the links to the autotype and source2wsdd ant tasks, I was able to build a Web Services Deployment Descriptor that handled the array of strings. Or so I thought.

When I sent a message using apache SOAP 2.2, Weblogic would return an error:

weblogic.xml.schema.binding.DeserializationException: mapping lookup failure. type=['http://www.w3.org/1999/XMLSchema']:xsd:string schema context=TypedSchemaContext{javaType=java.lang.String} (see Fault Detail for stacktrace)

The type signature in the web-services.xml deployment descriptor looked like:
    <xsd:complexType      name="ArrayOfString">
     <xsd:complexContent>
      <xsd:restriction        xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
        base="soapenc:Array">
       <xsd:attribute         xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
         ref="soapenc:arrayType"
         wsdl:arrayType="xsd:string[]">
       </xsd:attribute>
      </xsd:restriction>
     </xsd:complexContent>
    </xsd:complexType>
This ArrayOfString definition was the same as the one found here so I thought that confirmed the definition was correct.

After beating my head against the wall and gnashing my teeth, I figured out that it's not. This schema definition appears to apply to newer, WDSL based clients. The right definition for the legacy apache SOAP 2.2 client is:
    <xsd:complexType      name="ArrayOfString">
     <xsd:sequence>
      <xsd:element        type="xsd:string"
        name="item"
        minOccurs="0"
        maxOccurs="unbounded">
      </xsd:element>
     </xsd:sequence>
    </xsd:complexType>
Of course, after I solved the problem, I found this link which had the answer all along.