自定义webservice服务

我们在上一章节中已经使用wsimport生成本地代理来调用webservice的服务了,其实我们自己写的web应用程序也是可以发布webservice的

我们发布了webservice的话,那么其他人也是可以调用我们自己写的webservice!

那么我们怎么自定义webservice然后发布出去呢???

在jdk 1.6 版本以后 ,通过jax-ws 包提供对webservice的支持

  • 该方式通过注解的方式来声明webservice
  • 通过 jdk EndPoint.publish()发布webserive服务

快速入门

写一个实体:


public class Phone {
private String name;//操作系统名
private String owner;//拥有者
private int total;//市场占有率
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
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;
} }

发布service,通过注解来让WSDL文件更加可读…


package cn.it.ws.d; import cn.it.ws.model.Phone; import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;
import javax.xml.ws.Endpoint;
/*
*手机的业务类,该业务类通过webservice 对外提供服务
* 1. 声明: @webservice
* 2. 发布 EndPoint
*/ @WebService (serviceName="PhoneManager",//修改服务名
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.setName("android");phone.setOwner("google");phone.setTotal(80);
}else if(osName.endsWith("ios")){
phone.setName("ios");phone.setOwner("apple");phone.setTotal(15);
}else{
phone.setName("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:8888/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");
} }
  1. 在类上添加@WebService注解,代表发布一个WebService服务
  2. 通过EndPoint(端点服务)发布一个webService。Endpoint也是jdk提供的一个专门用于发布服务的类,它的publish方法接收两个参数,一个是本地的服务地址,二是提供服务的类。它位于javax.xml.ws.*包中。
  3. Endpoint.publish(String address, Object implementor) 静态方法在给定地址处针对指定的实现者对象创建并发布端点
  4. 给类添加上@WebService注解后,类中所有的非静态方法都将会对外公布
  5. 如果希望某个方法不对外公开,可以在方法上添加@WebMethod(exclude=true),阻止对外公开。
  6. 如果一个类上,被添加了@WebService注解,则必须此类至少有一个可以公开的方法,否则将会启动失败。

    protected、private、final、static方法不能对外公开

@WebService // 添加了此注解,代表是一个WebService
public class HelloWorld {
// 非 static final private 方法默认会发布
public String sayHi(String name) {
return "hello" + name;
}
@WebMethod(exclude=true)
public void exclude(){
// 被注解排除的方法
}
protected void protected1(){
//受保护的方法默认不发布
}
private void private1(){
// 私有方法默认不发布
}
public static void static1(){
// static 方法默认不发布
}
public final void final1(){
// final 方法默认不发布
}
}

生成的webservice能够在浏览器访问


SOAP协议

目前WebService的协议主要有SOAP1.1和1.2。

  • 两者的命名空间不同。

  • SOAP1.1版本与SOAP1.2版本在头信息上存在差异。
    • SOAP1.1存在SOAPAction的请求头。
    • SOAP1.2没有SOAPAction的请求头。
  • 基于SOAP1.1生成的WSDL和基于SOAP1.2生成的WSDL也不一样。

    主要看命名空间。
  • 在CXF中两种协议请求的方式也不一样。
    • 1.1为content-Type:text/xm;charset=UTF-8
    • 1.2为content-Type:application/soap+xml;charset=UTF-8

SOA、UDDI概念

SOA

Soa(Service-Oriented Architecture)面向服务的架构,它是一种思想,IBM大力倡导是即插即用的,IBM大力提倡,希望以组装电脑的方式来开发应用

组成:

  • 面向web的服务,面向web的组件 :WebService : 硬盘、cpu、内存条
  • 企业服务总线 (EnterPrise Service Bus :ESB)。主板

uddi

uddi (Universal Description, Discovery and Integration)统一描述、发现、集成

  • 它是目录服务,通过该服务可以注册和发布webservcie,以便第三方的调用者统一调用

webservice第二篇【自定义webservice服务、soa、uddi概念、soap协议】的更多相关文章

  1. ETL第二篇 调用webservice

    ETL第一篇(Kettle Spoon) 初遇 ETL第二篇 调用webservice 前言 这里使用ETL [Java代码] 实现 代码中使用axis调用webservice 在ETL提供了 Pro ...

  2. 第二篇:利用shell脚本执行webservice请求——基于soap

    1. 项目背景 以往我们在开发基于webservice的项目中,我们总习惯于直接使用webservice的一些框架,如Axis,axis2和Xfire等.框架的好处是将webservice所涉及到的s ...

  3. WebService第二天

    WebService第二天 课程安排:(CXF+HESSIAN) 框架CXF概述(是什么,SOA概述,下载安装) CXF快速入门(服务端.客户端开发,日志拦截器,SOAP版本相互调用的) CXF与sp ...

  4. 关于wcf,webservice,webapi或者其他服务或者接口有什么区别 WCF、WebAPI、WebService之间的区别 【转载】HTTP和SOAP完全就是两个不同的协议 WebService学习总结(一)——WebService的相关概念

    wcf,webservice采用的是rpc协议,这个协议很复杂,所以每次要传递.要校验的内容也很复杂,别看我们用的很简单,但实际是frame帮我们做掉了rpc生成.解析的事情webapi遵循是rest ...

  5. 浅淡Webservice、WSDL三种服务访问的方式(附案例)

    Webservice Webservice是使应用程序以与平台和编程语言无关的方式进行相互通信技术. eg:站点提供访问的数据接口:新浪微博.淘宝. 官方解释:它是一种构建应用程序的普遍模型,可以在任 ...

  6. 第一篇:webservice初探

    接触webservice也有一段时间了,为了查缺补漏,把知识点系统化,准备写几篇博文梳理下webservice的知识点,这是第一篇,对webservice进行大致的介绍. 1.什么是webservic ...

  7. Webservice、WSDL三种服务访问的方式【转】

    http://www.cnblogs.com/yongfeng/archive/2013/01/30/2883146.html 用soapUI试了下wsdl的测试,但还是不知道webService和W ...

  8. webservice第一篇【介绍、Scoket、http调用、wsimport调用】

    WebService介绍 首先我们来谈一下为什么需要学习webService这样的一个技术吧-. 问题一 如果我们的网站需要提供一个天气预报这样一个需求的话,那我们该怎么做????? 天气预报这么一个 ...

  9. angularjs学习第三天笔记(过滤器第二篇---filter过滤器及其自定义过滤器)

    您好,我是一名后端开发工程师,由于工作需要,现在系统的从0开始学习前端js框架之angular,每天把学习的一些心得分享出来,如果有什么说的不对的地方,请多多指正,多多包涵我这个前端菜鸟,欢迎大家的点 ...

随机推荐

  1. linux基础简答(1)

    linux基础简答题 扇区及其4个主分区的原因 在第一个扇区中,保存着引导记录和分区信息,容量为512bytes,主引导记录(相当于MBR)446 bytes,分区表64bytes,记录每个分区信息要 ...

  2. Cause: net.sf.cglib.beans.BulkBeanException; nested exception is com.ibatis.common.jdbc.exception.NestedSQLException:

     2017-03-13 15:40:15,003 ERROR [com.hisense.hitv.service.dotexc.impl.DotExcPolicyServiceImpl.updateD ...

  3. 【MySQL】 清除等待连接

    由于MySQL突然新增了很多连接,超出了my.cnf所设置的最大连接数,MySQL服务无法访问,这里通过Shell脚本来删掉Sleep连接 方式1 清除连接进程 #!/bin/bash #------ ...

  4. Linux 命令大全之Red Hat 7常用命令总结二

    Linux 命令大全之RedHat7常用命令笔记... ----------------------------------------------------- 征服Linux从终端开始 ----- ...

  5. sysctl -p 报错问题的解决方法

    最近执行sysctl -p 命令时一直报错,类似这种格式: error: permission denied on key...... 经过网上搜索, 原来这些问题都是因为openvz模版的问题,要进 ...

  6. Spring(四)-- JdbcTemplate、声明式事务

    1.Spring提供的一个操作数据库的技术JdbcTemplate,是对Jdbc的封装.语法风格非常接近DBUtils.   JdbcTemplate可以直接操作数据库,加快效率,而且学这个JdbcT ...

  7. python进阶学习(四)

    在使用多线程之前,我们首页要理解什么是进程和线程. 什么是进程? 计算机程序只不过是磁盘中可执行的,二进制(或其它类型)的数据.它们只有在被读取到内存中,被操作系统调用的时候才开始它们的生命期.进程( ...

  8. 利用WHID为隔离主机建立隐秘通道

    0 引言 从2014年BADUSB出现以后,USB-HID攻击就这一直被关注,且具争议.争议的焦点是USB-HID的实战效果过于“鸡肋”,无论从早期的BADUSB,还是到后来的各种USB-HID设备, ...

  9. 基于moco的mock server 简单应用 来玩玩吧

    提起mock大家应该就知道是干嘛用的了,再次再介绍一种简单的方式,基于moco的mock server.步骤很简单: 1. 首先,要下载个moco的jar0_1482402640757_moco-ru ...

  10. select选择框在谷歌火狐和IE样式的不同

    select选择在不同浏览器不同的显示样式, 在IE中 虽然默认和谷歌一样,但是当点击时向下 按钮消失, 解决方法如下: select { /*Chrome和Firefox里面的边框是不一样的,所以复 ...