WebSerive免费视频教程http://edu.51cto.com/course/course_id-1373.html
http://www.icoolxue.com/album/show/225
WebService文档WSDL结构(发布WebService服务后wsdl文档自动生成)
JDK和CXF的区别:
JDK有些局限,CXF是对JDK原生WebService的包装和扩展
JDK不支持Map数据结构,CXF支持
一、WebService基于JDK(1.6以上)运行的开发
1、WebService-Server端:
1)创建java工程
2)编写接口和实现类的业务代码(接口和接口实现类用JDK的注解@WebService标注,接口方法用@WebMethod)
3)发布WebService-Server:Endpoint(终端,发布WebService)
在main方法中:
String address="http://192.168.10.16:8989/day_ws/hellows";
Endpoint.publish(address,new 实现类)
运行main方法(启动)
2、WebService-Client端(远程调用wsdl文件生成):
1)创建java工程
2)终端进入准备存放代码的目录
3)用JDK包工具wsimport远程调用WebService服务端wsdl文件生成客户端代码
"wsimport -keep http://192.168.10.16:8989/day_ws/hellows?wsdl"
在main方法中:
创建起始类实例(起始类在wsdl文件中“<wsdl:service name="ChinaStockWebService">”),调用对应的方法
3、WebService-Client端(通过本地wsdl文件生成):
1)创建java工程
2)终端进入准备存放代码的目录
3)浏览器中“http://192.168.10.16:8989/day_ws/hellows?wsdl”保存为本地文件
4)用JDK包工具wsimport调用本地保存的wsdl文件生成客户端代码
"wsimport -keep E:\...."
在main方法中:
创建起始类实例(起始类在wsdl文件中“<wsdl:service name="ChinaStockWebService">”),调用对应的方法
二、WebService基于CXF框架开发
1、WebService-CXF-Server端:
1)创建java工程
2)在基于JDK运行的java工程上导入CXF框架(集成了各种架包,Jetty)即导入CXF的架包
3)编写接口和实现类的业务代码(接口和接口实现类用JDK的注解@WebService标注,接口方法用@WebMethod)
4)发布WebService-Server:Endpoint(终端,发布WebService)
在main方法中:
String address="http://192.168.10.16:8989/day_ws/hellows";
Endpoint.publish(address,new 实现类)
运行main方法(启动)
注意:该方法和基于JDK的几乎没什么区别但导入架包后项目运行在了jetty(和tomcat类似是个servlet/jsp容器)中
2、WebService-CXF-Client端
1)将cxf框架bin/wsdl2java.bat工具放入操作系统path路径中
2)创建java工程
3)终端进入准备存放代码的目录
4)执行wsdl2java命令生成代码
“wsdl2java xxx?wsdl”(可以是本地或网络上的wsdl文件)
5)新建main方法类,根据wsdl文档查看WebService的起始类<wsdl:service name="ChinaStockWebService">,在main方法中创建调用服务端的起始类实例
AbstractPhaseInterceptor(自定义拦截器从此继承)
LoggingInInterceptor(系统日志入拦截器类)
LoggingOutInterceptor(系统日志出拦截器类)
三、CXF基于编码形式引入拦截器发布、访问(WebService服务端,WebService客户端)
/* * 自定义拦截器--客户端 */ public class UserDefinedInterceptor extends AbstractPhaseInterceptor<SoapMessage> { private String name; private String password; public UserDefinedInterceptor(String name, String password) { super(Phase.PRE_PROTOCOL);//准备协议化时拦截 this.name = name; this.password = password; } /* * <Envelope> * <head> * <atguigu> * <name>xfzhang</name> * <password>123456</password> * </atguigu> * </head> * <Body> * <sayHello> * <arg0>BOB</arg0> * </sayHello> * </Body> * </Envelope> */ public void handleMessage(SoapMessage msg) throws Fault { List<Header> header msg.getHeaders(); /* * <atguigu> * <name>xfzhang</name> * <password>123456</password> * </atguigu> */ Document document =DOMHelper.createDocument(); Element rootEle=document.createElement("atguigu"); Element nameEle=document.createElement("name"); nameEle.setTextContent(name); rootEle.appendChild(nameEle); Element passwordEle=document.createElement("password"); passwordEle.setTextContent(password); rootEle.appendChild(passwordEle); headers.add(new Header(new QName("atguigu"),rootEle)); System.out.println("client handleMessage()..."); } }
/* * 自定义拦截器--服务器端 */ public class CheckUserDefinedInterceptor extends AbstractPhaseInterceptor<SoapMessage> { public CheckUserDefinedInterceptor() { super(Phase.PRE_PROTOCOL);//准备协议化时拦截 } /* * <Envelope> * <head> * <atguigu> * <name>xfzhang</name> * <password>123456</password> * </atguigu> * </head> * <Body> * <sayHello> * <arg0>BOB</arg0> * </sayHello> * </Body> * </Envelope> */ public void handleMessage(SoapMessage msg) throws Fault { Header header=msg.getHeader(new QName("atguigu")); if(header!=null){ Element atguiguEle=(Element)header.getObject(); String name=atguiguEle.getElementsByTagName("name").item(0).getTextContent(); String password=atguiguEle.getElementsByTagName("password").item(0).getTextContent(); if("xfzhang".equals(name)&&"123456".equals(password)){ System.out.println("server 通过拦截器..."); return ; } } System.out.println("server 没有通过拦截器..."); throw new Fault(new RuntimeException("请求需要一个正确的用户名和密码")); } }
/* * 服务器端 */ public static void main(String[] args) { String address = "http://192.168.10.165:8888/day01_ws_server/datatypews"; Endpoint endpoint = Endpoint.publish(address, new HelloWSImpl()); EndpointImpl endpointImpl = (EndpointImpl) endpoint; //服务器端日志入拦截器 List<Interceptor<? extends Message>> inInterceptors=endpointImpl.getInInterceptors(); inInterceptors.add(new LoggingInInterceptor()); //接收客户端数据(根据数据格式通过拦截器解析数据) inInterceptors.add(new CheckUserDefinedInterceptor()); //服务器端日志出拦截器 List<Interceptor<? extends Message>> outInterceptors=endpointImpl.getOutInterceptors(); outInterceptors.add(new LoggingOutInterceptor()); System.out.println("发布WebService成功"); }
/** * 客户端 */ public static void main(String[] args) { HelloWSImplService factory=new HelloWSImplService(); HelloWS hellWS=factory.getHelloWSImplPort(); //发送请求的客户端对象 Client client ClientProxy.getClient(hellWS); //客户端日志出拦截器 List<Interceptor<? extends Message>> outInterceptors=client.getOutInterceptors(); outInterceptors.add(new LoggingOutInterceptor()); //向服务器端发送数据(根据数据格式通过拦截器封装数据) outInterceptors.add(new UserDefinedInterceptor("xfzhang","123456")); //客户端日志入拦截器 List<Interceptor<? extends Message>> inInterceptors=client.getInInterceptors(); inInterceptors.add(new LoggingInInterceptor()); Strign result=hellWS.sayHello("BOB"); System.out.println("client"+result); }
四、CXF基于Spring配置形式引入拦截器发布、访问(WebService服务端,WebService客户端)
五、CXF基于Spring注解形式引入拦截器发布、访问(WebService服务端,WebService客户端)
六、Ajax、JQuery访问(WebService服务端,浏览器客户端)
1、服务端不变
2、客户端是以浏览器形式访问
1)请求数据以Webservice的wsdl定义的格式组装
2)Ajax、JQuery正常方式访问
注意:JS访问有跨域问题,java编码客户端不存在,所以可以利用这一特性,将“JS访问-->WebService服务”变通为“JS访问-->后端应用(HttpUrlConnection)-->WebService服务”
七、HttpClient访问(WebService服务端,HttpUrlConnection客户端)
public class HttpURLConnectionServlet extends HttpServlet { protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String name = req.getParameter("name"); System.out.println("doPost" + name); String data = "<soap:Envelope xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'><soap:Body><ns2:sayHello xmlns:ns2='http://ws.day01_ws.atguigu.com/'><arg0>'+name+'</arg0></ns2:sayHello></soap:Body></soap:Envelope"; URL url = new URL("http://192.168.10.165:8888/day01_ws/datatypews"); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("POST"); connection.setDoOutput(true); connection.setDoInput(true); connection.setRequestProperty("Content-Type", "text/xml;charset=utf-8"); OutputStream os = connection.getOutputStream(); os.write(data.getBytes("utf-8")); int respCode = connection.getResponseCode(); if (respCode == 200) { InputStream is = connection.getInputStream(); System.out.println("return" + is.available()); resp.setContentType("text/xml;charset=utf-8"); ServletOutputStream outputStream = resp.getOutputStream(); byte[] buffer = new byte[1024]; int len = 0; while ((len = is.read(buffer)) > 0) { outputStream.write(buffer, 0, len); } outputStream.flush(); } } }
CXF WebService 开发文档-目录索引http://www.cnblogs.com/hoojo/archive/2011/03/30/1999587.html
java 实现WebService 以及不同的调用方式http://www.cnblogs.com/siqi/archive/2013/12/15/3475222.html
相关推荐
总结,"webservice--javademo"项目是一个利用JAX-WS技术在MyEclipse环境中创建和测试的Web服务示例。通过学习这个项目,你可以掌握如何在Java环境中构建、部署和测试Web服务,为跨平台的数据交换提供坚实的基础。
总结: Java Axis Web服务示例(`[JAVA]-Axis-Webservice-Demo`)提供了发布和调用Web服务的实际操作步骤。通过学习和实践这个示例,开发者可以更好地掌握使用Axis创建Web服务的技术,理解Web服务的基本原理,以及...
**总结** 通过这个"webservice - Restful的Demo",我们可以学习到RESTful如何使WebService变得更加简单、直观且高效。了解并掌握RESTful设计原则,能帮助我们构建更加优雅、易于维护的API,提升系统的可扩展性和互...
总结,【WebService - AXIS工程】是Java世界中构建和使用Web服务的重要工具,它通过源码生成和服务部署简化了Web服务的开发,同时通过客户端代理类方便了服务的调用。了解并熟练掌握AXIS,对于开发分布式系统和实现...
总结来说,这个压缩包包含了一个完整的Web Service开发示例,使用Java和WSDL,涉及到SQL Server数据库的交互以及可能的短信服务功能。开发者可以从中学习到如何创建、部署和使用Web Service,以及如何处理和存储图像...
在标题“webservice-axis1”中,我们关注的是与Axis1相关的Web服务开发。在描述中提到的"需要的jar包",这是构建和运行基于Axis1的Web服务所必需的库文件。以下是压缩包中包含的三个关键jar文件: 1. **axis.jar**...
以下是对 Axis2 WebService 开发指南的知识点总结: 1. 环境准备: Axis2 的开发需要下载相关的 jar 包和 Eclipse 插件工具,可以从 Apache Axis 官方网站下载。同时,需要安装 Eclipse 插件,以便使用 Axis2 的...
总结,XFire作为一个强大的Web服务框架,为开发者提供了简洁、高效的工具来构建Web服务。通过本次实训,你将掌握如何在Eclipse环境中使用XFire快速开发Web服务,从而开启你在Web服务领域的探索之旅。
### 总结 通过上述内容,我们可以看到在Java SOAP WebService中处理复杂数据类型并不复杂,Apache SOAP框架提供了强大的内置支持。开发者只需要关注业务逻辑的实现,而无需过多关注底层的数据传输细节。此外,...
【CXF WebService 开发指南】 CXF(Commons eXtensible ...总结来说,CXF为开发者提供了全面的Web服务开发工具和框架,支持多种协议和标准,且易于集成和扩展。通过学习和掌握CXF,可以高效地构建健壮的Web服务应用。
总结,使用Java和Apache Axis2开发Web服务涉及准备依赖、构建项目、编写服务实现、配置服务、部署和测试等步骤。这个过程既直观又简单,使得开发者能够快速地构建和发布Web服务。理解并熟练掌握这些步骤对于Java Web...
标题中的"webservice-xfire 开发用的JAR包"指的是用于开发Web服务的Xfire库的JAR文件集合。这些JAR文件包含了Xfire框架的所有必要组件,例如: 1. **xfire-core.jar**:这是Xfire的核心库,包含了处理SOAP消息、...
总结起来,"ASPNET-webservice-and-webapp"项目将涵盖如何使用ASP.NET和C#创建Web服务,如何构建与之交互的Web应用程序,以及涉及到的.NET Framework、Web API、MVC模式、数据交换格式、部署和安全等相关知识点。...
总结,Laravel开发-laravel-webservice项目利用httpful库为Laravel添加了强大的Web服务功能,使得开发者可以更高效地构建和维护API。通过深入学习和实践这个项目,你将能更好地掌握Laravel框架下的Web服务开发,提升...
在实现类中,我们可以使用.NET框架提供的各种服务类,如System.Web.Services.WebService,来构建Web服务的基础结构。 3. **编译DLL**: 使用Visual Studio或其他.NET开发工具,将实现类编译为DLL文件。确保配置项目...
总结来说,Java WebService的开发涉及了Web Service的基本概念、开发工具的使用、服务的创建、部署、测试,以及服务的管理和查找机制。对于Java开发者来说,掌握这些知识和技术对于开发和集成分布式系统至关重要。
首先定义了一个名为`HelloWorld`的接口,使用了`@WebService`注解来声明这是一个Web服务接口。接口中的方法如`sayHi()`和`sayHiToUser()`分别接收一个字符串参数和一个`User`对象,返回相应的问候语。`@WebParam`...