初次接触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. Cocos2d-x 关于在iOS平台真机测试的一些注意

    下面简单记录一下在最近cocos2d-x项目在iOS平台真机测试和模拟器测试中遇到的一些要注意的地方(使用ipod): 1.图片大小 游戏中基本上都是会用到图片,那么在使用图片的时候要特别注意图片的s ...

  2. Android系统默认设置

    修改Settings源码,可修改系统设置项,Settings数据被存放于com.android.providers.settings/databases/settings.db中,如果想修改系统启动后 ...

  3. Linux coredump

    前面写过通过注册信号处理函数定位SEGV问题.其实Linux coredump机制也是比较好的debug手段. 进程由于某种异常或者bug导致在运行过程中异常退出或者中止,有时会产生一个叫做core的 ...

  4. Kettle 创建 Transformation

    1.第一步,先准备数据和工具 安装好mysql以及客户端工具 数据: USE `test`; CREATE TABLE `account` (   `id` int(11) NOT NULL AUTO ...

  5. 如何在tomcat安装部署php项目

    java开发者都知道,tomcat是用来部署java web项目的.前几天老k偶然得知PHP/Java Bridge,通过它可以实现在jsp和php之间共享session,详见<如何实现jsp和 ...

  6. Java中返回参数值的几种状态

    Java 中无参无返回值方法的使用 第一步,定义方法 例如:下面代码定义了一个方法名为 show ,没有参数,且没有返回值的方法,执行的操作为输出 " welcome to imooc. & ...

  7. C++标准库概述 [转]

    C++标准库的所有头文件都没有扩展名. C++标准库的内容总共在50个标准头文件中定义,其中18个提供了C库的功能.<cname>形式的标准头文件[<complex>例外]其内 ...

  8. C++ Vector 使用心得 [转]

    标准库Vector类型 使用需要的头文件:#include <vector>Vector:Vector 是一个类模板.不是一种数据类型. Vector<int>是一种数据类型. ...

  9. Javascript 装载和执行(copy的感觉有很多错误。。)

    copy from:http://coolshell.cn/articles/9749.html 首先,我想说一下Javascript的装载和执行.通常来说,浏览器对于Javascript的运行有两大 ...

  10. position:sticky用法

    用户的屏幕越来越大,而页面太宽的话会不宜阅读,所以绝大部分网站的主体宽度和之前相比没有太大的变化,于是浏览器中就有越来越多的空白区域,所以你可能注意到很多网站开始在滚动的时候让一部分内容保持可见,比如 ...