转自:http://blog.csdn.net/u011165335/article/details/51345224
一、概览
方式1:
HttpClient:可以用来调用webservie服务,也可以抓取网页数据
版本1:HttpClient3.0.x
版本2:HttpClient4.x.x(目前最新4.5.2)
这2个版本的使用方式不一样;变动较大
方式2:纯Java(自带API) jws
方式3:cxf框架
方式4:axis2框架
准备工作:
1.了解wsimport java自带的一个命令(建议使用jdk7,稳定支持)
作用:将wsdl文件生成本地代理(java代码),方便调用
语法 wsimport [opations]
- wsdl_uri:wsdl 的统一资源标识符
- d :指定要输出的文件的位置
- s :表示要解析java的源码 ,默认解析出的是class字节码
- p : 指定输出的包名
1. 获取服务路径:比如
http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?WSDL
2. 获取wsdl文件.建议使用JDK1.6以上的版本的wsimport命令
进入dos的桌面:
方式1:wsimport http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?WSDL
这种默认只会生成class,且会生成默认的包
方式2:生成源码,指定包和路径
wsimport -s ./ -p cn.aa http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?WSDL
3.可以把class文件打成jar包 jar cvf test.jar 打包目录
4.放在你的项目中进行调用:
public static void main(String[] args) {
MobileCodeWS mobileCodeWs=new MobileCodeWS();
MobileCodeWSSoap mobileCodeWSSoap=mobileCodeWs.getMobileCodeWSSoap();
String tel=mobileCodeWSSoap.getMobileCodeInfo("183735xxxx",null);
System.out.println(tel);
}
2.规范了解
JAVA 中共有三种WebService 规范,分别是JAX-WS(JAX-RPC)、JAXM&SAAJ、JAX-RS。
1. Jaxws(掌握)
JAX-WS 的全称为 JavaAPI for XML-Based Webservices ,早期的基于SOAP 的JAVA 的Web 服务规范JAX-RPC(javaAPI For XML-RemoteProcedure Call)目前已经被JAX-WS 规范取代。从java5开始支持JAX-WS2.0版本,Jdk1.6.0_13以后的版本支持2.1版本,jdk1.7支持2.2版本。
Jaxws开发的webservice传输soap协议。
2JAXM&SAAJ(了解)
JAXM(JAVA API For XML Message)主要定义了包含了发送和接收消息所需的API,SAAJ(SOAP With Attachment APIFor Java,JSR 67)是与JAXM 搭配使用的API,为构建SOAP 包和解析SOAP 包提供了重要的支持,支持附件传输等,JAXM&SAAJ 与JAX-WS 都是基于SOAP 的Web 服务,相比之下JAXM&SAAJ 暴漏了SOAP更多的底层细节,编码比较麻烦,而JAX-WS 更加抽象,隐藏了更多的细节,更加面向对象,实现起来你基本上不需要关心SOAP 的任何细节
3. JAX-RS(掌握)
JAX-RS 是JAVA 针对REST(Representation State Transfer)风格制定的一套Web 服务规范,由于推出的较晚,该规范(JSR 311,目前JAX-RS 的版本为1.0)并未随JDK1.6 一起发行。
Rest定义可以自行搜索
jax-RS可以发布 rest风格webservice,因为rest的webservice不采用soap传输,直接采用http传输,可以返回xml或json,比较轻量。
以后可能会流行Rest风格的
二、简单例子
1.httpClient3.x.x
此方式不需要wsimport命令
// 通过Http-Client 框架来模拟实现 Http请求--get
public static String getMobileCodeInfo1(String mobileCode, String userID)
throws HttpException, IOException {
HttpClient client = new HttpClient();
GetMethod getMethod=new GetMethod("http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx/getMobileCodeInfo?mobileCode="
+ mobileCode + "&userID=" + userID);
//执行,得到消息码
int code = client.executeMethod(getMethod);
System.out.println("消息码:"+code);
String result="";
if (code==HttpURLConnection.HTTP_OK) {
//得到执行结果
result = getMethod.getResponseBodyAsString();
System.out.println(result);
}
return result;
}
// 通过Http-Client 框架来模拟实现 Http请求--post
// 需要导入3个jar包,本demo的jar包版本是3.1.0
// 目前最新的是4.5.2,使用方式也发生了变化
public static String getMobileCodeInfo2(String mobileCode, String userID)
throws HttpException, IOException {
// 输入服务网址
HttpClient client = new HttpClient();
// GetMethod
PostMethod post = new PostMethod(
"http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx/getMobileCodeInfo");
// 设置参数
post.setParameter("mobileCode", mobileCode);
post.setParameter("userID", userID);
// client.setTimeout(newTimeoutInMilliseconds);
// 执行,返回一个结果码
int code = client.executeMethod(post);
System.out.println("结果码:" + code);
// 获取xml结果
String result = post.getResponseBodyAsString();
System.out.println("结果:" + result);
//释放连接
post.releaseConnection();
return result;
}
// Post请求 :通过Http-Client 框架来模拟实现 Http请求
//从xml中获取请求参数
//SOAP1.1方式
//问题:soap怎么定义,这里已经返回接结果,但是没有手机号信息,也就返回的结果匹配,不知道为什么
//估计是配置文件有问题
//soap1.1
@Test
public void soap() throws Exception{
HttpClient client=new HttpClient();
PostMethod postMethod=new PostMethod("http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx");