![](/img/trans.png)
[英]Object reference not set to an instance of an object for SOAP WebService in Java
[英](JAVA) SOAP WebService error object reference not set to an instance of an object
我試圖從Android應用程序建立到SOAP Web服務的連接,但是每次我的結果出錯時:對象引用未設置為對象java的實例。這似乎是服務器的錯誤-> Java的SOAP Web服務調用給出“對象引用未設置為對象的實例”
但是當我通過帶有POST請求的Web瀏覽器嘗試它時,它工作正常:)
此服務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();
}
}
我在Google上花費了很多時間,但我找不到正確的答案,為什么會這樣
//編輯最后我正確了... idk為什么但是當我發送第二個這樣的參數時(我重用了舊屬性):
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();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.