webservice的用法
http://www.cnblogs.com/vus520/archive/2011/11/07/2561948.html 看到有很多朋友对WebService还不是很了解,在此就详细的讲讲WebService,争取说得明白吧。此文章采用的项目是我毕业设计的webservice部分。 public class SysUser implements Serializable { private Long id; private String userPwd; private String userPhone; public SysUser() { } public SysUser(Long id,String userPwd,String userPhone) { super(); this.id = id; this.userPwd = userPwd; this.userPhone = userPhone; } //get和set } Hibernate: <hibernate-mapping> <class name="com.silent.cn.model.SysUser" table="SYS_USER"> <id name="id" type="java.lang.Long"> <column name="ID" precision="22" scale="0" /> <generator class="native" /> </id> <property name="userPwd" type="java.lang.String"> <column name="USER_PWD" length="20" /> </property> <property name="userPhone" type="java.lang.String"> <column name="USER_PHONE" length="11" /> </property> </class> </hibernate-mapping> 2、PoJo包 /** * 登陆状态 */ class DataOperateResult { private String status; public String getStatus() { return status; } void setStatus(String status) { this.status = status; } } 3、WebService接口 手机客户端服务类(专门负责与手机客户端进行交互) @WebService interface MobileClientService { * 登陆 * @param opPhone * loginPwd */ public String userLogin(@WebParam(name = "opPhone") String opPhone,@WebParam(name = "loginPwd") String loginPwd); } 要注意的是方法里的参数前一定要加上@WebParam(name = "***(随便取的名字)"),这是因为这个opPhone参数通过webservice发布出去之后是以opPhone这个名称存在的,在手机端那边的方法直接获取opPhone就可以了。 @WebService(endpointInterface = "com.silent.cn.ws.MobileClientService") class MobileClientServiceImpl implements MobileClientService { public String userLogin(String opPhone,String loginPwd) { SysUser sysUser = userLoginDao.userLogin(opPhone,loginPwd); DataOperateResult dataOperateResult = new DataOperateResult(); if (sysUser != null) { 封装登录验证结果 dataOperateResult.setStatus(SUCC); System.out.println("登陆成功!"); return JSONObject.fromObject(dataOperateResult).toString(); } else { System.out.println("不存在或手机号码和密码不正确!"); dataOperateResult.setStatus(FAIL); return JSONObject.fromObject(dataOperateResult).toString(); } } } 5、Dao和Dao实现类Java代码 * 用户登录DAO interface UserLoginDao { * 根据用户名和用户密码登陆 * userPhone 用户手机号码 * passWord 用户密码 * <a href='"http://www.eoeandroid.com/home.php?mod=space&uid=7300"' target='"_blank"'>@return</a> public SysUser userLogin(String userPhone,String passWord); } ? * 用户登录DAO实现类 class UserLoginDaoImpl extends BaseDao implements UserLoginDao { this.getHibernateTemplate().find(sql,new Object[] { userPhone,passWord }); if (list.size() == 0) { return null; } return list.get(0); } } 6、Spring配置 <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/phonesell" /> <property name="username" value="root" /> <property name="password" value="root" /> </bean> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="dataSource"> <ref bean="dataSource" /> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> <prop key="hibernate.show_sql">true</prop> </props> </property> <!-- 实体类资源映射 --> <property name="mappingDirectoryLocations"> <list> <value>classpath:/com/silent/cn/model/</value> </list> </property> </bean> <!-- 配置事务管理器 --> <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory"> <ref bean="sessionFactory" /> </property> </bean> <!-- 配置事务传播特性 --> <tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="save*" propagation="REQUIRED" /> <tx:method name="delete*" propagation="REQUIRED" /> <tx:method name="update*" propagation="REQUIRED" /> <tx:method name="do*" propagation="REQUIRED" /> <tx:method name="*" read-only="false" /> </tx:attributes> </tx:advice> <!-- 哪些类的哪些方法参与事务 --> <aop:config> <aop:pointcut id="allManagerMethod" expression="execution(* com.silent.cn.dao.impl.*.*(..))" /> <aop:advisor pointcut-ref="allManagerMethod" advice-ref="txAdvice" /> </aop:config> <!-- dao模板(所有dao都将使用此模板) --> <bean id="daoTemplate" abstract="true"> <property name="sessionFactory" ref="sessionFactory"></property> </bean> <bean id="jdbcTemplate" abstract="true"> <property name="dataSource" ref="dataSource"></property> </bean> <!--WebService配置--> <import resource="applicationContext-webservice.xml" /> <import resource="applicationContext-dao.xml" /> </beans> 7、WebService接口配置 <!-- 配置WebService接口 http:localhost:8080/PhoneSell/ws/clientService?wsdl --> <jaxws:endpointid="clientServiceEndpoint"address="/clientService" implementorClass="com.silent.cn.ws.MobileClientService"> <jaxws:implementor> <bean id="clientService" class="com.silent.cn.ws.impl.MobileClientServiceImpl"> <property name="userLoginDao" ref="userLoginDao" /> </bean> </jaxws:implementor> </jaxws:endpoint> 8、配置web.xml <servlet> <servlet-name>CXFServlet</servlet-name> <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>CXFServlet</servlet-name> <url-pattern>/ws/*</url-pattern> </servlet-mapping> 9、WebService接口测试 Client端 1、 WebService接口地址 static String NAME_SPACE_SALE = "http://ws.cn.silent.com/"; 网址(如果是模拟器额话,需要把IP地址<192.168.1.***:8080>换成10.0.2.2:8080) static String NAME_SPACE = "http://10.0.2.2:8080/PhoneSell/"; 连接地址(WebService的方法地址) static String END_POINT_SALE = NAME_SPACE + "ws/clientService"; 2、 static SoapObject common(String methodName,HashMap<String,Object> map,String nameSpace,String endPoint) { String soapAction = nameSpace + methodName; 指定WebService的命名空间和调用的方法名 SoapObject rpc = new SoapObject(nameSpace,methodName); 设置需调用WebService接口需要传入的参数 if (null != map && map.size() > 0) { Object[] key = map.keySet().toArray(); for (int i = 0; i < key.length; i++) { rpc.addProperty(key<i>.toString(),map.get(key<i>)); } } 生成调用WebService方法的SOAP请求信息,并指定SOAP的版本 SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); envelope.bodyOut = rpc; 设置是否调用的是dotNet开发的WebService envelope.dotNet = false; 设置连接超时时间为20秒 HttpTransportSE transport = new HttpTransportSE(endPoint,timeout); try { 调用WebService transport.call(soapAction,envelope); } catch (IOException e) { e.printStackTrace(); } catch (XmlPullParserException e) { e.printStackTrace(); } 获取返回的数据 SoapObject soapObject = (SoapObject) envelope.bodyIn; return soapObject; } } 3、 static String verifyUser(Context context,String userPhone,String userPwd) { 设置调用接口需要传递的参数名称、值 HashMap<String,Object> paramMap = new HashMap<String,Object>(); paramMap.put("opPhone",userPhone); paramMap.put("loginPwd",userPwd); 调用接口 SoapObject soapObject = common("userLogin",paramMap,NAME_SPACE_SALE,END_POINT_SALE); return soapObject.getProperty(0).toString(); } catch (Exception e) { null; } } 注:hashmap里的key就是web端webservice接口里的@WebParam(name = "opPhone"),此字符串一定要匹配。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |