初次接触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. C#中的DllImport

    大家在实际工作学习C#的时候,可能会问:为什么我们要为一些已经存在的功能(比如 Windows中的一些功能,C++中已经编写好的一些方法)要重新编写代码,C#有没有方法可以直接都用这些原本已经存在的功 ...

  2. JPBM4.4基础及数据库说明

    JPBM4.4基础及数据库说明 对jBPM4.4数据库的几张表简单介绍: A.资源库和运行时表结构 JBPM4_DEPLOYMENT   流程定义表                           ...

  3. android 检测ListView滚动到的位置

    ListView滚动 1.要用到一个监听事件是:setOnScrollListener(); API解释是: Set the listener that will receive notificati ...

  4. c#实现word,winWordControl 文档不允许复制、粘贴、隐藏工具栏、快捷保存

    1.隐藏工具栏 //隐藏工具栏 ; i <= winWordControl1.document.CommandBars.Count; i++) { winWordControl1.documen ...

  5. WSO2 Stratos手册

    WSO2 Stratos是最完整的企业级cloud solution,提供了一个开放的PaaS平台,相比于其他的PaaS平台来说,Stratos支持更多核心的服务.Stratos2.0对那些想从异构环 ...

  6. HTML第二天学习笔记

    今天看视频学习的第一个知识是HTML中的块元素<div>和行内元素<span>. <!doctype html> <html lang="en&qu ...

  7. centos7.2安装配置

    VMware12上安装Centos7,如果电脑是64位,这必须选择64位的centos系统,不然安装完会找不到网卡.安装过程中应当开启网卡选项. 安装完想用ifconfig命令查找IP地址会提示错误: ...

  8. HDU 4286 Data Handler 双向链表/Splay

    Data Handler Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid= ...

  9. codeforces Gym 100187L L. Ministry of Truth 水题

    L. Ministry of Truth Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100187/p ...

  10. C语言阶乘和求闰年

    #include<stdio.h> void main(){ int i,a,s=1; scanf("%d",&a); for(i=1;i<=a;i++) ...