2015-05-04 65 views
1

嗨,我想将一个类作为参数传递给Web服务。 这是我的web服务代码:作为Java中的参数传递一个类到SOAP 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. 
    //... 
} 

后,我跑这,我得到这个错误: '无法序列化:[email protected]'Please help。

在此先感谢

+0

'Student'是否标有'Serializable'? – kolossus

+0

是的,请参阅编辑后 – calev

回答

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 - 注册失败等