簡體   English   中英

網絡服務Ksoap2復雜對象

[英]web-service Ksoap2 Complex objects

我無法解決此問題,然后繼續...我的應用程序中有一個大問題。 任何幫助將不勝感激,我將嘗試放置所有代碼。

非常感謝你!

主要錯誤是此錯誤:

[ERROR] Exception occurred while trying to invoke service method almacenaCoordenadas
org.apache.axis2.AxisFault: Unknow type {http://www.w3.org/2001/XMLSchema}Coordenada

我要發送的復雜對象是:

import java.util.Hashtable;

import org.ksoap2.serialization.KvmSerializable;
import org.ksoap2.serialization.PropertyInfo;



public class Coordenada implements KvmSerializable {


private long longitud;
private long latitud;

public Coordenada(long lat, long lon) {

    longitud = lon;
    latitud = lat;

}

public void setLongitud(long lon) {
    longitud = lon;
}

public void setLatitud(long lat) {
    latitud = lat;
}

public long getLongitud() {
    return longitud;
}

public long getLatitud() {
    return latitud;
}

@Override
public Object getProperty(int arg0) {

    switch (arg0) {
    case 0:
        return latitud;
    case 1:
        return longitud;

    }

    return null;
}

@Override
public int getPropertyCount() {

    return 2;
}



@Override
public void setProperty(int ind, Object val) {

    switch(ind){
    case 0:
        latitud = Long.parseLong(val.toString());
        break;
    case 1:
        longitud = Long.parseLong(val.toString());
        break;

    default:
        break;
    }

}

@Override
public void getPropertyInfo(int arg0, Hashtable arg1, PropertyInfo arg2) {

    switch(arg0){
    case 0:
        arg2.type = PropertyInfo.LONG_CLASS;
        arg2.name = "latitud";
        break;
    case 1:
        arg2.type = PropertyInfo.LONG_CLASS;
        arg2.name = "longitud";
        break;

    default:break;
}

}

}

我通過調用此方法發送它:

private String almacenaCoordenadas() {

        accionSoap = "http://ws.webapp.org/almacenaCoordenadas";
        metodo = "almacenaCoordenadas";
        String retorno="";

        try {

            // Modelo el request
            SoapObject request = new SoapObject(namespace, metodo);

            PropertyInfo primerParametro = new PropertyInfo();
            PropertyInfo segundoParametro = new PropertyInfo();
            //PropertyInfo tercerParametro = new PropertyInfo();
            primerParametro.setName("id");
            primerParametro.setValue(user);
            segundoParametro.setName("coord");
            segundoParametro.setValue(coordenada);
            request.addProperty(primerParametro);
            request.addProperty(segundoParametro);

            /*
            segundoParametro.setName("lo");
            segundoParametro.setValue(longitud);
            tercerParametro.setName("lat");
            tercerParametro.setValue(latitud);
            request.addProperty(primerParametro);
            request.addProperty(segundoParametro);
            request.addProperty(tercerParametro);*/


            // Modelo el Sobre
            SoapSerializationEnvelope sobre = new SoapSerializationEnvelope(SoapEnvelope.VER11);
            // si esta hecho o no en puntoNet
            sobre.dotNet = false;
            sobre.setOutputSoapObject(request);

                    sobre.AddMapping(namespace, "Coordenada", new Coordenada().getClass();

            // Modelo el transporte
            HttpTransportSE transporte = new HttpTransportSE(url);

            // Llamada
            System.out.println(sobre);
            transporte.call(accionSoap, sobre);

            // Resultado
            SoapPrimitive resultado = (SoapPrimitive) sobre.getResponse();

            retorno = resultado.toString();

            if (retorno!=null)
                Log.i("Resultado", "Envio correcto de coordenada");

        } catch (Exception e) {
            String s="";
            s+="ERROR - Envio de coordenada\n";
            s+=e.toString();
            Log.e("MainActivity",s);

        }

        return retorno;
    }

從這個:(是一個AsyncTask)

@Override
    protected String doInBackground(String... params) {

        almacenaCoordenadas();
        return null;
    }

Web服務中的方法是這樣的:

public String almacenaCoordenadas(String id, Coordenada coord){
        String resultado="Coordenadas recibidas correctamente";

        System.out.println(id+" esta en las coordenadas:");
        if(coord!=null){
            System.out.println("Llega coordenada");
        }

        return resultado;
    }

錯誤是這個:

[ERROR] Exception occurred while trying to invoke service method almacenaCoordenadas
org.apache.axis2.AxisFault: Unknow type {http://www.w3.org/2001/XMLSchema}Coordenada
    at org.apache.axis2.databinding.utils.BeanUtil.deserialize(BeanUtil.java:340)
    at org.apache.axis2.databinding.utils.BeanUtil.processObject(BeanUtil.java:818)
    at org.apache.axis2.databinding.utils.BeanUtil.ProcessElement(BeanUtil.java:737)
    at org.apache.axis2.databinding.utils.BeanUtil.deserialize(BeanUtil.java:646)
    at org.apache.axis2.rpc.receivers.RPCUtil.processRequest(RPCUtil.java:153)
    at org.apache.axis2.rpc.receivers.RPCUtil.invokeServiceClass(RPCUtil.java:206)
    at org.apache.axis2.rpc.receivers.RPCMessageReceiver.invokeBusinessLogic(RPCMessageReceiver.java:117)
    at org.apache.axis2.receivers.AbstractInOutMessageReceiver.invokeBusinessLogic(AbstractInOutMessageReceiver.java:40)
    at org.apache.axis2.receivers.AbstractMessageReceiver.receive(AbstractMessageReceiver.java:114)
    at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:181)
    at org.apache.axis2.transport.http.HTTPTransportUtils.processHTTPPostRequest(HTTPTransportUtils.java:172)
    at org.apache.axis2.transport.http.AxisServlet.doPost(AxisServlet.java:146)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)

看來網絡服務無法處理對象Coordenada。

任何幫助,將不勝感激。 非常感謝你!!

Unknow type {http://www.w3.org/2001/XMLSchema}Coordenada

這部分似乎是問題的原因。 您需要將name值更改為服務器等待的name (這不是我們從錯誤中看到的Coordenada)。

sobre.AddMapping(namespace, "Coordenada", new Coordenada().getClass();

addMapping(java.lang.String命名空間,java.lang.String名稱,java.lang.Class clazz)
定義從名稱空間和名稱到Java類的直接映射(反之亦然)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM