PDA

View Full Version : اتصال به وب سرويسي كه هدر هم دارد



reza_web
دوشنبه 03 خرداد 1395, 10:02 صبح
سلام
من براي اتصال به وب سرويس مشكلي ندارم ولي يه وب سرويسي دارم(يعني روي وب است) كه حاوي HEADER هم هست كه در آن يوزر و پسورد ارسال مي شود از اين كد هم كمك گرفتم:
http://stackoverflow.com/questions/5613675/how-to-set-soap-header-using-ksoap2-android

ولي متاسفانه خطاي
Caused by: java.lang.NullPointerException: Attempt to write to field 'org.kxml2.kdom.Element[] org.ksoap2.SoapEnvelope.headerOut' on a null object reference

مي دهد
چكار كنم؟
خيلي فوري است و خيلي هم جستجو كردم ولي چيزي پيدا نكردم
(اگر لازم است آدرس ان وب سرويس را هم بدهم)
اگر هزينه اي هم دارد ايرادي ندارد

reza_web
دوشنبه 03 خرداد 1395, 13:18 عصر
در اخرين تلاشها به اين خطا رسيدم!!!

كسي ميدونه چكار بايد بكنم؟
(درضمن وب سرويس از سرور دات نت است)
Server was unable to process request. ---> Object reference not set to an instance of an object.

reza_web
سه شنبه 04 خرداد 1395, 09:55 صبح
يعني هيچ كس با وب سرويس كار نكرده؟!!

tux-world
سه شنبه 04 خرداد 1395, 12:03 عصر
ksoap گیر زیاد داره با جواب نمیشه مشکل رو حل داد باید خود آدم تو پروژه باشه

Nevercom
سه شنبه 04 خرداد 1395, 14:40 عصر
کدی که استفاده می کنید رو بزارید تا شاید با یررسی کد بشه مشکل رو پیدا کرد.

reza_web
چهارشنبه 05 خرداد 1395, 08:56 صبح
public static double invokeRatingWS(Integer questionID,Integer Rate, String webMethName) {
double RateStatus = 0.0;


SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
SoapEnvelope.VER11);
envelope.implicitTypes = true;
envelope.dotNet = true;
SoapObject request = new SoapObject(NAMESPACE, webMethName);


envelope.headerOut = new Element[1];
envelope.headerOut[0] = buildAuthHeader();


PropertyInfo packageNamePI = new PropertyInfo();
packageNamePI.setName("packageName");
packageNamePI.setValue("MyValue");
packageNamePI.setType(String.class);
request.addProperty(packageNamePI);


PropertyInfo paramTypePI = new PropertyInfo();
paramTypePI.setName("paramType");
paramTypePI.setValue("Json");
paramTypePI.setType(String.class);
request.addProperty(paramTypePI);


envelope.setOutputSoapObject(request);
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
androidHttpTransport.debug = true;
try {
androidHttpTransport.call(SOAP_ACTION+webMethName, envelope);
try{
SoapObject response = null;
if (envelope.bodyIn instanceof SoapObject) { // SoapObject = SUCCESS
response = (SoapObject) envelope.bodyIn;
Log.d("rrrrr",response.toString());
} else if (envelope.bodyIn instanceof SoapFault) { // SoapFault = FAILURE
SoapFault soapFault = (SoapFault) envelope.bodyIn;
throw new Exception(soapFault.getMessage());
}
}catch (Exception e) {
e.printStackTrace();
Log.e("MYAPP", "exception", e);
}
} catch (Exception e) {
//Assign Error Status true in static variable 'errored'
LoginUser.errored = true;
e.printStackTrace();
Log.e("MYAPP", "exception", e);
}
return RateStatus;
}


private static Element buildAuthHeader() {
Element h = new Element().createElement(NAMESPACE, "MobileHeader");
Element SYSusername = new Element().createElement(NAMESPACE, "SysUsername");
SYSusername.addChild(Node.TEXT, "email@gmail.com");
h.addChild(Node.ELEMENT, SYSusername);
Element SYSpass = new Element().createElement(NAMESPACE, "SysPassword");
SYSpass.addChild(Node.TEXT, "passs");
h.addChild(Node.ELEMENT, SYSpass);
Element DeviceNum = new Element().createElement(NAMESPACE, "DeviceNum");
DeviceNum.addChild(Node.TEXT, "1235412");
h.addChild(Node.ELEMENT, DeviceNum);
Element UserName = new Element().createElement(NAMESPACE, "UserName");
UserName.addChild(Node.TEXT, "rrrreeee");
h.addChild(Node.ELEMENT, UserName);


return h;
}


اين هم كدي كه نوشته ام
البته يه وب سرويس ديگري بود كه هدر نداشت و توانستم باهاش كار كنم ولي اينكه هدر داره خطا ميده

reza_web
شنبه 08 خرداد 1395, 09:06 صبح
كسي نيست جواب يده؟
خروجي وب سرويس Json است احتمالا مشكل از دريافت خروجي وب سرويس است كه من بلد نيستم
خواهشا كمك كنيد