-
1. Re: Array element type mismatch error while accessing array
jason.greene Apr 25, 2005 9:42 PM (in response to sidazad)It looks like for some reason the arraydeserializer is being used instead of beandeserializer. Are you using a ws4ee-deployment.xml file? If you are, make sure the serializer and deserializer are set to the following:'
serializer='org.apache.axis.encoding.ser.BeanSerializerFactory'
deserializer='org.apache.axis.encoding.ser.BeanDeserializerFactory'
In most cases though, you won't need this file, so alternatively you can delete.
If you are not using a ws4ee-deployment.xml file could you look in your $JBOSS_HOME/data/[webservice deployment]/[port component].wsdd
and paste the type mapping.
Thanks,
-Jason -
2. Re: Array element type mismatch error while accessing array
sidazad Apr 26, 2005 9:40 AM (in response to sidazad)Hi,
I am using a ws4ee-deployment.xml file and the resulting .wsdd is pasted below:<deployment xmlns='http://xml.apache.org/axis/wsdd/' xmlns:java='http://xml.apache.org/axis/wsdd/providers/java' xmlns:soap='http://schemas.xmlsoap.org/soap/encoding/' xmlns:xsi='http://www.w3.org/2000/10/XMLSchema-instance' xmlns:xsd='http://www.w3.org/2001/XMLSchema'> <service name='wseetest1.ear/wseetest1-ejb.jar#WseeEndpoint1' style='rpc' use='literal' provider='Handler'> <parameter name='webserviceID' value='wseetest1.ear/wseetest1-ejb.jar#WseeEndpoint1' /> <parameter name='handlerClass' value='org.jboss.webservice.server.InvokerProviderEJB' /> <operation name='getFirstName' qname='ns1:getFirstName' returnQName='getFirstNameReturn' returnType='xsd:string' xmlns:ns1='http://interfaces.wseetest1.bb' > <parameter name='in0' qname='in0' mode='IN' type='xsd:int' /> </operation> <operation name='getNameType' qname='ns1:getNameType' returnQName='ns2:ComplexType' returnType='ns2:ComplexType' xmlns:ns1='http://interfaces.wseetest1.bb' xmlns:ns2='http://data.wseetest1.bb' > </operation> <operation name='printTypes' qname='ns1:printTypes' returnQName='printTypesReturn' returnType='xsd:int' xmlns:ns1='http://interfaces.wseetest1.bb' > <parameter name='in0' qname='ns2:ComplexTypeArray' mode='IN' type='ns2:ComplexTypeArray' xmlns:ns2='http://data.wseetest1.bb' /> </operation> <!-- User defined type mapping --> <typeMapping qname='ns2:ComplexType' xmlns:ns2='http://data.wseetest1.bb' type='java:bb.wseetest1.data.ComplexType' serializer='org.apache.axis.encoding.ser.BeanSerializerFactory' deserializer='org.apache.axis.encoding.ser.BeanDeserializerFactory' encodingStyle=''> <typeDesc> </typeDesc> </typeMapping> <!-- User defined type mapping --> <typeMapping qname='ns2:ComplexTypeArray' xmlns:ns2='http://data.wseetest1.bb' type='java:bb.wseetest1.data.ComplexTypeArray' serializer='org.apache.axis.encoding.ser.BeanSerializerFactory' deserializer='org.apache.axis.encoding.ser.BeanDeserializerFactory' encodingStyle=''> <typeDesc> </typeDesc> </typeMapping> <!-- User defined type mapping --> <typeMapping qname='ns2:printTypesRequest' xmlns:ns2='http://data.wseetest1.bb' type='java:bb.wseetest1.data.ComplexTypeArray' serializer='org.apache.axis.encoding.ser.BeanSerializerFactory' deserializer='org.apache.axis.encoding.ser.BeanDeserializerFactory' encodingStyle=''> <typeDesc> </typeDesc> </typeMapping> </service> </deployment>
I will also paste an excerpt from my .wsdl just in case:<wsdl:types> <schema targetNamespace="http://data.wseetest1.bb" xmlns="http://www.w3.org/2001/XMLSchema"> <import namespace="http://schemas.xmlsoap.org/soap/encoding/"/> <complexType name="ComplexType"> <sequence> <element name="name" nillable="true" type="xsd:string"/> </sequence> </complexType> <complexType name="ComplexTypeArray"> <sequence> <element name="elements" nillable="true" type="impl:ArrayOf_tns2_ComplexType"/> </sequence> </complexType> </schema> <schema targetNamespace="http://interfaces.wseetest1.bb" xmlns="http://www.w3.org/2001/XMLSchema"> <import namespace="http://schemas.xmlsoap.org/soap/encoding/"/> <complexType name="ArrayOf_tns2_ComplexType"> <complexContent> <restriction base="soapenc:Array"> <attribute ref="soapenc:arrayType" wsdl:arrayType="tns2:ComplexType[]" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"/> </restriction> </complexContent> </complexType> </schema> </wsdl:types> <wsdl:message name="getNameTypeRequest"> </wsdl:message> <wsdl:message name="getFirstNameRequest"> <wsdl:part name="in0" type="xsd:int"/> </wsdl:message> <wsdl:message name="printTypesResponse"> <wsdl:part name="printTypesReturn" type="xsd:int"/> </wsdl:message> <wsdl:message name="getFirstNameResponse"> <wsdl:part name="getFirstNameReturn" type="xsd:string"/> </wsdl:message> <wsdl:message name="printTypesRequest"> <wsdl:part name="in0" type="tns2:ComplexTypeArray"/> </wsdl:message> <wsdl:message name="getNameTypeResponse"> <wsdl:part name="getNameTypeReturn" type="tns2:ComplexType"/> </wsdl:message> <wsdl:portType name="WseeEndpoint1"> <wsdl:operation name="getFirstName" parameterOrder="in0"> <wsdl:input name="getFirstNameRequest" message="impl:getFirstNameRequest"/> <wsdl:output name="getFirstNameResponse" message="impl:getFirstNameResponse"/> </wsdl:operation> <wsdl:operation name="getNameType"> <wsdl:input name="getNameTypeRequest" message="impl:getNameTypeRequest"/> <wsdl:output name="getNameTypeResponse" message="impl:getNameTypeResponse"/> </wsdl:operation> <wsdl:operation name="printTypes" parameterOrder="in0"> <wsdl:input name="printTypesRequest" message="impl:printTypesRequest"/> <wsdl:output name="printTypesResponse" message="impl:printTypesResponse"/> </wsdl:operation> </wsdl:portType>
Thanks, Sid. -
3. Re: Array element type mismatch error while accessing array
sidazad Apr 26, 2005 10:32 AM (in response to sidazad)Also, I tried without my ws4ee-deployment.xml and in this case the .wsdd uses the following mappings:
<deployment xmlns='http://xml.apache.org/axis/wsdd/' xmlns:java='http://xml.apache.org/axis/wsdd/providers/java' xmlns:soap='http://schemas.xmlsoap.org/soap/encoding/' xmlns:xsi='http://www.w3.org/2000/10/XMLSchema-instance' xmlns:xsd='http://www.w3.org/2001/XMLSchema'> <service name='wseetest1.ear/wseetest1-ejb.jar#WseeEndpoint1' style='rpc' use='literal' provider='Handler'> <parameter name='webserviceID' value='wseetest1.ear/wseetest1-ejb.jar#WseeEndpoint1' /> <parameter name='handlerClass' value='org.jboss.webservice.server.InvokerProviderEJB' /> <operation name='getFirstName' qname='ns1:getFirstName' returnQName='getFirstNameReturn' returnType='xsd:string' xmlns:ns1='http://interfaces.wseetest1.bb' > <parameter name='in0' qname='in0' mode='IN' type='xsd:int' /> </operation> <operation name='getNameType' qname='ns1:getNameType' returnQName='ns2:ComplexType' returnType='ns2:ComplexType' xmlns:ns1='http://interfaces.wseetest1.bb' xmlns:ns2='http://data.wseetest1.bb' > </operation> <operation name='printTypes' qname='ns1:printTypes' returnQName='printTypesReturn' returnType='xsd:int' xmlns:ns1='http://interfaces.wseetest1.bb' > <parameter name='in0' qname='ns2:ComplexTypeArray' mode='IN' type='ns2:ComplexTypeArray' xmlns:ns2='http://data.wseetest1.bb' /> </operation> <typeMapping qname='ns2:ComplexType' xmlns:ns2='http://data.wseetest1.bb' type='java:bb.wseetest1.data.ComplexType' serializer='org.jboss.webservice.encoding.ser.MetaDataBeanSerializerFactory' deserializer='org.jboss.webservice.encoding.ser.MetaDataBeanDeserializerFactory' encodingStyle=''> <typeDesc> <elementDesc fieldName='name' xmlName='name'/> <elementOrder> <element name='name'/> </elementOrder> </typeDesc> </typeMapping> <typeMapping qname='ns2:ComplexTypeArray' xmlns:ns2='http://data.wseetest1.bb' type='java:bb.wseetest1.data.ComplexTypeArray' serializer='org.jboss.webservice.encoding.ser.MetaDataBeanSerializerFactory' deserializer='org.jboss.webservice.encoding.ser.MetaDataBeanDeserializerFactory' encodingStyle=''> <typeDesc> <elementDesc fieldName='elements' xmlName='elements'/> <elementOrder> <element name='elements'/> </elementOrder> </typeDesc> </typeMapping> </service> </deployment>
That is the MetaDataBeanSerializerFactory. I copied the last 2 typeMapping entries as they are into my ws4ee-deployment.xml and simply changed the Serializer/DeSerializers to org.apache.axis.encoding.ser.BeanSerializerFactory and so on, but whether I use the ws4ee-deployment.xml or not, I receive the same error message.
Thanks. -
4. Re: Array element type mismatch error while accessing array
jason.greene Apr 26, 2005 11:54 AM (in response to sidazad)Ah, the problem is you are using rpc/encoding (which is forbidden by the WS-I Basic Profile) you need to use rpc/literal.
-Jason -
5. Re: Array element type mismatch error while accessing array
sidazad Apr 26, 2005 2:39 PM (in response to sidazad)You are right, I have a DII client and I just did the following:
call.setProperty(ENCODING_STYLE_PROPERTY, ""); call.setProperty(Call.OPERATION_STYLE_PROPERTY, "document");
This also gave an error message,14:33:30,750 ERROR [ServerEngine] Server error java.lang.IllegalArgumentException: Namespace URI cannot be null at org.apache.axis.utils.Mapping.setNamespaceURI(Mapping.java:87)
but it's a different one. I haven't used wscompile to generate the DII client and just wrote my own plus I haven't played around enough with it to complain yet :)
Thanks. -
6. Re: Array element type mismatch error while accessing array
jason.greene Apr 29, 2005 1:20 PM (in response to sidazad)There was a bug with handling empty namespaces that was fixed in the latest branch (will be included in 4.0.2).
-Jason