gpt4 book ai didi

java - (JAVA) SOAP WebService 错误对象引用未设置到对象的实例

转载 作者:行者123 更新时间:2023-12-01 12:27:05 27 4
gpt4 key购买 nike

我正在尝试从 Android 应用程序设置与 SOAP WebService 的连接,但每次我的结果中都会出现写入错误:未将对象引用设置为对象 java 的实例似乎是来自服务器的错误 --> SOAP Webservice call from Java gives "Object reference not set to an instance of an object"

但是当我通过网络浏览器使用 POST 请求尝试它时,它工作正常:)

此服务http://ws.cdyne.com/ip2geo/ip2geo.asmx?op=ResolveIP

private static String NAMESPACE = "http://ws.cdyne.com/";
private static String URL = "http://ws.cdyne.com/ip2geo/ip2geo.asmx";
private static String SOAP_ACTION = "http://ws.cdyne.com/";

public static String invokeHelloWorldWS(String name, String webMethName) {
String resTxt = null;

SoapObject request = new SoapObject(NAMESPACE, webMethName);
PropertyInfo sayHelloPI = new PropertyInfo();
// Set name
sayHelloPI.setName("ipAddress");
// Set Value
sayHelloPI.setValue("88.212.35.129");
// Set dataType
sayHelloPI.setType(String.class);
// Add the property to request object
request.addProperty(sayHelloPI);
// Create envelope
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = true;
// Set output SOAP object
envelope.setOutputSoapObject(request);
// Create HTTP call object
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
androidHttpTransport.debug = true;
try{
// Invoke web service
androidHttpTransport.call(SOAP_ACTION+webMethName, envelope); //webMethName = "ResolveIP"
// Get the response
Log.d("a", androidHttpTransport.responseDump);
//SoapPrimitive response = (SoapPrimitive) envelope.getResponse();
// Assign it to resTxt variable static variable
//resTxt = response.toString();
}catch(Exception e){
//Print error
e.printStackTrace();
}
}

我在谷歌上花了很多时间,但我无法找到正确的答案为什么会发生这种情况

//编辑最后我得到了正确的...不知道为什么但是当我像这样发送第二个参数时(我重用旧属性):

sayHelloPI.setName("licenseKey");
sayHelloPI.setValue("some_key");
sayHelloPI.setType(String.class);
request.addProperty(sayHelloPI);

它不起作用。但是当我创建新的 Property 对象时它会起作用:

PropertyInfo sayHelloPI1 = new PropertyInfo();
sayHelloPI1.setName("licenseKey");
sayHelloPI1.setValue("ds");
sayHelloPI1.setType(String.class);
request.addProperty(sayHelloPI1);

也许下次会对某人有所帮助

最佳答案

这是我自己使用过的一些代码 - 希望它会对您有所帮助:

        // Initialize soap request + add parameters
SoapObject request = new SoapObject(getString(R.string.Namespace),
getString(R.string.Method_Name_GetStudentsByTeam));
Log.d("GetStudentsByTeamTask", "SOAP request");

// Use this to add parameters
request.addProperty("teamId", params[0]);
Log.d("GetStudentsByTeamTask", "id: " + params[0]);

// Declare the version of the SOAP request
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
SoapEnvelope.VER11);
Log.d("GetStudentsByTeamTask",
"Declared the version of the SOAP request");

envelope.setOutputSoapObject(request);
envelope.dotNet = true;
Log.d("GetStudentsByTeamTask", "Setting som variables");
try {
HttpTransportSE androidHttpTransport = new HttpTransportSE(
getString(R.string.URL));
Log.d("GetStudentsByTeamTask", "Instance the HttpTransportSE");

// this is the actual part that will call the webservice
androidHttpTransport.call(
getString(R.string.Soap_Action_GetStudentsByTeam),
envelope);
Log.d("GetStudentsByTeamTask", "Called the Webservice");

// Get the SoapResult from the envelope body.
SoapObject result = (SoapObject) envelope.getResponse();
Log.d("GetStudentsByTeamTask", "Got the Soapresult");

if (result != null) {
// Do something with result
// success = true;
Log.d("GetStudentsByTeamTask", "set sucess boolean to true");

for (int i = 0; i < result.getPropertyCount(); i++) {

PropertyInfo pi = new PropertyInfo();
result.getPropertyInfo(i, pi);
Log.d("GetStudentsByTeamTask",
pi.name + " : " + result.getProperty(i));

SoapObject obj = (SoapObject) result.getProperty(i);

Student student = new Student();

student.address = obj.getProperty("Address").toString();

student.city = obj.getProperty("City").toString();
student.created = DateTime.parse(obj.getProperty(
"Created").toString());
student.dateOfBirth = DateTime.parse(obj.getProperty(
"DateOfBirth").toString());
student.email = obj.getProperty("Email").toString();
student.firstname = obj.getProperty("FirstName")
.toString();
student.id = Integer.parseInt(obj.getProperty("ID")
.toString());
student.imageId = Integer.parseInt(obj.getProperty(
"ImageID").toString());
// SoapObject lastNameObject = (SoapObject) obj
// .getProperty("LastName");
//
student.lastName = obj.getProperty("LastName")
.toString();

student.phone = obj.getProperty("Mobile").toString();

student.zipcode = obj.getProperty("PostalCode")
.toString();
student.schoolId = Integer.parseInt(obj
.getPropertyAsString("SchoolId"));
student.teamId = Integer.parseInt(obj
.getPropertyAsString("TeamId"));
student.testStarted = Integer.parseInt(obj
.getPropertyAsString("TestsStarted"));
student.timeStamp = DateTime.parse(obj
.getPropertyAsString("TimeStamp"));
student.image = getImage(Integer.parseInt(obj
.getProperty("ImageID").toString()));

if (student.image == null)
student.image = BitmapFactory
.decodeResource(getResources(),
R.drawable.default_usericon);

MyApp.getController().addStudent(student);
}

} else {
// If fails
// success = false;
Log.d("GetStudentsByTeamTask", "set login boolean to false");
}
} catch (Exception e) {
Log.d("GetStudentsByTeamTask", "FAILED! " + e.getMessage());
e.printStackTrace();
}

关于java - (JAVA) SOAP WebService 错误对象引用未设置到对象的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26245935/

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