自定义及发布一个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
 */
@WebService
public 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());
    }

}

结果:

时间: 2024-10-05 05:21:07

自定义及发布一个webservice服务的相关文章

java中发布一个webService服务到服务器

Java在编码完成webService服务端后,可以通过运行一个main方法来发布webService服务,但是实际将服务部署到服务器上后,肯定不能还运行main方法,所以我们需要在启动服务器的时候就发布服务.并且在服务器的生命周期内一直运行. main方法发布服务(可用于测试类) public static void main(String[] args) { Endpoint.publish("http://172.18.100.52:9090/medical", new Medi

java程序调用xfire发布的webService服务(二)

在上一篇的调用xfire发布的webService服务中,我只是从服务端返回了一个字符串给客户端,却没有测试从客户端传递数据给服务端.而实际应用中一般是不太可能只出现这样的应用场景的,因此我便更进一步测试了客户端传递数据给服务端. 因为相关的jar包在上一篇已经说过,因此便不再重复说明,这次的测试步骤如下: 一.测试向服务端传递字符串(重点在第二个): 为了进一步理解服务搭建,我重新写了一个服务端服务类: 接口: package xfireTest; public interface XFire

【Web学习日记】——在IIS上发布一个WebService

没有开发过程,只是发布过程 一.前提 开发使用的是VS2013 从来没有做过Web的发布,在网上找例子,看到的总是与自己的情况不相符,而且也有人提出了VS2013发布网站的问题,但解决方案却很少,好不容易找到一个,一定要记下来,方便以后查阅. 要把一个WebService发布到IIS,首先要安装IIS,网络上有很多安装IIS的教程,不再重复:第二步就是使用VS发布WebService:第三步就是在IIS上创建网站. 二.用VS2013发布WebService 用VS2013开发完成之后,在Web

发布一个python服务框架iserver(带压力测试数据)

Iserver简介 Iserver是一个用python编写的网络服务框架(编译版本3.4.1),使用的是epool网络模型 测试机配置 处理器 2x Genuine Intel(R) CPU T2050 @ 1.60GHz 内存 2060MB (673MB used) nginx开启进程数 root 2413 2409 0 09:17 pts/0 00:00:00 grep -i nginx www 2414 2411 2 09:17 ? 00:00:00 nginx: worker proce

java程序调用xfire发布的webService服务

昨天用xfire搭好了一个简单的webService的服务,可以在浏览器访问,今天便想要尝试以下如何调用这个服务及相关的方法.在网上查找了一些资料后,实现过程如下. 1.创建一个maven web项目,并创建一个带有main方法的类. 2.导入xfire依赖的一些jar包,为了简单起见,我就把搭建服务端时的jar包都考了过来,放在lib文件夹下,然后如上一篇搭建时一样把jar加入到build path中.                3.创建一个和服务端一样的接口类,必须要有这个接口类才可以:

spring+cxf+hibernate  发布restful WebService服务

项目目录结构 项目下载路径: http://pan.baidu.com/s/1o6H06LW   (如果项目路径实效,可以qq找我,下面有我qq) 1.we b.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.c

JAVA项目中发布WebService服务——简单实例

1,在Java项目中发布一个WebService服务: 如何发布? --JDK1.6中JAX-WS规范定义了如何发布一个WebService服务: (1)用jdk1.6.0_21以后的版本发布: (2)与Web服务相关的类,都位于Javax.jws.*包中 @WebService--此注解用在类上指定将此类发布成一个WebService: EndPoint--此类为端点服务类,其中publish()方法用于将一个已经添加了@WebService注解对象绑定到一个地址的端口上,用于发布. 2,例子

So easy Webservice 6.使用EndPoint发布webservice服务

创建第一个Web服务: @WebService // 添加了此注解,代表是一个WebService public class HelloWorld { // 非 static final private 方法默认会发布 public String sayHi(String name) { return "hello" + name; } } 发布web服务: public static void main(String[] args) { String address="ht

利用jws发布一个查询员工信息的Web服务(员工信息存储在数据库中)

这是<基于服务的软件系统>的课程设计: 一.作业要求 编写查询员工信息的Web服务(员工信息存储在数据库中).第一个Web服务:输入员工号,返回该员工号的员工的基本信息,包括员工号.员工名称.所在部门.出生日期.职位.职称.入职日期等信息.第二个Web服务:输入部门.职称,返回该部门具有该职称的所有员工的基本信息,员工基本信息与上面相同.分别针对上述两个Web服务,分别编写调用这两个Web服务的程序(或网页).要求在输入界面上输入待查询数据,调用Web服务,并将Web服务返回的员工信息查询结果