webservice通信 服务端 客户端简单实现
schema规范中: 1.所有标签和属性都需要有schema文件来定义。 2.所有schema文件都需要有一个唯一标识id,单在xml文件中它叫namespace。 3.namespace的值由targetNamespace属性来指定,它的值是一个url(很可能不存在)。 4.如何引入一个schema约束? 1).属性?:用xmlns属性。 2).属性值?:对应schema文件的id即(namespace值)。 5.如果引入的schema约束不是w3c提供的,必须指定schema文件的位置。 6.schema文件的位置由什么属性来指定 1).属性?:用schemaLocation属性。 2).属性值?:引入文件的namespace+空格+path 7.如果引入了n个schema约束,需要给n-1个取别名。 同时取别名的schema定义的标签在引用之前都得先加上别名。 http协议: 请求的组成: 请求行:(请求方式(get/post),请求路径(不包含主机名),请求所用协议(http1.1)) 请求头: 请求体:只有post请求才有请求体 响应组成: 响应状态行:(200请求成功,404路径错误,500服务器端异常情况,302客户端跳转) 响应头: 响应体: 8.webservice中的几个重要术语 1.WSDL:web service definition language(webservice定义语言) 1-1).对应一种类型的文件 xxx.wsdl 1-2).定义了webservice的服务器端与客户端应用交互传递请求和响应数据的格式和方式 1-3).一个webservice对应一个唯一的wsdl文件 2).SOAP:Simple Object Access Protocal? 2-1).简单对象访问协议 2-2).是一种简单的、基于http和xml的协议,用于在web上交换结构化的数据 2-3).SOAP消息请求消息和响应消息 2-4).http+xml片段 3).SEI:webservice Endpoint Interface 3-1).webservice的终端接口 3-2).webservice服务器端用来处理请求的接口 ? ?4).CXF:Celtix +Xfire 4-1).一个apache的用于开发webservice服务器端和客户端的框架 4-2). 4-3). 9.webservice服务端代码实现 ?? 1)创建一个java工程作为webservice服务端,如创建java工程hello_ws 2)在该项目的src项目下创建包 cn.bsxy.ws.server(任意取一个包名,遵循java包名定义的规则) 用于存放server端测试类 如 public class TestHelloWs(){} ?创建包名cn.bsxy.ws.sei 用于存放webservice的SEI webservice终端接口public interface HelloWs(){} ? ? ? 创建包名cn.bsxy.ws.sei.impl 用于存放webservice的SEI的实现类,public class HelloWsImpl implements HelloWs(){} 以上各包中类的具体代码如下: ? //webservice发布代码 package cn.bsxy.ws.server; import javax.xml.ws.Endpoint; import cn.bsxy.ws.sei.impl.HelloWsImpl; /** *? * @author smartluobo *该类用来发布服务器端的wsdl文件 */ public class TestHelloWs { public static void main(String[] args) { String address = "http://192.168.0.116:8888/hello_ws/hellows"; Endpoint.publish(address,new HelloWsImpl()); System.out.println("发布webservice成功"); } }
//webservice终端接口定义 package cn.bsxy.ws.sei; import javax.jws.WebMethod; import javax.jws.WebService; /** *? * @author smartluobo *该类用来定义webservice的终端接口,即对外提供的访问方法 */ @WebService public interface HelloWs { @WebMethod String sayHello(String name); }
//webservice终端接口类的实现类,完成webservice对外提供接口的具体实现 package cn.bsxy.ws.sei.impl; import javax.jws.WebService; import cn.bsxy.ws.sei.HelloWs; /** * webservice终端接口实现类。对webservice对外提供接口的具体实现 * @author smartluobo * */ @WebService public class HelloWsImpl implements HelloWs { @Override public String sayHello(String name) { System.out.println("hello web server"+name); return "hello client"+name; } } 在TestHelloWs.java中运行该类当控制台打印发布成功后说明webservice已经发布成功。 webservice发布成功后打开浏览器,将在TestHelloWs.java中定义的address 复制到浏览器地址栏并在后面追加"?wsdl",就能看到发布后生成的wsdl文件。到此webservice服务端就已经ok 对webservice服务端的简单总结两个注解加上一个类 注解1.@WebService(该注解表示定义的该类是一个webservice终端接口, 但是在该终端接口类的实现类上任然需要加上该注解) 在上述的HelloWs.java和HelloWsImpl.java上都需加上@WebService注解 注解2.@WebMethod(该注解用在方法上表示该方法是webservice对外提供的一个方法,只需在接口定义方法上加该注解即可) 类.Endpoint(调用该类的Endpoint.publish方法发布webservice) Endpoint.publish(String address,Object implementor) address:webservice发布的地址。 implementor:webservice终端接口实现的类的对象。 10.webservice客户端实现: 1.创建一个普通的java项目作为客户端项目hello_ws_client(项目名称任意)。 2.根据wsdl文件发布地址借助jdk的wsimport.exe生成客户端代码。 path wsimport -keep url path:表示生成的代码放在哪个路径下。 -keep:表示保存生成的代码的。 url:wsdl文件发布的url地址。 如:我想把通过wsdl文件生成代码放在hello_ws_client项目的src目录下。 进入hello_ws_client项目的src目录:我本地的路径为 D:lmbworkspacehello_ws_clientsrc在D盘下 2.1打开命令窗口 输入d: 切换盘符进入D盘 2.2 输入cd D:lmbworkspacehello_ws_clientsrc 进入到需要存放生成代码的路径下 2.3 输入 wsimport -keep http://192.168.0.116:8888/hello_ws/hellows?wsdl? 2.4 上述三步完成后即完成了根据wsdl文件生成java代码的工作,此时刷新hello_ws_client项目即可看到生成的java代码。 3.在hello_ws_client项目中新建包cn.bsxy.ws.client.test(包名随意) 3.1创建一个测试类 public class ClientTest(){}(类名随意) package cn.bsxy.ws.client.test; import cn.bsxy.ws.sei.impl.HelloWsImpl; import cn.bsxy.ws.sei.impl.HelloWsImplService; public class ClientTest { public static void main(String[] args) { //使用wsimport生成的一个工厂类(名字为XxxxService) HelloWsImplService factory = new HelloWsImplService(); //使用wsimport生成的一个类(名字和服务端webservice终端接口实现类的名称一致。但是在本地是一个接口) //factory.getHelloWsImplPort()返回的是一个动态代理对象 HelloWsImpl helloWs = factory.getHelloWsImplPort(); String result = helloWs.sayHello("smartluobo"); System.out.println(result); } } 4.webservice客户端简单访问也到此结束。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |