首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用ksoap2从Android调用java webservice :参数均为空

使用ksoap2从Android调用java webservice :参数均为空
EN

Stack Overflow用户
提问于 2015-06-08 17:54:23
回答 1查看 966关注 0票数 1

我正在使用ksoap2-android库从Android应用程序调用java jax-ws the服务。

问题是,虽然我请求的方法实际上是正确调用的,但它的所有参数(都是简单的字符串)都是null

下面是我的代码:

jax-ws webservice:

代码语言:javascript
复制
@WebService(targetNamespace="webservices.delta.elia.unipd")
public class DeltaUploadService {

    @WebMethod(operationName = "uploadLogData")
    public boolean uploadLogData(String deviceID, String experimentID, String filename, String data){
        System.out.println("Incoming data from device: " + deviceID + ", Experiment ID: " + experimentID);
        //All the parameters here are NULL!
    }
}

Android代码:

代码语言:javascript
复制
public static boolean uploadLog(String deviceID, String experimentID, String filename, String serverUrl, byte[] data){

    String NAMESPACE = "webservices.delta.elia.unipd";
    String SOAP_ACTION = "webservices.delta.elia.unipd/uploadLogData";

    // Create request
    SoapObject request = new SoapObject(NAMESPACE, "uploadLogData");

    //add parameters
    request.addProperty("deviceID", deviceID);
    request.addProperty("experimentID", experimentID);
    request.addProperty("filename", filename);
    request.addProperty("data", Base64.encodeToString(data, Base64.DEFAULT));


    // Create envelope
    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
    // Set output SOAP object
    envelope.setOutputSoapObject(request);
    // Create HTTP call object
    HttpTransportSE androidHttpTransport = new HttpTransportSE(serverUrl);

    try {
        // Invoke web service
        androidHttpTransport.call(SOAP_ACTION, envelope);
        // Get the response
        SoapPrimitive response = (SoapPrimitive) envelope.getResponse();

        return Boolean.parseBoolean(response.toString());

    } catch (Exception e) {
        e.printStackTrace();
        return false;
    }
}

我做错了什么?

PS:我用SoapUI工具测试了Java web service,它工作正常,所以问题一定出在ksoap2库或者我的Android代码中。

注意:我已经阅读了其他答案,如ksoap2 - request parameters is set nullKSoap calling .NET ASMX service passing null arguments,但它们都没有帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-08 18:52:34

经过几个小时的更改名称空间/方法名称/注释等,我通过比较soapUI生成的请求和到达我的服务器的请求发现了问题。

问题出在属性名称上。将它们设置为与jax-ws web服务中的参数名称相同是不起作用的,除非您使用正确的注释指定这些名称(奇怪的是,我在web上的任何示例中都找不到这些名称)。

下面是使其正常工作的正确web服务代码:

代码语言:javascript
复制
@WebService(targetNamespace="webservices.delta.elia.unipd")
public class DeltaUploadService {

    @WebMethod(operationName = "uploadLogData")
    public boolean uploadLogData(@WebParam(name = "deviceID") String deviceID, @WebParam(name = "experimentID") String experimentID,
                             @WebParam(name = "filename") String filename, @WebParam(name = "data") String data){
        System.out.println("Incoming data from device: " + deviceID + ", Experiment ID: " + experimentID);
        //All the parameters now work!
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30706073

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档