分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > IT知识

自定义及发布一个webservice服务

发布时间:2023-09-06 01:12责任编辑:彭小芳关键词:webservice

自定义及发布一个webservice服务
    - 声明 某个业务服务为webservice服务
       通过@webservice 注解来声明
    - 发布webservice服务
       Endpoint.publish()发布  (默认对public修饰的方法进行发布)
    - 通过wsimport生成本地代理来访问自己发布的webservice
       wsimport

1.发布自定义webservice

phone.java

package ws.myWebService;public class Phone { ???private String phoneName; ???private String owner; ???private int total; ???public String getPhoneName() { ???????return phoneName; ???} ???public void setPhoneName(String phoneName) { ???????this.phoneName = phoneName; ???} ???public String getOwner() { ???????return owner; ???} ???public void setOwner(String owner) { ???????this.owner = owner; ???} ???public int getTotal() { ???????return total; ???} ???public void setTotal(int total) { ???????this.total = total; ???}}

 PhoneService.java  

编写以及发布webservcie

@WebService ?声明
Endpoint.publish(address2, new PhoneService()); ?  发布(同一个端口下面可以发布多个)
package ws.myWebService;import javax.jws.WebService;import javax.xml.ws.Endpoint;/** * 手机的业务类,该业务类通过webservice 对外提供服务 1. 声明: @webservice 2. 发布 EndPoint */@WebServicepublic class PhoneService { ???public Phone getPhoneInfo(String phoneName) { ???????Phone phone = new Phone(); ???????if (phoneName != null && "android".equals(phoneName)) { ???????????phone.setPhoneName("android"); ???????????phone.setOwner("google"); ???????????phone.setTotal(80); ???????} else if (phoneName != null && "ios".equals(phoneName)) { ???????????phone.setPhoneName("ios"); ???????????phone.setOwner("apple"); ???????????phone.setTotal(15); ???????} else { ???????????phone.setPhoneName("windows phone"); ???????????phone.setOwner("microsoft"); ???????????phone.setTotal(5); ???????} ???????return phone; ???} ???public static void main(String[] args) { ???????// 发布的两个地址 ???????String address1 = "http://127.0.0.1/ws/phoneService"; ???????String address2 = "http://127.0.0.1:8888/ws/phoneManager"; ???????/** ????????* 发布webservice服务 1.address:服务的地址 2:implementor 服务的实现对象 ????????*/ ???????Endpoint.publish(address1, new PhoneService()); ???????Endpoint.publish(address2, new PhoneService()); ???????System.out.println("wsdl地址 :" + address1 + "?WSDL"); ???}}

 注意:访问的时候后面要带WSDL

WSDL文档解释:

   

  注意:      发布地址要加上http://,访问的时候后面要加上?WSDL。

      发布的只有soap访问方式,现在的主流访问方式。

 2.wsimport生成自己发布的webservice的本地代理

(1)生成本地代理
C:\Users\liqiang\Desktop>wsimport -s ./ http://127.0.0.1:8888/ws/phoneManager?WS
DL

(2)导入eclipse进行测试:

测试类: _Main.java

package ws.mywebservice;public class _Main { ???/** ????* 测试自己发布的webservice ????* ?????* @param args ????*/ ???public static void main(String[] args) { ???????// 服务 ???????PhoneServiceService phoneServiceService = new PhoneServiceService(); ???????// 访问方式 ???????PhoneService phoneService = phoneServiceService.getPhoneServicePort(); ???????Phone phoneInfo = phoneService.getPhoneInfo("ios"); ???????System.out.println(phoneInfo.getOwner()); ???????System.out.println(phoneInfo.getPhoneName()); ???????System.out.println(phoneInfo.getTotal()); ???}}

 结果:

------------------------修改默认配置的webservice注解配置(自定义服务名字与方法名字,参数名字)--------------------------------

          增强可读性

通过注解配置修改wsdl文件, 让它具有更好的可读性
   需求:
     1. 想改方法的输入参数名、返回参数名
     2. 想改服务名,方法名
     3. 对该业务类的某些方法不想对外发布
       -  默认只有public 修饰的方法会以webservice的形式对外发布
     而 private  受保护的,缺省的,都不会发布
       - 某些public 方法也不想对外发布

   实现:注解配置修改wsdl文件

(1)发布及生成本地代理

可以修改方法名字与默认的包结构。也可以修改将哪些方法排除在外面,而且只能发布public修饰的方法。

package ws.it.WebService;import javax.jws.WebMethod;import javax.jws.WebParam;import javax.jws.WebResult;import javax.jws.WebService;import javax.xml.ws.Endpoint;import ws.myWebService.Phone;/**手机的业务类,该业务类通过webservice 对外提供服务 * 1. 声明: @webservice * 2. 发布 EndPoint * ?*/@WebService (serviceName="PhoneManager1",//修改服务名 ??targetNamespace="http://dd.ws.it.cn") //修改命名空间 ,默认包名,取反//声明该业务类 对外提供webservice服务 ??,默认只是对public 修饰的方法对外以webservice形式发布public class PhoneService { ???/**@WebMethod(operationName="getMObileInfo"): 修改方法名 ????* @WebResult(name="phone"):修改返回参数名 ????* @WebParam(name="osName"):修改输入参数名 ????*/ ???@WebMethod(operationName="getMObileInfo") ???public @WebResult(name="phone") Phone getPhoneInfo(@WebParam(name="osName")String osName){ ???????Phone phone=new Phone(); ???????if(osName.endsWith("android")){ ???????????phone.setPhoneName("android");phone.setOwner("google");phone.setTotal(80); ???????}else if(osName.endsWith("ios")){ ???????????phone.setPhoneName("ios");phone.setOwner("apple");phone.setTotal(15); ???????}else{ ???????????phone.setPhoneName("windows phone");phone.setOwner("microsoft");phone.setTotal(5); ???????} ???????return phone; ???} ???@WebMethod(exclude=true)//把该方法排除在外 ???public void sayHello(String city){ ???????System.out.println("你好:"+city); ???} ???private void sayLuck(String city){ ???????System.out.println("好友:"+city); ???} ????void sayGoodBye(String city){ ???????System.out.println("拜拜:"+city); ???} ???protected void saySayalala(String city){ ????????System.out.println("再见!"+city); ????} ???????public static void main(String[] args) { ???????String address1="http://127.0.0.1:8088/ws/phoneSer"; ???????/** ????????* 发布webservice服务 ????????* 1.address:服务的地址 ????????* 2:implementor 服务的实现对象 ????????*/ ???????Endpoint.publish(address1, new PhoneService());// ???????Endpoint.publish(address2, new PhoneService()); ???????System.out.println("wsdl地址 :"+address1+"?WSDL"); ???}}

访问:  http://127.0.0.1:8088/ws/phoneSer?WSDL

wsimport生成本地代理:

C:\Users\liqiang\Desktop>wsimport -s ./ http://127.0.0.1:8088/ws/phoneSer?WSDL

包结构改变:(服务类前面的声明改变)

(2)导进eclipse进行测试:

_Main.java

PhoneManager1 服务名字改变,上面配置导致的
访问方式的方法名字也改变,也是上面配置导致的
package cn.it.ws.dd;public class _Main { ???/** ????* 测试自己发布的webservice ????* ?????* @param args ????*/ ???public static void main(String[] args) { ???????// 服务 ???????PhoneManager1 phoneServiceService = new PhoneManager1(); ???????// 访问方式 ???????PhoneService phoneService = phoneServiceService.getPhoneServicePort(); ???????Phone phoneInfo = phoneService.getMObileInfo("ios"); ???????System.out.println(phoneInfo.getOwner()); ???????System.out.println(phoneInfo.getPhoneName()); ???????System.out.println(phoneInfo.getTotal()); ???}}

结果:

自定义及发布一个webservice服务

原文地址:http://www.cnblogs.com/qlqwjy/p/7560524.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved