Jax-ws开发实例
初次接触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开发实例的更多相关文章
- nodeJS学习(8)--- WS/...开发 NodeJS 项目-节3 <使用 mongodb 完整实例过程>
使用 mongodb 的小系统 参考:https://my.oschina.net/chenhao901007/blog/312367 1. Robomongo 创建项目的数据库和数据表 参考:htt ...
- RESTLET开发实例(一)基于JAX-RS的REST服务
RESTLET介绍 Restlet项目为“建立REST概念与Java类之间的映射”提供了一个轻量级而全面的框架.它可用于实现任何种类的REST式系统,而不仅仅是REST式Web服务. Restlet项 ...
- [转贴]JAVA:RESTLET开发实例(二)使用Component、Application的REST服务
上一篇文章,我们介绍了基于JAX-RS的REST服务,本篇文章我们介绍不基于JAX-RS的模式.JAX-RS其实就是一个简单的 Application服务.和我们接下来介绍的Application基本 ...
- [转贴]JAVA :RESTLET开发实例(一)基于JAX-RS的REST服务
RESTLET介绍 Restlet项目为“建立REST概念与Java类之间的映射”提供了一个轻量级而全面的框架.它可用于实现任何种类的REST式系统,而不仅仅是REST式Web服务. Restlet项 ...
- Jboss ESB简介及开发实例
一.Jboss ESB的简介 1. 什么是ESB. ESB的全称是Enterprise Service Bus,即企业服务总线.ESB是过去消息中间件的发展,ESB采用了“总线”这样一 ...
- ecshop二次开发 给商品添加自定义字段【包含我自己进一步的开发实例详解】
本文包含商品自定义添加教程及进一步的开发实例: 教程: 说起自定义字段,我想很多的朋友像我一样会想起一些开源的CMS(比如Dedecms.Phpcms.帝国)等,他们是可以在后台直接添加自定义字段的. ...
- RDIFramework.NET -.NET快速信息化系统开发整合框架 【开发实例 EasyUI】之产品管理(WebForm版)
RDIFramework.NET—.NET快速开发整合框架 [开发实例]之产品管理(WebForm版) 接上篇:RDIFramework.NET (.NET快速信息化系统开发整合框架) [开发实例]之 ...
- RDIFramework.NET-.NET快速信息化系统开发整合框架 【开发实例 EasyUI】之产品管理(MVC版)
RDIFramework.NET—.NET快速开发整合框架 [开发实例]之产品管理(MVC版) 接上篇:RDIFramework.NET (.NET快速信息化系统开发整合框架) [开发实例]之产品管理 ...
- Cocos2d-x 3.X手游开发实例详解
Cocos2d-x 3.X手游开发实例详解(最新最简Cocos2d-x手机游戏开发学习方法,以热门游戏2048.卡牌为例,完整再现手游的开发过程,实例丰富,代码完备,Cocos2d-x作者之一林顺和泰 ...
- 免费的HTML5连载来了《HTML5网页开发实例详解》连载(二)
最近新浪.百度.腾讯.京东.大众点评.淘宝等流行的网站都加大了招聘HTML5的力度,HTML5开发人员成了抢手货,本次连载的是由大众点评前端工程师和一淘网前端工程师基情奉献的<HTML5网页开发 ...
随机推荐
- react native 网络get请求方式参数不可为undefined或null
react native 网络get请求方式参数不可为undefined(为空的话默认变为)或null 错误写法: export function addToCartAction(isRefreshi ...
- AFNetWorking3.0使用 自签名证书的https请求
前几日,项目组出于安全角度的考虑,要求项目中的请求使用https请求,因为是企业内部使用的app,因此使用了自签名的证书,而自签名的证书是不受信任的,所以我们就需要自己来做证书的验证,包括服务器验证客 ...
- Java集合框架(JCF)之collention
一.概念:是为了实现某一目的或功能而预先提供的一系列封装好了的具有继承或实现的类与接口. 二.特点: 1.元素的类型可以不同 2.集合长度可变 3.空间不固定 三.collection与collec ...
- 一条结合where、group、orderby的linq语法
DataTable dt = (from x in dsResult.Tables[0].AsEnumerable() where DataTrans.CBoolean(x["IsCheck ...
- How a non-windowed component can receive messages from Windows -- AllocateHWnd
http://www.delphidabbler.com/articles?article=1 Why do it? Sometimes we need a non-windowed componen ...
- WEB前端性能优化小结
转:http://www.gafish.net/archives/1514 对前端开发工程师来说,前端性能优化的重要性是不言而喻的,最为大家所知的是YSLOW的23条优化规则,在我的理解中,性能优化不 ...
- 【M9】利用destructors避免泄漏资源
1.在堆上获取的动态资源,用户忘记delete,或者由于异常导致没有没执行到delete,都会造成资源泄漏. 2.我们知道,栈上的对象,离开作用域,必定要执行析构方法.即使抛出异常,会堆栈回滚,保证已 ...
- ASP.NET Web Forms的改进
虽然ASP.NET Web Forms不是vNext计划的一部分,但它并没有被忽视.作为Visual Studio 2013 Update 2的一部分,它重新开始支持新工具.EF集成和Roslyn. ...
- Codeforces Round #146 (Div. 1) A. LCM Challenge 水题
A. LCM Challenge 题目连接: http://www.codeforces.com/contest/235/problem/A Description Some days ago, I ...
- static使用方法小结
static使用方法小结 statickeyword是C, C++中都存在的keyword, 它主要有三种使用方式, 当中前两种仅仅指在C语言中使用, 第三种在C++中使用(C,C++中详细细微操作不 ...