初次接触Jax-ws(Java API xml web Service)感觉挺简单的,在这里写下我的所学的:

大概的顺序是:首先定义接口 ,然后写接口的实现类,最后编写客户端。步骤是挺简单的,来看看代码吧!

定义接口:

@WebService  //用来标识这是一个对外服务的接口
public interface CalculatorService { @WebResult(name = "addResult") //用来设置wsdl文件中的返回的结果的名称 @webparam用来设置参数的名称
public int add(@WebParam int a, int b); @WebResult(name = "subtractResult")
public int subtract(@WebParam int a, @WebParam int b);
}

编写实现类:

@WebService(endpointInterface="com.web.service.CalculatorService")  //接入点接口
public class CalculatorServiceImpl implements CalculatorService { public int add(int a, int b) {
System.out.println(a + " + " + b + " = " + (a + b));
return a + b;
} public int subtract(int a, int b) {
System.out.println(a + "-" + b + "=" + (a - b));
return a - b;
} }

编写发布webservice类:

public class TestWebService {

    public static void main(String[] args) {
//发布的地址指明我们提供的服务的地址
String address = "http://localhost:8888/ns";
//提供服务的地址和要发布的实现类
Endpoint.publish(address, new CalculatorServiceImpl());
}
}

写好之后我们运行一下:然后打开浏览器输入我们该才提供服务的地址:http://localhost:8888/ns?wsdl可以看到一个schma文件就正确了。

最后编写我们的访问的客户端:

public class TestClient {

    public static void main(String[] args) {
try {
//服务的具体地址
URL url = new URL("http://localhost:8888/ns?wsdl");
//wsdl的命名空间的 提供服务的实现类
QName qname = new QName("http://service.web.com/", "CalculatorServiceImplService");
Service service = Service.create(url, qname);
//获取接口的实现类的实例
CalculatorService cs = service.getPort(CalculatorService.class);
System.out.println(cs.add(2, 3));
} catch (Exception e) {
e.printStackTrace();
}
}
}

上面的客户端要放在同一个项目中,但是在实际的开发当中我们是不可能,下面来看看在真正的客户端应该怎样调用:

首先我们新建一个项目:

然后我们使用jdk自带的wsimport命令来依据wsdl文件生成类:

打开命令行输入:wsimport -d d:webservice/01 -keep -p test -verbose http://localhost:8888/ns?wsdl

-d:表示我们要生成的类的路径

-keep:表示生成。java原文件,若不添加则只生成class文件

-p:表示要生成的到的包的名称,可选

-verbose:表示显示生成的详细信息

生成完成后我们到目录找到我们生成的类文件:

上面是我没有输入  -p 命令时生成的,在生成是会将wsdl的命名空间反转作为包名,将我们的类文件复制到我们新建的项目中:

然后我们可以看到我们通过命令已经生成了很多的类文件这样我们就可以像调用本地文件一样调用webservice服务了:

编写Test测试类:

public class TestWebService {

    public static void main(String[] args) {
//该类为自动生成的类 服务类:
CalculatorServiceImplService csis = new CalculatorServiceImplService();
CalculatorService cs = csis.getCalculatorServiceImplPort();
System.out.println(cs.add(2, 3));
}
}

测试运行通过,证明我们的程序正常。

Jax-ws开发实例的更多相关文章

  1. nodeJS学习(8)--- WS/...开发 NodeJS 项目-节3 <使用 mongodb 完整实例过程>

    使用 mongodb 的小系统 参考:https://my.oschina.net/chenhao901007/blog/312367 1. Robomongo 创建项目的数据库和数据表 参考:htt ...

  2. RESTLET开发实例(一)基于JAX-RS的REST服务

    RESTLET介绍 Restlet项目为“建立REST概念与Java类之间的映射”提供了一个轻量级而全面的框架.它可用于实现任何种类的REST式系统,而不仅仅是REST式Web服务. Restlet项 ...

  3. [转贴]JAVA:RESTLET开发实例(二)使用Component、Application的REST服务

    上一篇文章,我们介绍了基于JAX-RS的REST服务,本篇文章我们介绍不基于JAX-RS的模式.JAX-RS其实就是一个简单的 Application服务.和我们接下来介绍的Application基本 ...

  4. [转贴]JAVA :RESTLET开发实例(一)基于JAX-RS的REST服务

    RESTLET介绍 Restlet项目为“建立REST概念与Java类之间的映射”提供了一个轻量级而全面的框架.它可用于实现任何种类的REST式系统,而不仅仅是REST式Web服务. Restlet项 ...

  5. Jboss ESB简介及开发实例

    一.Jboss ESB的简介 1. 什么是ESB.         ESB的全称是Enterprise Service Bus,即企业服务总线.ESB是过去消息中间件的发展,ESB采用了“总线”这样一 ...

  6. ecshop二次开发 给商品添加自定义字段【包含我自己进一步的开发实例详解】

    本文包含商品自定义添加教程及进一步的开发实例: 教程: 说起自定义字段,我想很多的朋友像我一样会想起一些开源的CMS(比如Dedecms.Phpcms.帝国)等,他们是可以在后台直接添加自定义字段的. ...

  7. RDIFramework.NET -.NET快速信息化系统开发整合框架 【开发实例 EasyUI】之产品管理(WebForm版)

    RDIFramework.NET—.NET快速开发整合框架 [开发实例]之产品管理(WebForm版) 接上篇:RDIFramework.NET (.NET快速信息化系统开发整合框架) [开发实例]之 ...

  8. RDIFramework.NET-.NET快速信息化系统开发整合框架 【开发实例 EasyUI】之产品管理(MVC版)

    RDIFramework.NET—.NET快速开发整合框架 [开发实例]之产品管理(MVC版) 接上篇:RDIFramework.NET (.NET快速信息化系统开发整合框架) [开发实例]之产品管理 ...

  9. Cocos2d-x 3.X手游开发实例详解

    Cocos2d-x 3.X手游开发实例详解(最新最简Cocos2d-x手机游戏开发学习方法,以热门游戏2048.卡牌为例,完整再现手游的开发过程,实例丰富,代码完备,Cocos2d-x作者之一林顺和泰 ...

  10. 免费的HTML5连载来了《HTML5网页开发实例详解》连载(二)

    最近新浪.百度.腾讯.京东.大众点评.淘宝等流行的网站都加大了招聘HTML5的力度,HTML5开发人员成了抢手货,本次连载的是由大众点评前端工程师和一淘网前端工程师基情奉献的<HTML5网页开发 ...

随机推荐

  1. WSARecv()

    简述:从一个套接口接收数据. #include <winsock2.h> int WSAAPI WSARecv ( SOCKET s, LPWSABUF lpBuffers, DWORD ...

  2. IIS7 “拒绝访问临时目录”

    创建 BlogConfigurationSettings 的配置节处理程序时出错: 拒绝访问临时目录.以其运行 XmlSerializer 的身份“IIS APPPOOL\5656qp.com.rmi ...

  3. 《高性能MySQL》

    <高性能MySQL>(第3版)讲解MySQL如何工作,为什么如此工作? MySQL系统架构.设计应用技巧.SQL语句优化.服务器性能调优.系统配置管理和安全设置.监控分析,以及复制.扩展和 ...

  4. JedisPool连接池实现难点

    [http://jiangwenfeng762.iteye.com/blog/1280700]   [可改进的问题] 问题是jedispool有没有办法监控状态,比如说当前连接有多少,当前idle连接 ...

  5. sqlserver:同一数据库内负责表结构。

    select * into 新表 from 旧表   where 1=2; ## where 表示要携带的数据,随便写个恒不等式就可以只复制表结构不携带数据.

  6. 大数据平台搭建(hadoop+spark)

    大数据平台搭建(hadoop+spark) 一.基本信息 1. 服务器基本信息 主机名 ip地址 安装服务 spark-master 172.16.200.81 jdk.hadoop.spark.sc ...

  7. java String和Date转换

    SimpleDateFormat函数语法:    G 年代标志符  y 年  M 月  d 日  h 时 在上午或下午 (1~12)  H 时 在一天中 (0~23)  m 分  s 秒  S 毫秒  ...

  8. vector和iterator及collection

    Collection是所有集合的最上层接口,它里面定义了所有集合对象都可以进行的操作:它有两个子接口,分别是List和Set.List会记录放在其中元素的放入顺序,形象地说,可以认为是一个传送带,它上 ...

  9. uC/OS-III学习2::uC/OS-III LED闪烁实验

    1 前言: 看完了uC/OS-III的基本介绍之后,大致对这个操作系统有了点了解,但真正的理解还是要通过不断的去使用,在使用中体验uC/OS-III的乐趣和更深的理解其工作原理是非常重要的.因此,我在 ...

  10. ssh 命令行通过私钥登录其它设备

    ssh -i root(私钥文件) root@IP (被访问的服务器IP) 这里备份一下了