你发布出来的webserverices可以用任何语言实现,也可以用任何语言实现客户端,即去调用WS。webservices解析传递的对象是一些已经些好了得API来完成的,一般的我们的客户端的服务器断只有我们些的一些对象类和处理类(当然如果你想自己实现那也可以,但是需要说明的是已经有很多API了,例如:axis,你根本不要费这个刭儿)。客户端发起的时候你使用的api会将其转换成合适的soap保发送到WS服务端,服务端接收到后仍然有API负责将这些soap中的对象转换成java类对象,以便操作。服务端返回的时候正好和这个相反的。
实际上SOAP就是一段xml片断,你当然可以解析其中的任何信息。
实际上SOAP就是一段xml片断,你当然可以解析其中的任何信息。
可我还不明白的是:
比如我传回的是一个ResponseObject,里面有一个getResult()的方法,我用客户端语言该怎样读取result的数据呢。。可否随便用一种语言示例一下。。
soap中的结果数据是<resultCode>0</resultCode><resultDescription>OK</resultDescription>话,那么你的xxxResponse对象的实例就含有这两个值了。xxxResponse.getResultCode()就是0,xxxResponse.getResultDescription()就是字符串"OK".
// 下面是我们以前做的一个项目中的一个结果对象是wsdl2java生成的,根本不用手工去动。
// Source File Name: GeneralResult.javapackage com.boss.crcinterfaces;import java.io.Serializable;
import javax.xml.namespace.QName;
import org.apache.axis.description.ElementDesc;
import org.apache.axis.description.TypeDesc;
import org.apache.axis.encoding.Deserializer;
import org.apache.axis.encoding.Serializer;
import org.apache.axis.encoding.ser.BeanDeserializer;
import org.apache.axis.encoding.ser.BeanSerializer;public class GeneralResult
implements Serializable
{ private Integer result;
private String errorDetail;
private Object __equalsCalc;
private boolean __hashCodeCalc;
private static TypeDesc typeDesc;
static Class class$com$boss$crcinterfaces$GeneralResult; /* synthetic field */ public GeneralResult(Integer result, String msg)
{
__equalsCalc = null;
__hashCodeCalc = false;
this.result = result;
errorDetail = msg;
} public GeneralResult()
{
__equalsCalc = null;
__hashCodeCalc = false;
} public Integer getResult()
{
return result;
} public void setResult(Integer result)
{
this.result = result;
} public String getErrorDetail()
{
return errorDetail;
} public void setErrorDetail(String errorDetail)
{
this.errorDetail = errorDetail;
} public synchronized boolean equals(Object obj)
{
if(!(obj instanceof GeneralResult))
return false;
GeneralResult other = (GeneralResult)obj;
if(obj == null)
return false;
if(this == obj)
return true;
if(__equalsCalc != null)
{
return __equalsCalc == obj;
} else
{
__equalsCalc = obj;
boolean _equals = (result == null && other.getResult() == null || result != null && result.equals(other.getResult())) && (errorDetail == null && other.getErrorDetail() == null || errorDetail != null && errorDetail.equals(other.getErrorDetail()));
__equalsCalc = null;
return _equals;
}
} public synchronized int hashCode()
{
if(__hashCodeCalc)
return 0;
__hashCodeCalc = true;
int _hashCode = 1;
if(getResult() != null)
_hashCode += getResult().hashCode();
if(getErrorDetail() != null)
_hashCode += getErrorDetail().hashCode();
__hashCodeCalc = false;
return _hashCode;
} public static TypeDesc getTypeDesc()
{
return typeDesc;
} public static Serializer getSerializer(String mechType, Class _javaType, QName _xmlType)
{
return new BeanSerializer(_javaType, _xmlType, typeDesc);
} public static Deserializer getDeserializer(String mechType, Class _javaType, QName _xmlType)
{
return new BeanDeserializer(_javaType, _xmlType, typeDesc);
} static Class class$(String x0)
{
return Class.forName(x0);
ClassNotFoundException x1;
x1;
throw new NoClassDefFoundError(x1.getMessage());
} static
{
typeDesc = new TypeDesc(class$com$boss$crcinterfaces$GeneralResult != null ? class$com$boss$crcinterfaces$GeneralResult : (class$com$boss$crcinterfaces$GeneralResult = class$("com.boss.crcinterfaces.GeneralResult")));
typeDesc.setXmlType(new QName("http://crcinterfaces.ort.com", "GeneralResult"));
ElementDesc elemField = new ElementDesc();
elemField.setFieldName("result");
elemField.setXmlName(new QName("", "Result"));
elemField.setXmlType(new QName("http://schemas.xmlsoap.org/soap/encoding/", "int"));
elemField.setMinOccurs(0);
typeDesc.addFieldDesc(elemField);
elemField = new ElementDesc();
elemField.setFieldName("errorDetail");
elemField.setXmlName(new QName("", "ErrorDetail"));
elemField.setXmlType(new QName("http://www.w3.org/2001/XMLSchema", "string"));
elemField.setMinOccurs(0);
typeDesc.addFieldDesc(elemField);
}
}
// 这个市客户端调用,实际是就是返回上面的结果对象。你根据这个对象调用其里边的方法就得到你要的信息了。当人这个结果对象还可以更复杂的。比如说包含一个列表等。
// Source File Name: InterfaceCenter.javapackage com.boss.crcinterfaces.business;import com.boss.crcinterfaces.*;
import com.ipbs.util.PropertyManager;
import java.net.URL;public class InterfaceCenter
{ public InterfaceCenter()
{
} public Object doService(Object requestDataBean)
{
Object result = null;
CRCBillInterfaceBindStub binding = getBinding();
if(binding == null)
return new GeneralResult(new Integer(-1), "无法连接到接口服务!");
binding.setTimeout(0x493e0);
if(requestDataBean instanceof OpenAccountRequest)
try
{
result = binding.openAccount((OpenAccountRequest)requestDataBean);
}
catch(Exception e)
{
result = new GeneralResult(new Integer(-1), "调用开户接口时产生异常!");
}
else
if(requestDataBean instanceof ManageServiceRequest)
try
{
result = binding.manageService((ManageServiceRequest)requestDataBean);
}
catch(Exception e)
{
result = new GeneralResult(new Integer(-1), "调用管理用户服务接口时产生异常!");
}
else
if(requestDataBean instanceof ChangeServiceRequest)
try
{
result = binding.changeService((ChangeServiceRequest)requestDataBean);
}
catch(Exception e)
{
result = new GeneralResult(new Integer(-1), "调用更换用户服务接口时产生异常!");
}
else
if(requestDataBean instanceof ChangeStatusRequest)
try
{
result = binding.changeStatus((ChangeStatusRequest)requestDataBean);
}
catch(Exception e)
{
result = new GeneralResult(new Integer(-1), "调用修改用户状态接口时产生异常!");
}
else
if(requestDataBean instanceof DestroyAccountRequest)
try
{
result = binding.destroyAccount((DestroyAccountRequest)requestDataBean);
}
catch(Exception e)
{
result = new GeneralResult(new Integer(-1), "调用销户接口时产生异常!");
}
else
if(requestDataBean instanceof ChangePasswordRequest)
try
{
result = binding.changePassword((ChangePasswordRequest)requestDataBean);
}
catch(Exception e)
{
result = new GeneralResult(new Integer(-1), "调用密码重置接口时产生异常!");
}
else
if(requestDataBean instanceof ChangeUsernameRequest)
try
{
result = binding.changeUsername((ChangeUsernameRequest)requestDataBean);
}
catch(Exception e)
{
result = new GeneralResult(new Integer(-1), "调用修改登录名接口时产生异常!");
}
else
if(requestDataBean instanceof QueryAccountInfoRequest)
try
{
result = binding.queryAccountInfo((QueryAccountInfoRequest)requestDataBean);
}
catch(Exception e)
{
result = new QueryAccountInfoResponse(new Integer(-1), "调用查询用户信息接口时产生异常!", null);
}
else
if(requestDataBean instanceof DepositRequest)
try
{
result = binding.deposit((DepositRequest)requestDataBean);
}
catch(Exception e)
{
result = new GeneralResult(new Integer(-1), "调用用户续费接口时产生异常!");
}
else
if(requestDataBean instanceof DiscountRequest)
try
{
result = binding.discount((DiscountRequest)requestDataBean);
}
catch(Exception e)
{
result = new GeneralResult(new Integer(-1), "调用用户折扣更新接口时产生异常!");
}
else
if(requestDataBean instanceof UpdateServiceRequest)
result = new GeneralResult(new Integer(-1), "此服务未实现!");
else
if(requestDataBean instanceof DelAssistServiceRequest)
try
{
result = binding.delAssistService((DelAssistServiceRequest)requestDataBean);
}
catch(Exception e)
{
result = new GeneralResult(new Integer(-1), "调用服务变更历史删除接口时产生异常!");
}
else
if(requestDataBean instanceof ChangeAccountInfoRequest)
try
{
result = binding.changeAccountInfo((ChangeAccountInfoRequest)requestDataBean);
}
catch(Exception e)
{
result = new GeneralResult(new Integer(-1), "调用用户信息变更接口时产生异常!");
}
else
result = new GeneralResult(new Integer(-1), "请求值对象非法!");
return result;
} private CRCBillInterfaceBindStub getBinding()
{
CRCBillInterfaceBindStub binding = null;
String urlProperty = PropertyManager.getProperty("webserviceurl");
try
{
URL url = new URL(urlProperty);
binding = (CRCBillInterfaceBindStub)(new CRCBInterfaceLocator()).getBillInterfaceServices(url);
}
catch(Exception jre)
{
return null;
}
return binding;
}
//测试用
public static void main(String args[])
{
InterfaceCenter interfaceCenter1 = new InterfaceCenter();
}
}