You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-user@axis.apache.org by Claudio Miranda <cl...@claudius.com.br> on 2006/01/07 01:44:22 UTC
[axis] unexpected element type
Hi all, I am making some progress with Axis.
Some operations works others fails.
The error is:
unexpected element type: expected={http://www.w3.org/2001/XMLSchema}string, actual={http://schemas.xmlsoap.org/soap/encoding/}string
at com.sun.xml.rpc.encoding.SerializerBase.verifyType(SerializerBase.java:128)
at com.sun.xml.rpc.encoding.SimpleTypeSerializer.deserialize(SimpleTypeSerializer.java:114)
at com.sun.xml.rpc.encoding.AttachmentSerializer.deserialize(AttachmentSerializer.java:219)
at com.sun.xml.rpc.encoding.ReferenceableSerializerImpl.deserialize(ReferenceableSerializerImpl.java:185)
at com.sun.service.email.access.dto.dominio.DominioDTO_4_SOAPSerializer.doDeserialize(DominioDTO_4_SOAPSerializer.java:79)
at com.sun.xml.rpc.encoding.ObjectSerializerBase.deserialize(ObjectSerializerBase.java:192)
at com.sun.xml.rpc.encoding.ReferenceableSerializerImpl.deserialize(ReferenceableSerializerImpl.java:155)
at com.sun.service.email.access.ws.dominio.consulta.DominioConsulta_getDadosDominio_RequestStruct_4_SOAPSerializer.doDeserialize(DominioConsulta_getDadosDominio_RequestStruct_4_SOAPSerializer.java:43)
at com.sun.xml.rpc.encoding.ObjectSerializerBase.deserialize(ObjectSerializerBase.java:192)
I took a look at this message of axis-users, but was not clearly answered, the errors looks the same I am reporting.
http://www.nabble.com/URI-for-"basic"-java-types-t108371.html#a298857
As you will see below, some operation works, others no. With the tests I made, every operation who uses a complex object as parameter doesn't works, but every other operation who uses String, Short, even returning complex objects works.
Take a look:
private static final String DOMINIO_CON_NAMESPACE_VALUE = "urn:DominioConsultaWS";
private static final QName QNAME_DominioDTO = new QName(DOMINIO_CON_NAMESPACE_VALUE, "DominioDTO");
DominioDTO is a file (source and class) generated by wscompile
##### this DOESN'T works
Call call = CallUtil.createStandardCall(QNAME_SERVICE_NAME, QNAME_PORT_NAME, usuario, sei, senha);
org.apache.axis.client.Call axisCall = (org.apache.axis.client.Call)call;
axisCall.registerTypeMapping(DominioDTO.class, QNAME_DominioDTO, BeanSerializerFactory.class, BeanDeserializerFactory.class);
call.addParameter("DominioDTO_1", QNAME_DominioDTO, DominioDTO.class, ParameterMode.INOUT);
call.setReturnType(QNAME_DominioDTO, DominioDTO.class);
call.setOperationName(new QName(DOMINIO_CON_NAMESPACE_VALUE,"getDadosDominio"));
##### this WORKS
Call call = CallUtil.createStandardCall(QNAME_SERVICE_NAME, QNAME_PORT_NAME, usuario, sei, senha);
call.setReturnType(XMLType.SOAP_ARRAY, String[].class);
call.setOperationName(new QName(DOMINIO_CON_NAMESPACE_VALUE,"getListaDominio"));
// registrar mapeamento das classes complexas
org.apache.axis.client.Call axisCall = (org.apache.axis.client.Call)call;
axisCall.registerTypeMapping(DominioDTO.class, QNAME_DominioDTO, BeanSerializerFactory.class, BeanDeserializerFactory.class);
axisCall.registerTypeMapping(String[].class,new QName(NamespaceConstants.NSURI_SOAP_ENCODING,""), ArraySerializerFactory.class, ArrayDeserializerFactory.class);
##### CallUtil.createStandardCall method
ServiceFactory factory = ServiceFactory.newInstance();
Service service = factory.createService(serviceName);
Call call = service.createCall(portName);
org.apache.axis.client.Call axisCall = (org.apache.axis.client.Call) call;
call.setTargetEndpointAddress(sei);
call.setProperty(org.apache.axis.AxisEngine.PROP_DOMULTIREFS, Boolean.FALSE);
call.setProperty(org.apache.axis.client.Call.CONNECTION_TIMEOUT_PROPERTY, TIMEOUT);
call.setProperty(Call.OPERATION_STYLE_PROPERTY, "rpc");
call.setProperty(Call.USERNAME_PROPERTY, user);
call.setProperty(Call.PASSWORD_PROPERTY, password);
call.setProperty(Call.SOAPACTION_URI_PROPERTY, "");
call.setProperty(Call.SOAPACTION_USE_PROPERTY, Boolean.TRUE);
call.setProperty(Call.ENCODINGSTYLE_URI_PROPERTY, NamespaceConstants.NSURI_SOAP_ENCODING);
Any information will help.
thanks for your time and patience.
--
Claudio Miranda
_______________________________________________________________
http://www.claudius.com.br/blog http://www.summa-tech.com
http://www.soujava.org.br
Re: [axis] unexpected element type
Posted by Anne Thomas Manes <at...@gmail.com>.
My first recommendation is to not using SOAP encoding -- in other words,
switch from rpc/encoded to wrapped document/literal.
If for some reason that is not an option, then you need to tell Axis to use
xsd types rather than soapenc types. You can do that in your WSDD by adding
this parameter:
<parameter name="dotNetSoapEncFix" value="true"/>
Anne
On 1/6/06, Claudio Miranda <cl...@claudius.com.br> wrote:
>
>
> Forgot to write how the operations are invoked:
>
> Another thing, on the implementation side, the object DominioDTO is
> received as parameter, some properties are set (eg. dominioDTO.setName("kakak")),
> and returned back. Does this has something to do with ParameterMode ?
>
> ##### this DOESN'T works
> Call call = CallUtil.createStandardCall(QNAME_SERVICE_NAME,
> QNAME_PORT_NAME, usuario, sei, senha);
> org.apache.axis.client.Call axisCall = (
> org.apache.axis.client.Call)call;
> axisCall.registerTypeMapping(DominioDTO.class, QNAME_DominioDTO,
> BeanSerializerFactory.class, BeanDeserializerFactory.class);
> call.addParameter("DominioDTO_1", QNAME_DominioDTO,
> DominioDTO.class, ParameterMode.IN);
> call.setReturnType(QNAME_DominioDTO, DominioDTO.class);
> call.setOperationName(new
> QName(DOMINIO_CON_NAMESPACE_VALUE,"getDadosDominio"));
> DominioDTO[] params = new DominioDTO[]{ dominioDTO};
> return (DominioDTO) callGetDadosDominio.invoke(params);
>
>
> ##### this WORKS
> Call call = CallUtil.createStandardCall(QNAME_SERVICE_NAME,
> QNAME_PORT_NAME, usuario, sei, senha);
> call.setReturnType(XMLType.SOAP_ARRAY, String[].class);
> call.setOperationName(new
> QName(DOMINIO_CON_NAMESPACE_VALUE,"getListaDominio"));
> // registrar mapeamento das classes complexas
> org.apache.axis.client.Call axisCall = (
> org.apache.axis.client.Call)call;
> axisCall.registerTypeMapping(String[].class,new QName(
> NamespaceConstants.NSURI_SOAP_ENCODING,""), ArraySerializerFactory.class,
> ArrayDeserializerFactory.class);
> return (String[]) callGetListaDominio.invoke(null);
>
>
>
>
> On Fri, 6 Jan 2006 22:44:22 -0200, "Claudio Miranda" <
> claudio@claudius.com.br> escreveu:
>
> > De: "Claudio Miranda" <cl...@claudius.com.br>
> > Data: Fri, 6 Jan 2006 22:44:22 -0200
> > Para: axis-user@ws.apache.org
> > Assunto: [axis] unexpected element type
> >
> >
> > Hi all, I am making some progress with Axis.
> > Some operations works others fails.
> >
> > The error is:
> >
> > unexpected element type: expected={
> http://www.w3.org/2001/XMLSchema}string, actual={
> http://schemas.xmlsoap.org/soap/encoding/}string
> > at com.sun.xml.rpc.encoding.SerializerBase.verifyType(
> SerializerBase.java:128)
> > at com.sun.xml.rpc.encoding.SimpleTypeSerializer.deserialize(
> SimpleTypeSerializer.java:114)
> > at com.sun.xml.rpc.encoding.AttachmentSerializer.deserialize(
> AttachmentSerializer.java:219)
> > at
> com.sun.xml.rpc.encoding.ReferenceableSerializerImpl.deserialize(
> ReferenceableSerializerImpl.java:185)
> > at
> com.sun.service.email.access.dto.dominio.DominioDTO_4_SOAPSerializer.doDeserialize
> (DominioDTO_4_SOAPSerializer.java:79)
> > at com.sun.xml.rpc.encoding.ObjectSerializerBase.deserialize(
> ObjectSerializerBase.java:192)
> > at
> com.sun.xml.rpc.encoding.ReferenceableSerializerImpl.deserialize(
> ReferenceableSerializerImpl.java:155)
> > at
> com.sun.service.email.access.ws.dominio.consulta.DominioConsulta_getDadosDominio_RequestStruct_4_SOAPSerializer.doDeserialize
> (DominioConsulta_getDadosDominio_RequestStruct_4_SOAPSerializer.java:43)
> > at com.sun.xml.rpc.encoding.ObjectSerializerBase.deserialize(
> ObjectSerializerBase.java:192)
> >
> > I took a look at this message of axis-users, but was not clearly
> answered, the errors looks the same I am reporting.
> >
> > http://www.nabble.com/URI-for-"basic"-java-types-t108371.html#a298857
> >
> > As you will see below, some operation works, others no. With the
> tests I made, every operation who uses a complex object as parameter doesn't
> works, but every other operation who uses String, Short, even returning
> complex objects works.
> >
> > Take a look:
> >
> > private static final String DOMINIO_CON_NAMESPACE_VALUE =
> "urn:DominioConsultaWS";
> > private static final QName QNAME_DominioDTO = new
> QName(DOMINIO_CON_NAMESPACE_VALUE, "DominioDTO");
> >
> > DominioDTO is a file (source and class) generated by wscompile
> >
> > ##### this DOESN'T works
> > Call call = CallUtil.createStandardCall(QNAME_SERVICE_NAME,
> QNAME_PORT_NAME, usuario, sei, senha);
> > org.apache.axis.client.Call axisCall = (
> org.apache.axis.client.Call)call;
> > axisCall.registerTypeMapping(DominioDTO.class, QNAME_DominioDTO,
> BeanSerializerFactory.class, BeanDeserializerFactory.class);
> > call.addParameter("DominioDTO_1", QNAME_DominioDTO,
> DominioDTO.class, ParameterMode.INOUT);
> > call.setReturnType(QNAME_DominioDTO, DominioDTO.class);
> > call.setOperationName(new
> QName(DOMINIO_CON_NAMESPACE_VALUE,"getDadosDominio"));
> >
> > ##### this WORKS
> > Call call = CallUtil.createStandardCall(QNAME_SERVICE_NAME,
> QNAME_PORT_NAME, usuario, sei, senha);
> > call.setReturnType(XMLType.SOAP_ARRAY, String[].class);
> > call.setOperationName(new
> QName(DOMINIO_CON_NAMESPACE_VALUE,"getListaDominio"));
> > // registrar mapeamento das classes complexas
> > org.apache.axis.client.Call axisCall = (
> org.apache.axis.client.Call)call;
> > axisCall.registerTypeMapping(String[].class,new QName(
> NamespaceConstants.NSURI_SOAP_ENCODING,""), ArraySerializerFactory.class,
> ArrayDeserializerFactory.class);
> >
> > ##### CallUtil.createStandardCall method
> > ServiceFactory factory = ServiceFactory.newInstance();
> > Service service = factory.createService(serviceName);
> > Call call = service.createCall(portName);
> > org.apache.axis.client.Call axisCall = (
> org.apache.axis.client.Call) call;
> > call.setTargetEndpointAddress(sei);
> > call.setProperty(org.apache.axis.AxisEngine.PROP_DOMULTIREFS,
> Boolean.FALSE);
> > call.setProperty(
> org.apache.axis.client.Call.CONNECTION_TIMEOUT_PROPERTY, TIMEOUT);
> > call.setProperty(Call.OPERATION_STYLE_PROPERTY, "rpc");
> > call.setProperty(Call.USERNAME_PROPERTY, user);
> > call.setProperty(Call.PASSWORD_PROPERTY, password);
> > call.setProperty(Call.SOAPACTION_URI_PROPERTY, "");
> > call.setProperty(Call.SOAPACTION_USE_PROPERTY, Boolean.TRUE);
> > call.setProperty(Call.ENCODINGSTYLE_URI_PROPERTY,
> NamespaceConstants.NSURI_SOAP_ENCODING);
> >
> > Any information will help.
> >
> > thanks for your time and patience.
> --
> Claudio Miranda
> _______________________________________________________________
> http://www.claudius.com.br/blog http://www.summa-tech.com
> http://www.soujava.org.br
>
>
Re: [axis] unexpected element type
Posted by Claudio Miranda <cl...@claudius.com.br>.
Forgot to write how the operations are invoked:
Another thing, on the implementation side, the object DominioDTO is received as parameter, some properties are set (eg. dominioDTO.setName("kakak")), and returned back. Does this has something to do with ParameterMode ?
##### this DOESN'T works
Call call = CallUtil.createStandardCall(QNAME_SERVICE_NAME, QNAME_PORT_NAME, usuario, sei, senha);
org.apache.axis.client.Call axisCall = (org.apache.axis.client.Call)call;
axisCall.registerTypeMapping(DominioDTO.class, QNAME_DominioDTO, BeanSerializerFactory.class, BeanDeserializerFactory.class);
call.addParameter("DominioDTO_1", QNAME_DominioDTO, DominioDTO.class, ParameterMode.IN);
call.setReturnType(QNAME_DominioDTO, DominioDTO.class);
call.setOperationName(new QName(DOMINIO_CON_NAMESPACE_VALUE,"getDadosDominio"));
DominioDTO[] params = new DominioDTO[]{ dominioDTO};
return (DominioDTO) callGetDadosDominio.invoke(params);
##### this WORKS
Call call = CallUtil.createStandardCall(QNAME_SERVICE_NAME, QNAME_PORT_NAME, usuario, sei, senha);
call.setReturnType(XMLType.SOAP_ARRAY, String[].class);
call.setOperationName(new QName(DOMINIO_CON_NAMESPACE_VALUE,"getListaDominio"));
// registrar mapeamento das classes complexas
org.apache.axis.client.Call axisCall = (org.apache.axis.client.Call)call;
axisCall.registerTypeMapping(String[].class,new QName(NamespaceConstants.NSURI_SOAP_ENCODING,""), ArraySerializerFactory.class, ArrayDeserializerFactory.class);
return (String[]) callGetListaDominio.invoke(null);
On Fri, 6 Jan 2006 22:44:22 -0200, "Claudio Miranda" <cl...@claudius.com.br> escreveu:
> De: "Claudio Miranda" <cl...@claudius.com.br>
> Data: Fri, 6 Jan 2006 22:44:22 -0200
> Para: axis-user@ws.apache.org
> Assunto: [axis] unexpected element type
>
>
> Hi all, I am making some progress with Axis.
> Some operations works others fails.
>
> The error is:
>
> unexpected element type: expected={http://www.w3.org/2001/XMLSchema}string, actual={http://schemas.xmlsoap.org/soap/encoding/}string
> at com.sun.xml.rpc.encoding.SerializerBase.verifyType(SerializerBase.java:128)
> at com.sun.xml.rpc.encoding.SimpleTypeSerializer.deserialize(SimpleTypeSerializer.java:114)
> at com.sun.xml.rpc.encoding.AttachmentSerializer.deserialize(AttachmentSerializer.java:219)
> at com.sun.xml.rpc.encoding.ReferenceableSerializerImpl.deserialize(ReferenceableSerializerImpl.java:185)
> at com.sun.service.email.access.dto.dominio.DominioDTO_4_SOAPSerializer.doDeserialize(DominioDTO_4_SOAPSerializer.java:79)
> at com.sun.xml.rpc.encoding.ObjectSerializerBase.deserialize(ObjectSerializerBase.java:192)
> at com.sun.xml.rpc.encoding.ReferenceableSerializerImpl.deserialize(ReferenceableSerializerImpl.java:155)
> at com.sun.service.email.access.ws.dominio.consulta.DominioConsulta_getDadosDominio_RequestStruct_4_SOAPSerializer.doDeserialize(DominioConsulta_getDadosDominio_RequestStruct_4_SOAPSerializer.java:43)
> at com.sun.xml.rpc.encoding.ObjectSerializerBase.deserialize(ObjectSerializerBase.java:192)
>
> I took a look at this message of axis-users, but was not clearly answered, the errors looks the same I am reporting.
>
> http://www.nabble.com/URI-for-"basic"-java-types-t108371.html#a298857
>
> As you will see below, some operation works, others no. With the tests I made, every operation who uses a complex object as parameter doesn't works, but every other operation who uses String, Short, even returning complex objects works.
>
> Take a look:
>
> private static final String DOMINIO_CON_NAMESPACE_VALUE = "urn:DominioConsultaWS";
> private static final QName QNAME_DominioDTO = new QName(DOMINIO_CON_NAMESPACE_VALUE, "DominioDTO");
>
> DominioDTO is a file (source and class) generated by wscompile
>
> ##### this DOESN'T works
> Call call = CallUtil.createStandardCall(QNAME_SERVICE_NAME, QNAME_PORT_NAME, usuario, sei, senha);
> org.apache.axis.client.Call axisCall = (org.apache.axis.client.Call)call;
> axisCall.registerTypeMapping(DominioDTO.class, QNAME_DominioDTO, BeanSerializerFactory.class, BeanDeserializerFactory.class);
> call.addParameter("DominioDTO_1", QNAME_DominioDTO, DominioDTO.class, ParameterMode.INOUT);
> call.setReturnType(QNAME_DominioDTO, DominioDTO.class);
> call.setOperationName(new QName(DOMINIO_CON_NAMESPACE_VALUE,"getDadosDominio"));
>
> ##### this WORKS
> Call call = CallUtil.createStandardCall(QNAME_SERVICE_NAME, QNAME_PORT_NAME, usuario, sei, senha);
> call.setReturnType(XMLType.SOAP_ARRAY, String[].class);
> call.setOperationName(new QName(DOMINIO_CON_NAMESPACE_VALUE,"getListaDominio"));
> // registrar mapeamento das classes complexas
> org.apache.axis.client.Call axisCall = (org.apache.axis.client.Call)call;
> axisCall.registerTypeMapping(String[].class,new QName(NamespaceConstants.NSURI_SOAP_ENCODING,""), ArraySerializerFactory.class, ArrayDeserializerFactory.class);
>
> ##### CallUtil.createStandardCall method
> ServiceFactory factory = ServiceFactory.newInstance();
> Service service = factory.createService(serviceName);
> Call call = service.createCall(portName);
> org.apache.axis.client.Call axisCall = (org.apache.axis.client.Call) call;
> call.setTargetEndpointAddress(sei);
> call.setProperty(org.apache.axis.AxisEngine.PROP_DOMULTIREFS, Boolean.FALSE);
> call.setProperty(org.apache.axis.client.Call.CONNECTION_TIMEOUT_PROPERTY, TIMEOUT);
> call.setProperty(Call.OPERATION_STYLE_PROPERTY, "rpc");
> call.setProperty(Call.USERNAME_PROPERTY, user);
> call.setProperty(Call.PASSWORD_PROPERTY, password);
> call.setProperty(Call.SOAPACTION_URI_PROPERTY, "");
> call.setProperty(Call.SOAPACTION_USE_PROPERTY, Boolean.TRUE);
> call.setProperty(Call.ENCODINGSTYLE_URI_PROPERTY, NamespaceConstants.NSURI_SOAP_ENCODING);
>
> Any information will help.
>
> thanks for your time and patience.
--
Claudio Miranda
_______________________________________________________________
http://www.claudius.com.br/blog http://www.summa-tech.com
http://www.soujava.org.br