gpt4 book ai didi

java - 使用 ksoap2 : parameters are all null 从 Android 调用 java webservice

转载 作者:行者123 更新时间:2023-11-30 02:05:37 25 4
gpt4 key购买 nike

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

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

这是我的代码:

jax-ws 网络服务:

@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!
}
}

安卓代码:

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 网络服务,它工作正常,所以问题一定出在 ksoap2 库或我的 Android 代码中。

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

最佳答案

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

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

以下是使其正常工作的正确 Web 服务代码:

@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!
}
}

关于java - 使用 ksoap2 : parameters are all null 从 Android 调用 java webservice,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30706073/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com