服務(wù)的配置文件
<deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<service name="MyService" provider="java:RPC">
<parameter name="className" value="com.jpc.allianzgi.newFun.LoginAction"/>
<parameter name="allowedMethods" value="*"/>
<beanMapping qname="myNS:Cookie" xmlns:myNS="http://http.servlet.javax" languageSpecificType="java:javax.servlet.http.Cookie"/>
</service>
</deployment>
<beanMapping/> 需要說明的是:
1 如果服務(wù)中不需要傳遞對象,是不需要<beanMapping/>對的.而且這里面的對象必須要是符合javaBean模式的對象,最起碼要符合get/set方法對.例子中傳的cookie是無法實(shí)現(xiàn)的.
2 qname xmlns:xx languageSpecificType分別用於指定參數(shù)對象的名稱空間.用於在客戶端調(diào)用.個(gè)人覺得qname languageSpecificType是重複的.
客戶端調(diào)用:
public void testWsdd() {//不傳遞參數(shù)調(diào)用情況:
try {
Service service = new Service();
Call call = (Call) service.createCall();
call.setTargetEndpointAddress(new java.net.URL(
"http://localhost:8080/allianz/services/MyService"));
call.setOperationName(new QName("http://newFun.allianzgi.jpc.com",
"display"));
call.invoke(new Object[] {"chian_xxp"});
}
catch (Exception e) {
System.err.println(e.toString());
}
}
public void testWsddWithObject() throws ServiceException {//有參數(shù)的情況
String result = "";
Cookie cookie = new Cookie("name","chian_xxp");
Hashtable ht = new Hashtable();
ht.put("name",cookie);
Service service = new Service();
Call call = (Call) service.createCall();
//此處與數(shù)的調(diào)用方法是不相同的.
QName qn = new QName("Http://http.servlet.javax", "Cookie");//指定所傳參數(shù)的類包名
call.registerTypeMapping(Cookie.class, qn,
new org.apache.axis.encoding.ser.
BeanSerializerFactory(Cookie.class, qn),
new org.apache.axis.encoding.ser.
BeanDeserializerFactory(Cookie.class, qn));//用於註冊一個(gè)類.
try {
call.setTargetEndpointAddress(new java.net.URL("http://localhost:8080/allianz/services/MyService"));
call.setOperationName(new QName("MyService", "display"));//QName()指定了服務(wù)類的類包名(也是QName的作用.)
call.addParameter("arg1", qn, ParameterMode.IN);
call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);
result = (String)call.invoke( new Object[] { ht } );
}
catch (AxisFault fault) {
System.out.println(fault.toString());
}
catch (RemoteException ex) {
}
catch (MalformedURLException ex) {
}
System.out.println(result);
}
在傳遞cookie對象時(shí),會(huì)出現(xiàn)如下錯(cuò)誤org.xml.sax.SAXException: No deserializer for {Http://http.servlet.javax}Cookie,因?yàn)镃ookie不符合javabean 規(guī)範(fàn)
服務(wù)端的功能類
public class LoginAction
{
public String display(Hashtable ht){
java.util.Enumeration enu = ht.keys();
while(enu.hasMoreElements()){
Cookie cookie = (Cookie)ht.get(enu.nextElement());
System.out.println(cookie.getName()+"="+cookie.getValue());
}
return "chian_xxp";
}
public void display(String in){
System.out.println("this is = "+in);
}
}