webservice部署和发布
WebService: 操作步骤: 1,??发布一个WebService a.???????写一个实现类 例如: //使用注解注入serviceName:表示类名,portName:端口名称,name实现类名 @WebService(serviceName="TestWebService",portName="TestWebServiceInstance",name="TestWebServiceImpl") public?class?TestWebServiceImpl{ ????@WebMethod(operationName="sayHello")//操作的方法名 ????//@WebParam(name="content")参数名称 ????public?String sayHi(@WebParam(name="content") String content) { ???????System.out.println("TestWebServiceImpl"+content); ???????return?"访问成功..."; ????} } ? //发布类 class?WSClient { static?void?main(String[] args) { ???????Endpoint.publish("http://127.0.0.1:9001/webservice",new?TestWebServiceImpl() ); out.println(发布成功........"); } ? b.???????调用该主函数进行发布 ? 2,??使用WS Explorer调用这个WebService a.?打开myeclips菜单栏中的window-à参数(preferenece)---à搜索(tcp)--à点击tcp/ip monitor---à编辑(edit) -----à填写?本地监听端口号(location monitoring port:),即在访问时使用的端口号,如9005,?主机号(localhost:?填写本地主机即可),?端口号:?填写需要代理的端口号:如:9000,?协议,选择TCP/IP -à启动(start)-àok b.点击菜单栏中?soap Web service Explorer --à输入url地址(及访问地址,?如:?http://127.0.0.1:9004/webservice?wsdl)?点击方法名---à点击add添加参数?---à点击go 3,配置TCP/IP Monitor监控发送的数据。 a?点击window中的显示视图项(show view)--àother--搜索添加的监视器(TCP/IP MONITOR). ? 4,使用wsimport+生成的类调用这个WebService. a.???????使用命令wsimport进行生成java类中的代码,?首先查看环境是否正确(即该命令是否能直接访问)?à如果不可以在环境中配置----à在dos控制台输入: wsimport,?查看输入方式:?如: wsimport??-s . -p cn.web.clientTest?http://127.0.0.1:9000/webservice?wsdl?---à此时会出现,解析wsdl, 生成代码,等英文-à完成 -s:表示目录??.点表示当前目录,-p :?表示包名,?最后为访问地址 ? ? b.???????将生成的代码放入工程中,?写一个类?,通过主函数调用过程: public?class?LocalHostTest { ???static?void?main(String[] args) { ??????String str =?new?TestWebService().getTestWebServiceInstance().sayHello("本地主机号实验!"); ??????System.out.println(str); ???} } A.??????调用主函数执行,或者在浏览器中直接访问地址也可以.在浏览器中会出现xml格式的文档,该文档中主要描述的时测试类的信息,如:?类名,方法,参数,返回值等. ? 操作过程中出现的异常:?常见的有绑定异常:?主要是端口被占用,?关闭服务从新部署即可 webService?中常用的注解: ???????@WebService 标注要暴露为Web Services的类或接口?,用于修饰类或接口,包含的属性有: targetNamespace属性: 定义命名空间,默认为”http://”+”包名倒排” name属性 Web Service?的名称,默认为类名。 wsdlLocation属性 描述服务的预定义?WSDL?的位置? endpointInterface属性 定义服务抽象?Web Service?协定的服务端点接口的完整名称 ? @webmethod: action属性 操作的活动 operationName属性 与此方法匹配的?wsdl:operation?的名称 exclude属性 标注此方法是否被暴露,默认为false 如果所有方法上都没有指定@WebMethod,则默认是所有的方法都是对外暴露的方法。如果有任一方法指定了@WebMethod,则只有指定这个注解的才是对外暴露的方法。 @webresult: @WebResult?定义返回值,返回值类型不能为接口类或抽象类,而且必须有个不带参的构造函数,包含属性 ? 返回值的名称 partName属性 表示此返回值的?wsdl:part?的名称 targetNamespace属性 返回值的?XML?名称空间 header属性 如果为?true,则结果是从消息头而不是消息正文获取的 @webparm @WebParam?定义方法的参数,参数类型不能为接口类或抽象类,而且必须有个不带参的构造函数,包含属性 参数名称 表示此参数的?wsdl:part?的名称 参数的?XML?名称空间 mode属性 参数的流向(IN、OUT?或?INOUT?之一) @SoapBinding: @SOAPBinding?定义Web Service?在SOAP中的消息协议,用于申修饰类或接口,包含的属性有: style属性: 定义消息的编码类型,有两种类型的soap通信风格:Document和RPC。 Document: 坚持定义良好的契约,典型通过xml schema创建,schema指定了消息的格式对于获得更好的可交互性的ws来说Document literal是首选。 RPC(Remote Prcedure call): 表示SOAP消息的body包含方法的xml表示,为了(反)序列化方法参数,SOAP规范定义了一系列编码规则。RPC主要用于传统的同SOAP encoding规则的协同,组合是指RPC/encoded。不过也可以有RPC/literal通信风格(不需要有任何编码格式),但依然限制RPC基于方法的通信,此种情况下文档无法进行检验因为没有schema定义。RPC风格的ws有很多交互问题。 use属性 定义消息的格式化类型。(通信风格)作为SOAP绑定定义在wsdl文档中。SOAP绑定可以是encoded用法和literal用法:encoding指消息会以某些格式进行编码。literal指纯文本,没有任何逻辑编码。 WSDL: 全称是Web Services Description Language(Web服务描述语言),是一种基于XML格式的、关于Web服务的描述语言。 ???????主要描述的时web服务与通信之间的xml语言,提供了web服务的相关内容,?如:?提供的借口,?方法名,参数类型,'Microsoft Yahei'; font-size:14px; line-height:22px"> SOAP: 全称是Simple Object Application Propotol(简单对象访问协议),是一种轻量的、简单的、基于?XML?的协议。他是一种标准化的传输消息的XML消息格式,是WebService的标准通信协议。 UDDI: 全称是Universal Description,Discovery and Integration(可译为“统一描述、发现和集成协议”或“通用描述、发现与集成服务”)。UDDI是一种目录服务,企业可以使用它对Web Services进行注册和搜索。???UDDI是一个分布式的互联网服务注册机制,它集描述(Universal Description)、检索(Discovery)与集成(Integration)为一体,其核心是注册机制。 ? ? 使用CXF发布webservice 1.导入jar包 2.写一个实现类 3.发布信息 例如: 1.实现类 "orderservice",255); font-size:10pt">"orderServiceImpl") class?OrderServiceImpl?implements?OrderService{ @WebMethod public?String findAll("name")String name) { ......."); 调用成功"+name; ????} ? 2/发布信息 class?CXFServiceTest { ???????JaxWsServerFactoryBean factory =?new?JaxWsServerFactoryBean(); ???????factory.setAddress("http://127.0.0.1:9006/Service");//发布地址 ???????factory.setServiceBean(new?OrderServiceImpl());//发布的实现类 ???????factory.create();发布信息 ....."); } 使用CXF的wsdl2java生成客户端代码并调用wsdl2java -d . -p cn.itcast.ws?http://127.0.0.1/ws2?wsdl 使用普通类发布webservice class?OrderServiceImpl2?public?String findAll(String name) { 2.发布信息 ???????ServerFactoryBean factory =?new?ServerFactoryBean(); "http://127.0.0.1:9006/OrderService");//发布地址 new?OrderServiceImpl2());//发布的实现类 不使用注解方式发布webservice"); HTTPClinet: ? class??CxfRSClient{ @Test void?testGet()?throws?Exception{ ???????HttpUriRequest request =?new?HttpGet("http://127.0.0.1/product/32sdfj"); ???????HttpClient client =?new?DefaultHttpClient(); ???????HttpResponse response = client.execute(request); ???????InputStream??in = response.getEntity().getContent(); ???????BufferedReader reader =?new?BufferedReader(new?InputStreamReader(in,"UTF-8")); if(response.getEntity()!=null){ ???????????String line; ???????????while((line=reader.readLine())!= ???????????System.out.println(line); ???????????} ???????} //发布信息 public?class??CxfRSTest{ ????static?void?main(String[] args) { ????????JAXRSServerFactoryBean factory =?new?JAXRSServerFactoryBean(); ????????factory.setAddress("http://127.0.0.1"); ????????factory.setServiceBean(new?ProductServiceImpl()); ????????factory.create();?//?发布服务 ????????System.out.println("RSservice --发布成功........"); ????} } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |