• 1. WebService及其应用
  • 2. 2目标了解WebService的基本概念 撑握使用XFire开发WebService的基本步骤 撑握XFire对象绑定 撑握XFire与Spring的集成
  • 3. 3WebService是一种可供跨平台调用的服务组件。 WebService是完全基于XML 、XMLSchema等独立于平台、独立于软件供应商的标准。 WebService可用于创建可互操作的,分布式的应用程序平台。 WebService主要由三个方面组成:服务程序,服务的描述文件,以及服务的注册登记。WebService概述
  • 4. 4WebService概述Service ProviderService RequestorService RegistryFind(UDDI)Bind(WSDL)Publish(UDDI)soap
  • 5. 5XFire是下一代Java的soap框架,支持面向服务(SOA)的应用开发。 使用XFire开发WebService的基本步骤: 建立Web工程,添加Xfire的库文件 在web.xml中添加xfire的前端控制器XFireServlet 建立业务类及业务类接口 在services.xml文件中配置WebService 启动Web服务器 使用XFire客户端类库调用WebService使用XFire开发WebService
  • 6. 6XFire开发WebService示例配置XFire前端控制器 XFireServlet org.codehaus.xfire.transport.http.XFireConfigurableServlet 0 XFireServlet /services/*
  • 7. 7XFire开发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. 8XFire开发WebService示例在services.xml中配置WebService TrainService service.TrainService service.TrainServiceImpl literal application 将services.xml添加到类路径下的/META-INF/xfire目录下
  • 9. 9启动Web服务器后可通过访问Web应的/services/访问相应的WebService 示例列出应用中所有的Web服务获取WebService请求:http://localhost:8090/webprj/services
  • 10. 10XFire客户端工具提供了多种形式调用WebService 在拥有服务接口的情况下可通过建立XFireProxyFactory调用 在未知服务接口的情况下可通过Client或通过WSDL文档生成接口的方式调用MyEclipse等工具提供了直接通过WSDL文档生成WebService服务端口的向导。客户端调用WebService
  • 11. 11根据已知服务接口及参数类型调用客户端调用WebServiceString 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. 12xfire提供了XFireSpringServlet用于从Spring中导出Bean为WebService,示例web.xml配置Spring整合WebServicexfire提供了两种方式可将Spring中注册的Bean导出为WebService 使用org.codehaus.xfire.spring.remoting.XFireExporter可将单个Bean导出为WebServices 利用JSR181注解导出WebServices xfireServlet org.codehaus.xfire.spring.XFireSpringServlet xfireServlet /service/*
  • 13. 13示例配置将单个Bean导出为WebServiceSpring整合WebService
  • 14. 14通过JSR181的注解导出WebService的基本步聚 在Spring中注册org.codehaus.xfire.spring.remoting.Jsr181HandlerMapping 在Bean或Bean的Web服务接口中使用JSR181的注解,标识WebService的特征 在Spring中注册BeanSpring整合WebService
  • 15. 15注册Jsr181HandlerMapping Spring整合WebService
  • 16. 16使用JSR181注解标识服务接口,类以及在Spring中注册 Spring整合WebService@WebService(targetNamespace="http://www.jerry.com") 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. 17在已知服务接口的情况下,Xfire提供XFireClientFactoryBean用于在Spring中产生单个WebService的代理对象Spring整合WebService客户端 http://localhost:8090/xfireweb/service/OrderService2?wsdl
  • 18. 18WebService通过Internet被调用,安全显得非常重要。 WebService的安全验证主要有两种方式: 基于HTTP的验证方式 WebService客户端通过Http的方式请求服务,服务器端可通过配置Http安全域或Filter的方式验证请求 基于SOAP的验证方式 WebService在将验证信息基于SOAP消息中,服务器端通过xfire的Handler获得验证信息,并验证 WebService验证
  • 19. 19基于SOAP的验证示例: 客户端在发送请求消息时,输出消息通过ClientAuthHandler通道,通道在输出消息的头信息中添加用户验证信息 服务器端在接收WebService请求时,输入消息通过AuthHandler通道,通道通过输入消息的头信息获得用户的验证信息,并执行验证,验证失败时抛出异常。WebService验证
  • 20. 20ClientAuthHandlerWebService验证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. 21AuthHandlerWebService验证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) && "123".equals(pwd)){ throw new XFireFault("非法的帐号或密码!", XFireFault.SENDER); } } }
  • 22. 22目标WebService的概念 使用XFire开发WebService Spring与Xfire的整合 WebService的安全