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