我必须调用一个 Web 服务,其中 Web 服务由 kSoap2 方法调用,现在在这个节点中是一个数组,所以我如何传递它。
POST /opera/OperaWS.asmx HTTP/1.1
Host: 182.71.19.26
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://tempuri.org/SendGroupMessageNotification"
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<SendGroupMessageNotification xmlns="http://tempuri.org/">
<reciverMemberId>
<Group>
<groupid>string</groupid>
<groupMembers>
<Id>string</Id>
<Id>string</Id>
</groupMembers>
</Group>
<Group>
<groupid>string</groupid>
<groupMembers>
<Id>string</Id>
<Id>string</Id>
</groupMembers>
</Group>
</reciverMemberId>
<MemberId>int</MemberId>
<MESSAGE>string</MESSAGE>
<CREATEDDATE>string</CREATEDDATE>
<isUrgent>boolean</isUrgent>
<Predifnemessage>string</Predifnemessage>
</SendGroupMessageNotification>
</soap:Body>
</soap:Envelope>
所以在上面的网络服务中,我如何设置reciverMemberId的值
其余参数可以使用 propertyInfo 轻松设置。
为此我做了一些代码如下
static class Group implements KvmSerializable
{
String groupid;
Vector groupMembers;
public Group(String groupId,Vector groupmembers)
{
this.groupid=groupId;
this.groupMembers=groupmembers;
}
public Object getProperty(int i)
{
switch(i)
{
case 0:
return groupid;
case 1:
return groupMembers;
}
return null;
}
public int getPropertyCount()
{
return 2;
}
public void setProperty(int i, Object o)
{
switch(i)
{
case 0:
groupid=o.toString(); break;
case 1:
groupMembers=(Vector) o;
break;
}
}
public void getPropertyInfo(int i, Hashtable hshtbl, PropertyInfo pi)
{
switch(i)
{
case 0:
pi.type=PropertyInfo.STRING_CLASS;
pi.name="groupid";
break;
case 1:
pi.type=PropertyInfo.VECTOR_CLASS;
pi.name="groupMembers";
break;
}
}
}
static class RereciverMemberId implements KvmSerializable
{
Group grp;
public RereciverMemberId()
{
Vector grpMembers=new Vector();
grpMembers.add("29");
grpMembers.add("36");
grp=new Group("1", grpMembers);
}
public Object getProperty(int i)
{
return grp;
}
public int getPropertyCount()
{
return 0;
}
public void setProperty(int i, Object o)
{
this.grp=(Group) o;
}
public void getPropertyInfo(int i, Hashtable hshtbl, PropertyInfo pi)
{
pi.type=grp.getClass();
pi.name="Group";
}
}
public static void sendGroupMessageNotification()
{
SOAP_ACTION="http://tempuri.org/SendGroupMessageNotification";
METHOD_NAME="SendGroupMessageNotification";
SoapObject myObject = new SoapObject(NAMESPACE,METHOD_NAME);
//String str="<Group><groupid>1</groupid><groupMembers><Id>29</Id><Id>36</Id></groupMembers></Group>";
RereciverMemberId rec=new RereciverMemberId();
PropertyInfo pi = new PropertyInfo();
pi.setName("reciverMemberId");
pi.setValue(rec);
pi.setType(rec.getClass());
myObject.addProperty(pi);
PropertyInfo p = new PropertyInfo();
p.setName("MemberId");
p.setValue(1);
p.setType(PropertyInfo.INTEGER_CLASS);
myObject.addProperty(p);
p = new PropertyInfo();
p.setName("MESSAGE");
p.setValue("Test Message From JAVA");
p.setType(PropertyInfo.STRING_CLASS);
myObject.addProperty(p);
p = new PropertyInfo();
p.setName("CREATEDDATE");
p.setValue("15 Dec 2011");
p.setType(PropertyInfo.STRING_CLASS);
myObject.addProperty(p);
p = new PropertyInfo();
p.setName("isUrent");
p.setValue(false);
p.setType(PropertyInfo.BOOLEAN_CLASS);
myObject.addProperty(p);
p = new PropertyInfo();
p.setName("Predifnemessage");
p.setValue("Hello");
p.setType(PropertyInfo.STRING_CLASS);
myObject.addProperty(p);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.setOutputSoapObject(myObject);
HttpTransportSE transport = new HttpTransportSE(URL);
try
{
transport.call(SOAP_ACTION, envelope);
}
catch (IOException ex)
{
Logger.getLogger(SoapWebServices.class.getName()).log(Level.SEVERE, null, ex);
}
catch (XmlPullParserException ex)
{
Logger.getLogger(SoapWebServices.class.getName()).log(Level.SEVERE, null, ex);
}
try
{
SoapPrimitive result = (SoapPrimitive) envelope.getResponse();
System.out.println(result.toString());
}
catch (SoapFault ex)
{
Logger.getLogger(SoapWebServices.class.getName()).log(Level.SEVERE, null, ex);
}
}