您好我想将一个类作为参数传递给Web服务。 这是我的网络服务代码:
<xs:complexType name="RegisterStudent">
<xs:sequence>
<xs:element name="student" type="tns:student" minOccurs="0"/>
<xs:element name="user" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
这是我的召唤功能:
public static String registerStudentClass(String user) {
soapAction="http://auth.ws.df.com/RegisterStudent";
methodName="RegisterStudent";
String resTxt = null;
Student student= new Student();
student.setAge(22);
student.setName("Jerry");
SoapObject request = new SoapObject(NAMESPACE, methodName);
request.addProperty("student", student);//Student class added here
request.addProperty("user", user);//User name, passed as string
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
SoapEnvelope.VER11);
envelope.setOutputSoapObject(request);
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
System.out.println("androidHttpTransport envelope");
try{
androidHttpTransport.call(soapAction, envelope);
SoapPrimitive response = (SoapPrimitive) envelope.getResponse();
resTxt = response.toString();
}catch(Exception e){
e.printStackTrace();
resTxt = "Error occured\n"+e;
}
return resTxt;
}
这是我的学生班:
Public Class Student implements Serializable{
private int age;
private String name;
public Student(){}
public Student(int age, String name){
this.age = age;
this.name = name;
}
//setter and getter methods come here.
//...
}
运行之后,我收到此错误: &#39;无法序列化:学生@ 4329d250&#39;。请帮助。
提前致谢
答案 0 :(得分:0)
所以我想出了如何做到这一点: 首先,使类可序列化
Public Class Student implements KvmSerializable{
private int age;
private String name;
public Student(){}
public Student(int age, String name){
this.age = age;
this.name = name;
}
//setter and getter methods come here.
//...
public Object getProperty(int arg0) {
switch(arg0){
case 0:
return getAge();
case 1:
return getName();
}
return null;
}
public int getPropertyCount() {
return 2;
}
public void setProperty(int index, Object value) {
switch(index){
case 0 :
age = value.toString();
break;
case 1 :
name = value.toString();
break;
default:
break;
}
}
}
WebService方法如下所示:
public static String registerStudentClass(Student stud) {
soapAction="http://auth.ws.df.com/RegisterStudent";
methodName="RegisterStudent";
String resTxt = null;
//new change
PropertyInfo pi = new PropertyInfo();
pi.setName("stud");
pi.setValue(stud);
pi.setType(stud.getClass());
SoapObject request = new SoapObject(NAMESPACE, methodName);
request.addProperty(pi);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
SoapEnvelope.VER11);
envelope.setOutputSoapObject(request);//new change
envelope.addMapping(NAMESPACE, "Student", new Student().getClass());
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
System.out.println("androidHttpTransport envelope");
try{
androidHttpTransport.call(soapAction, envelope);
SoapPrimitive response = (SoapPrimitive) envelope.getResponse();
resTxt = response.toString();
}catch(Exception e){
e.printStackTrace();
resTxt = "Error occured\n"+e;
}
return resTxt;
}
我假设答案是一个文本,例如1 - 成功注册 2 - 注册失败等