WebService及其应用.ppt
WebService及其应用,2,目标,了解WebService的基本概念撑握使用XFire开发WebService的基本步骤撑握XFire对象绑定撑握XFire与Spring的集成,3,WebService是一种可供跨平台调用的服务组件。WebService是完全基于XML、XMLSchema等独立于平台、独立于软件供应商的标准。WebService可用于创建可互操作的,分布式的应用程序平台。WebService主要由三个方面组成:服务程序,服务的描述文件,以及服务的注册登记。,WebService概述,4,WebService概述,soap,5,XFire是下一代Java的soap框架,支持面向服务(SOA)的应用开发。使用XFire开发WebService的基本步骤:建立Web工程,添加Xfire的库文件在web.xml中添加xfire的前端控制器XFireServlet建立业务类及业务类接口在services.xml文件中配置WebService启动Web服务器使用XFire客户端类库调用WebService,使用XFire开发WebService,6,XFire开发WebService,示例配置XFire前端控制器,XFireServlet0XFireServlet/services/*,7,XFire开发WebService,示例建立用于查询列车时刻的服务程序及接口,public class TrainServiceImpl implements TrainService public String findTrainTime(String train_no)/.return null;,public interface TrainService/train_no车次public abstract String findTrainTime(String train_no);,8,XFire开发WebService,示例在services.xml中配置WebService,TrainServiceservice.TrainServiceservice.TrainServiceImplwrappedliteralapplication,将services.xml添加到类路径下的/META-INF/xfire目录下,9,启动Web服务器后可通过访问Web应的/services/访问相应的WebService示例列出应用中所有的Web服务,获取WebService,请求:http:/localhost:8090/webprj/services,10,XFire客户端工具提供了多种形式调用WebService在拥有服务接口的情况下可通过建立XFireProxyFactory调用在未知服务接口的情况下可通过Client或通过WSDL文档生成接口的方式调用MyEclipse等工具提供了直接通过WSDL文档生成WebService服务端口的向导。,客户端调用WebService,11,根据已知服务接口及参数类型调用,客户端调用WebService,String serviceURL=http:/localhost:8090/sprja/services/UserService;Service serviceModel=new ObjectServiceFactory().create(srv.UserService.class,null,http:/srv/HelloService,null);XFireProxyFactory serviceFactory=new XFireProxyFactory();UserService service=(UserService)serviceFactory.create(serviceModel,serviceURL);User user=service.getUser(tony);System.out.println(user.getName();,12,xfire提供了XFireSpringServlet用于从Spring中导出Bean为WebService,示例web.xml配置,Spring整合WebService,xfire提供了两种方式可将Spring中注册的Bean导出为WebService使用可将单个Bean导出为WebServices利用JSR181注解导出WebServices,xfireServletorg.codehaus.xfire.spring.XFireSpringServletxfireServlet/service/*,13,示例配置将单个Bean导出为WebService,Spring整合WebService,14,通过JSR181的注解导出WebService的基本步聚在Spring中注册在Bean或Bean的Web服务接口中使用JSR181的注解,标识WebService的特征在Spring中注册Bean,Spring整合WebService,15,注册Jsr181HandlerMapping,Spring整合WebService,16,使用JSR181注解标识服务接口,类以及在Spring中注册,Spring整合WebService,WebService(targetNamespace=http:/)public interface OrderService public abstract String addOrder(Order order);,WebService(serviceName=OrderService,endpointInterface=srv.OrderService)public class OrderServiceImpl implements OrderService public String addOrder(Order order).,17,在已知服务接口的情况下,Xfire提供XFireClientFactoryBean用于在Spring中产生单个WebService的代理对象,Spring整合WebService客户端,http:/localhost:8090/xfireweb/service/OrderService2?wsdl,18,WebService通过Internet被调用,安全显得非常重要。WebService的安全验证主要有两种方式:基于HTTP的验证方式WebService客户端通过Http的方式请求服务,服务器端可通过配置Http安全域或Filter的方式验证请求基于SOAP的验证方式WebService在将验证信息基于SOAP消息中,服务器端通过xfire的Handler获得验证信息,并验证,WebService验证,19,基于SOAP的验证示例:客户端在发送请求消息时,输出消息通过ClientAuthHandler通道,通道在输出消息的头信息中添加用户验证信息服务器端在接收WebService请求时,输入消息通过AuthHandler通道,通道通过输入消息的头信息获得用户的验证信息,并执行验证,验证失败时抛出异常。,WebService验证,20,ClientAuthHandler,WebService验证,public class ClientAuthHandler extends AbstractHandler public void invoke(MessageContext ctx)throws Exception/为SOAP Header构造验证信息org.jdom.Element el=new Element(header);/设置头信息ctx.getOutMessage().setHeader(el);Element auth=new Element(auth);Element username=new Element(username);username.addContent(jerry);Element pwd=new Element(password);pwd.addContent(123);auth.addContent(username);auth.addContent(pwd);el.addContent(auth);,21,AuthHandler,WebService验证,public class AuthHandler extends AbstractHandler public void invoke(MessageContext ctx)throws Exception/如果没有头信息直接返回 Element header=ctx.getInMessage().getHeader();if(header=null)throw new XFireFault(请求中必需包含验证信息!,XFireFault.SENDER);/获得验证节点Element auth=header.getChild(auth);if(auth=null)throw new XFireFault(请求中必需包含验证信息!,XFireFault.SENDER);/获得帐号String username=auth.getChildText(username);String pwd=auth.getChildText(password);/检查身份if(!jerry.equals(username),22,目标,WebService的概念使用XFire开发WebServiceSpring与Xfire的整合WebService的安全,