将 class 作为 Java 中的参数传递给 SOAP Web 服务
Passing a class to the SOAP web service as parameter in Java
您好,我想将 class 作为参数传递给 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;
}
这是我的学生class:
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.
//...
}
在我 运行 之后,我得到这个错误:
'Cannot serialize: Student@4329d250'。请帮忙。
提前致谢
所以我想出了如何去做:
首先,使 class 可序列化
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 - 注册失败等
您好,我想将 class 作为参数传递给 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;
}
这是我的学生class:
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.
//...
}
在我 运行 之后,我得到这个错误: 'Cannot serialize: Student@4329d250'。请帮忙。
提前致谢
所以我想出了如何去做: 首先,使 class 可序列化
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 - 注册失败等