最近的一個項目又要用到webservice(axis),上次為了趕時間完成任務,簡單的找了些例子然后就這樣用了,還好項目里本來就有對象和xml之間轉換的接口,所以要傳的對象一律轉換成xml,然后傳字符串。
嘗試了N久才搞定了傳輸屬性不是基本數據類型的問題。簡單帖個代碼:
1.server-config.wsdd
<service name="sendUser" provider="java:RPC">
<!-- 發布特定的方法,多個方法用逗號隔開 -->
<parameter name="allowedMethods" value="getUserByUserId"/>
<parameter name="className" value="cn.gov.zjport.suzhou.webservice.GetUser4WebServiceImpl"/>
<beanMapping languageSpecificType="java:cn.gov.zjport.suzhou.domain.CustomUser" qname="ns:CustomUser" xmlns:ns="urn:GetUser4WebService"/>
<beanMapping languageSpecificType="java:cn.gov.zjport.suzhou.domain.CustomRole" qname="ns:CustomRole" xmlns:ns="urn:GetUser4WebService"/>
<beanMapping languageSpecificType="java:cn.gov.zjport.suzhou.domain.CustomUserRole" qname="ns:CustomUserRole" xmlns:ns="urn:GetUser4WebService"/>
</service>
2.客戶端測試代碼
QName qn = new QName("urn:GetUser4WebService","CustomUser");
QName qn1 = new QName("urn:GetUser4WebService","CustomRole");
QName qn2 = new QName("urn:GetUser4WebService","CustomUserRole");
call.setTargetEndpointAddress(new URL("http://localhost:8080/suzhouPlatform/webServices/sendUser") );
call.setOperationName(new QName("http://localhost:8080/suzhouPlatform/webServices/sendUser","getUserByUserId"));
call.registerTypeMapping(CustomUser.class, qn,new BeanSerializerFactory(CustomUser.class, qn),new BeanDeserializerFactory(CustomUser.class, qn));
call.registerTypeMapping(CustomRole.class, qn1,new BeanSerializerFactory(CustomRole.class, qn1),new BeanDeserializerFactory(CustomRole.class, qn1));
call.registerTypeMapping(CustomUserRole.class, qn2,new BeanSerializerFactory(CustomUserRole.class, qn2),new BeanDeserializerFactory(CustomUserRole.class, qn2));

Object result = call.invoke(new String[]{"admin"});
大概代碼就這樣了^_^