调用webService的几种方式

调用webService的几种方式

标签: webService
11957人阅读 评论(1) 收藏 举报
本文章已收录于:
分类:
JAVA(5)
作者同类文章 X

目录(?)[+]

  1. Jaxws掌握
  2. 2JAXMSAAJ了解
  3. JAX-RS掌握

一、概览

方式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.放在你的项目中进行调用:

[html] view plain copy
print ?
  1. public static void main(String[] args) {  
  2.         MobileCodeWS mobileCodeWs=new MobileCodeWS();  
  3.         MobileCodeWSSoap mobileCodeWSSoap=mobileCodeWs.getMobileCodeWSSoap();  
  4.         String tel=mobileCodeWSSoap.getMobileCodeInfo("183735xxxx",null);  
  5.         System.out.println(tel);  
  6.     }  
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  的全称为 Java API for XML-Based Webservices ,早期的基于SOAP 的JAVA 的Web 服务规范JAX-RPC(Java API 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命令

[html] view plain copy
print ?
  1. // 通过Http-Client 框架来模拟实现 Http请求--get  
  2.     public static String getMobileCodeInfo1(String mobileCode, String userID)  
  3.             throws HttpException, IOException {  
  4.         HttpClient client = new HttpClient();  
  5.         GetMethod getMethod=new GetMethod("http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx/getMobileCodeInfo?mobileCode="  
  6.                 + mobileCode + "&userID=" + userID);  
  7.           
  8.         //执行,得到消息码  
  9.         int code = client.executeMethod(getMethod);  
  10.         System.out.println("消息码:"+code);  
  11.         String result="";  
  12.         if (code==HttpURLConnection.HTTP_OK) {  
  13.             //得到执行结果  
  14.              result = getMethod.getResponseBodyAsString();  
  15.             System.out.println(result);  
  16.         }  
  17.           
  18.        return result;  
  19.     }  
  20.   
  21.   
  22.     // 通过Http-Client 框架来模拟实现 Http请求--post  
  23.     // 需要导入3个jar包,本demo的jar包版本是3.1.0  
  24.     // 目前最新的是4.5.2,使用方式也发生了变化  
  25.     public static String getMobileCodeInfo2(String mobileCode, String userID)  
  26.             throws HttpException, IOException {  
  27.   
  28.         // 输入服务网址  
  29.         HttpClient client = new HttpClient();  
  30.         // GetMethod  
  31.         PostMethod post = new PostMethod(  
  32.                 "http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx/getMobileCodeInfo");  
  33.         // 设置参数  
  34.         post.setParameter("mobileCode", mobileCode);  
  35.         post.setParameter("userID", userID);  
  36.         // client.setTimeout(newTimeoutInMilliseconds);  
  37.   
  38.         // 执行,返回一个结果码  
  39.         int code = client.executeMethod(post);  
  40.            
  41.         System.out.println("结果码:" + code);  
  42.         // 获取xml结果  
  43.         String result = post.getResponseBodyAsString();  
  44.         System.out.println("结果:" + result);  
  45.         //释放连接  
  46.         post.releaseConnection();  
  47.         return result;  
  48.     }  
  49.   
  50.     // Post请求 :通过Http-Client 框架来模拟实现 Http请求  
  51.     //从xml中获取请求参数  
  52.     //SOAP1.1方式  
  53.     //问题:soap怎么定义,这里已经返回接结果,但是没有手机号信息,也就返回的结果匹配,不知道为什么  
  54.     //估计是配置文件有问题  
  55.   
  56.       
  57.     //soap1.1  
  58.     @Test  
  59.     public void soap() throws Exception{  
  60.   
  61.         HttpClient client=new HttpClient();  
  62.         PostMethod postMethod=new PostMethod("http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx");  
  63.         //3.设置请求参数  
  64.           postMethod.setRequestBody(new FileInputStream("D:/soap.xml")); //文件名自定义  
  65.           //修改请求的头部  
  66.           postMethod.setRequestHeader("Content-Type", "text/xml; charset=utf-8");  
  67.         //4.执行请求 ,结果码  
  68.         int code=client.executeMethod(postMethod);  
  69.         System.out.println("结果码:"+code);  
  70.         //5. 获取结果  
  71.         String result=postMethod.getResponseBodyAsString();  
  72.         System.out.println("Post请求的结果:"+result);  
  73.     }  
  74.   
  75.     public static void main(String[] args) throws IOException {  
  76.         // getMobileInfo("13476699xxx", "");  
  77.         getMobileCodeInfo1("13476699xxx", "");//  
  78. //      getMobileCodeInfo2("13476699xxx", "");//   
  79.         //soap,利用xml传输参数  
  80.     }  
// 通过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");
		//3.设置请求参数
          postMethod.setRequestBody(new FileInputStream("D:/soap.xml")); //文件名自定义
          //修改请求的头部
          postMethod.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
		//4.执行请求 ,结果码
		int code=client.executeMethod(postMethod);
		System.out.println("结果码:"+code);
		//5. 获取结果
		String result=postMethod.getResponseBodyAsString();
		System.out.println("Post请求的结果:"+result);
	}

	public static void main(String[] args) throws IOException {
		// getMobileInfo("13476699xxx", "");
		getMobileCodeInfo1("13476699xxx", "");//
//		getMobileCodeInfo2("13476699xxx", "");// 
		//soap,利用xml传输参数
	}
其中:请求参数封装在soap.xml中

请求规范服务方会提供给你的

soap.xml请求内容如下:

[html] view plain copy
print ?
  1. xml version="1.0" encoding="utf-8"?>  
  2. <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">  
  3.   <soap:Body>  
  4.     <getMobileCodeInfo xmlns="http://WebXml.com.cn/">  
  5.       <mobileCode>1347669xxxxmobileCode>  
  6.       <userID>userID>  
  7.     getMobileCodeInfo>  
  8.   soap:Body>  
  9. soap:Envelope>  


  
    
      1347669xxxx
      
    
  
httpClient4.x.x不做演示,感兴趣的可以去查查,资料很多


2.java自带API实现

     2.1 类发布

          2.1.1 使用默认设置

[html] view plain copy
print ?
  1. @WebService  
  2. //默认服务名会加上Service  
  3. public class PhoneInfoWS {  
  4.       //默认方法名getPhoneInfo  
  5.      //默认参数名arg0  
  6.     //默认返回值名字:return  
  7.     //targetNamespace默认情况下为倒置的包名  
  8.       public Phone getPhoneInfo(String OSName) {  
  9.           Phone p=new Phone();  
  10.         if ("Android".equalsIgnoreCase(OSName)) {  
  11.             p.setOS(OSName);  
  12.             p.setOwn("Google");  
  13.             p.setScale(80);  
  14.         }else if("IOS".equalsIgnoreCase(OSName)){  
  15.             p.setOS(OSName);  
  16.             p.setOwn("Apple");  
  17.             p.setScale(14);  
  18.         }else if("windows Phone".equalsIgnoreCase(OSName)){  
  19.             p.setOS(OSName);  
  20.             p.setOwn("Microsoft");  
  21.             p.setScale(4);  
  22.         }else{  
  23.             p.setOS("others");  
  24.             p.setOwn("others");  
  25.             p.setScale(2);  
  26.         }  
  27.         return p;  
  28.     }  
  29.         
  30.         
  31.       //静态,非public方法不会被自动发布  
  32.       public static String say(String city){  
  33.           return "hello"+city;  
  34.       }  
  35.         
  36.       //访问时自动生成一个描述文件xml+xsd约束文件  
  37.       public static void main(String[] args) {  
  38.           //implementor要发布的对象,一般是接口的实现类  
  39.          String address1="http://127.0.0.1/PhoneInfoWS1?WSDL";  
  40.         // String address2="http://127.0.0.1/PhoneInfoWS2?WSDL";  
  41.          Endpoint point = Endpoint.publish(address1, new PhoneInfoWS());  
  42.          Endpoint.publish(address1, new PhoneInfoWS());  
  43.     //   Endpoint.publish(address2, new PhoneInfoWS());  
  44.            
  45.          //关闭发布  
  46. //       point.stop();  
  47.           
  48.            
  49.     }  
  50. }  
@WebService
//默认服务名会加上Service
public class PhoneInfoWS {
	  //默认方法名getPhoneInfo
	 //默认参数名arg0
	//默认返回值名字:return
	//targetNamespace默认情况下为倒置的包名
      public Phone getPhoneInfo(String OSName) {
    	  Phone p=new Phone();
		if ("Android".equalsIgnoreCase(OSName)) {
			p.setOS(OSName);
			p.setOwn("Google");
			p.setScale(80);
		}else if("IOS".equalsIgnoreCase(OSName)){
			p.setOS(OSName);
			p.setOwn("Apple");
			p.setScale(14);
		}else if("windows Phone".equalsIgnoreCase(OSName)){
			p.setOS(OSName);
			p.setOwn("Microsoft");
			p.setScale(4);
		}else{
			p.setOS("others");
			p.setOwn("others");
			p.setScale(2);
		}
		return p;
	}
      
      
      //静态,非public方法不会被自动发布
      public static String say(String city){
    	  return "hello"+city;
      }
      
      //访问时自动生成一个描述文件xml+xsd约束文件
      public static void main(String[] args) {
    	  //implementor要发布的对象,一般是接口的实现类
    	 String address1="http://127.0.0.1/PhoneInfoWS1?WSDL";
    	// String address2="http://127.0.0.1/PhoneInfoWS2?WSDL";
    	 Endpoint point = Endpoint.publish(address1, new PhoneInfoWS());
    	 Endpoint.publish(address1, new PhoneInfoWS());
    //	 Endpoint.publish(address2, new PhoneInfoWS());
    	 
    	 //关闭发布
//    	 point.stop();
    	
    	 
	}
}


   2.1.2自定义设置

  

[html] view plain copy
print ?
  1. @WebService(serviceName="PhoneInfoService",targetNamespace="http://PhoneService.web.com/")  
  2. //默认服务名会加上Service  
  3. public class PhoneInfoWS1 {  
  4.       @WebMethod(operationName="getPhoneInfo")  
  5.       public @WebResult(name="phone") Phone getPhoneInfo(@WebParam(name="OSName") String OSName) {  
  6.           Phone p=new Phone();  
  7.         if ("Android".equalsIgnoreCase(OSName)) {  
  8.             p.setOS(OSName);  
  9.             p.setOwn("Google");  
  10.             p.setScale(80);  
  11.         }else if("IOS".equalsIgnoreCase(OSName)){  
  12.             p.setOS(OSName);  
  13.             p.setOwn("Apple");  
  14.             p.setScale(14);  
  15.         }else if("windows Phone".equalsIgnoreCase(OSName)){  
  16.             p.setOS(OSName);  
  17.             p.setOwn("Microsoft");  
  18.             p.setScale(4);  
  19.         }else{  
  20.             p.setOS("others");  
  21.             p.setOwn("others");  
  22.             p.setScale(2);  
  23.         }  
  24.         return p;  
  25.     }  
  26.         
  27.         
  28.       //静态,非public方法不会被自动发布  
  29.       public static String say(String city){  
  30.           return "hello"+city;  
  31.       }  
  32.         
  33.       //屏蔽要发布的方法  
  34.       @WebMethod(exclude=true)  
  35.       public  String say1(String city){  
  36.           return "hello"+city;  
  37.       }  
  38.       public  String say2(String city){  
  39.           return "hello"+city;  
  40.       }  
  41.         
  42.         
  43.       //访问时自动生成一个描述文件xml+xsd约束文件  
  44.       public static void main(String[] args) {  
  45.           //implementor要发布的对象,一般是接口的实现类  
  46.          String address1="http://127.0.0.1/PhoneInfoWS1?WSDL";  
  47. //       String address2="http://127.0.0.1/PhoneInfoWS2?WSDL";  
  48.          Endpoint point = Endpoint.publish(address1, new PhoneInfoWS1());  
  49.          point.toString();  
  50.          Endpoint.publish(address1, new PhoneInfoWS1());  
  51. //       Endpoint.publish(address2, new PhoneInfoWS1());  
  52.            
  53.          //关闭发布  
  54. //       point.stop();  
  55.           
  56.            
  57.     }  
  58. }  
@WebService(serviceName="PhoneInfoService",targetNamespace="http://PhoneService.web.com/")
//默认服务名会加上Service
public class PhoneInfoWS1 {
	  @WebMethod(operationName="getPhoneInfo")
      public @WebResult(name="phone") Phone getPhoneInfo(@WebParam(name="OSName") String OSName) {
    	  Phone p=new Phone();
		if ("Android".equalsIgnoreCase(OSName)) {
			p.setOS(OSName);
			p.setOwn("Google");
			p.setScale(80);
		}else if("IOS".equalsIgnoreCase(OSName)){
			p.setOS(OSName);
			p.setOwn("Apple");
			p.setScale(14);
		}else if("windows Phone".equalsIgnoreCase(OSName)){
			p.setOS(OSName);
			p.setOwn("Microsoft");
			p.setScale(4);
		}else{
			p.setOS("others");
			p.setOwn("others");
			p.setScale(2);
		}
		return p;
	}
      
      
      //静态,非public方法不会被自动发布
      public static String say(String city){
    	  return "hello"+city;
      }
      
      //屏蔽要发布的方法
      @WebMethod(exclude=true)
      public  String say1(String city){
    	  return "hello"+city;
      }
      public  String say2(String city){
    	  return "hello"+city;
      }
      
      
      //访问时自动生成一个描述文件xml+xsd约束文件
      public static void main(String[] args) {
    	  //implementor要发布的对象,一般是接口的实现类
    	 String address1="http://127.0.0.1/PhoneInfoWS1?WSDL";
//    	 String address2="http://127.0.0.1/PhoneInfoWS2?WSDL";
    	 Endpoint point = Endpoint.publish(address1, new PhoneInfoWS1());
    	 point.toString();
    	 Endpoint.publish(address1, new PhoneInfoWS1());
//    	 Endpoint.publish(address2, new PhoneInfoWS1());
    	 
    	 //关闭发布
//    	 point.stop();
    	
    	 
	}
}



注意:

1.  在类上添加@WebService注解,代表发布一个WebService服务
2. 通过EndPoint(端点服务)发布一个webService。Endpoint也是jdk提供的一个专门用于发布服务的类,它的publish方法接收两个参数,
                 一个是本地的服务地址,二是提供服务的类。它位于javax.xml.ws.*包中。
3. Endpoint.publish(String address, Object implementor) 静态方法在给定地址处针对指定的实现者对象创建并发布端点
4. 默认public修饰的方法自动发布,静态方法不会公布
5. 如果希望某个方法不对外公开,可以在方法上添加@WebMethod(exclude=true),阻止对外公开。
6. 如果一个类上,被添加了@WebService注解,则必须此类至少有一个可以公开的方法,否则将会启动失败。

7.异常处理:
报错:
 com.sun.xml.internal.ws.model.RuntimeModelerException: runtime modeler error: Wrapper class com.web.PhoneService.jaxws.GetPhoneInfo is not found. 
 Have you run APT to generate them?
解决办法:jdk7就可以了


8.测试方法:

    a.利用上面说的wsimport生成本地代理,然后调用里面的代码进行测试就可以了,这里就省略了

    b.更方便的测试是使用Eclipse的Web Services Explorer 或者Myeclipse的SOAP Web Services Explorer进行测试

       把链接:比如 http://127.0.0.1/PhoneInfoWS1?WSDL 放入到浏览器的WSDL地址栏就可以了


     2.2接口发布

[html] view plain copy
print ?
  1. @WebService  
  2. public interface JobService {  
  3.    public String getJobInfo();  
  4. }  
  5.   
  6. /*  
  7.  * 默认只会发布接口的方法,实现类自定义的方法不会被发布了  
  8.  * 接口和实现类都需要加注解修饰  
  9.  *   
  10.  * 联想Spring的注入只需在实现类加入注解即可  
  11.  */  
  12. @WebService(serviceName="JobServiceImplService",  
  13. endpointInterface="com.web.InterfaceService.JobService")  
  14. public class JobServiceImpl implements JobService{  
  15.   
  16.     @Override  
  17.     public String getJobInfo() {  
  18.         // TODO Auto-generated method stub  
  19.         return "java开发|前端开发|数据库开发";  
  20.     }  
  21.       
  22. //  实现类自定义的方法不会被发布  
  23.     public String say(String name){  
  24.         return "hello "+name;  
  25.     }  
  26.       
  27.       
  28.     public static void main(String[] args) {  
  29.         String address="http://127.0.0.1/JobServiceImpl?WSDL";  
  30.         Endpoint.publish(address, new JobServiceImpl());  
  31.         System.out.println(address);  
  32.     }  
  33.   
  34. }  
@WebService
public interface JobService {
   public String getJobInfo();
}

/*
 * 默认只会发布接口的方法,实现类自定义的方法不会被发布了
 * 接口和实现类都需要加注解修饰
 * 
 * 联想Spring的注入只需在实现类加入注解即可
 */
@WebService(serviceName="JobServiceImplService",
endpointInterface="com.web.InterfaceService.JobService")
public class JobServiceImpl implements JobService{

	@Override
	public String getJobInfo() {
		// TODO Auto-generated method stub
		return "java开发|前端开发|数据库开发";
	}
	
//	实现类自定义的方法不会被发布
	public String say(String name){
		return "hello "+name;
	}
	
	
	public static void main(String[] args) {
		String address="http://127.0.0.1/JobServiceImpl?WSDL";
		Endpoint.publish(address, new JobServiceImpl());
		System.out.println(address);
	}

}


3.CXF框架

    Apache CXF 是一个开源的 Services 框架,是XFire和Celtix项目的结合产品,CXF 帮助您来构建和开发 Services 这些 Services 可以支持多种协议,比如:SOAP、POST/HTTP、RESTful HTTP CXF 大大简化了 Service可以天然地和 spring 进行无缝集成。


3.1最简单的接口发布

这里先不与Spring集成,需要的jar包

asm-3.3.jar
commons-logging-1.1.1.jar
cxf-2.4.2.jar
jetty-continuation-7.4.5.v20110725.jar
jetty-http-7.4.5.v20110725.jar
jetty-io-7.4.5.v20110725.jar
jetty-security-7.4.5.v20110725.jar
jetty-server-7.4.5.v20110725.jar
jetty-util-7.4.5.v20110725.jar
neethi-3.0.1.jar
wsdl4j-1.6.2.jar
xmlschema-core-2.0.jar

这里用的是2.4.2的,老版本,不要介意,最新版本3.1.6,可以自行下载

[html] view plain copy
print ?
  1. @WebService  
  2. //声明soap1.2  
  3. //@BindingType(value=SOAPBinding.SOAP12HTTP_BINDING)  
  4.   
  5. public interface LanguageService {  
  6.   
  7.     public  String getLanguage(int num);  
  8.   
  9. }  
  10.   
  11. //开发语言排行榜  
  12. @WebService  
  13. public class LanguageServiceImpl implements LanguageService {  
  14.     
  15.     @Override  
  16.     public String getLanguage(int num) {  
  17.         String language="";  
  18.         switch (num) {  
  19.         case 1:  
  20.             language="java语言";  
  21.             break;  
  22.         case 2:  
  23.             language="C语言";  
  24.             break;  
  25.         case 3:  
  26.             language="Objective-C语言";  
  27.             break;  
  28.         case 4:  
  29.             language="C#语言";  
  30.             break;  
  31.         default:  
  32.             language="没有找到你要排名的语言";  
  33.             break;  
  34.         }  
  35.         return language;  
  36.     }  
  37.       
  38.     /*  
  39.      * 方式1:ServerFactoryBean  
  40.      * 不支持注解,就算你添加了注解也不起作用  
  41.      * 所以你不能修改服务名,方法名,参数名,工作空间等  
  42.      * 另外不支持拦截器  
  43.      * 方式2:JaxWsServerFactoryBean为ServerFactoryBean的子类(功能扩展)  
  44.      * 特点:  
  45.      * 1、支持注解,如果你没有使用@webService,运行后,是不会发布方法的。。,所以注解必须加  
  46.      * 如果有接口实现,只需要在接口加上注解即可,命名注解也要在接口里面做  
  47.      * 这跟之前的纯java开发webservice有些不一样,纯java开发接口和实现类要改名必须都加上注解才行  
  48.      * 2、支持拦截器  
  49.      * 3、生成的wsdl更加规范  
  50.      * 两者的wsdl区别:  
  51.      *     a.方式1 默认不加servcie  方式2:默认加Service,比如<wsdl:definitions name="LanguageServiceService"   
  52.      *     b.方式1 元素前缀 xsd    方式2 元素前缀xs  
  53.      *     c.方式1   
  54.              <wsdl:portType name="LanguageServicePortType">  
  55.              方式2  
  56.              <wsdl:portType name="LanguageService">没有加PortType  
  57.                
  58.         webService访问流程:  
  59.         1.首先进行握手,检查本地代理与服务端的wsdl是否一致,采用的是get请求验证  
  60.         2.采用post请求,封装请求参数到xml中,采用soap通信,将这个请求xml传输到服务端  
  61.         3.封装结果为xml,采用soap通信返回xml,再到客户端解析得到方法的返回值  
  62.      */  
  63.       
  64.       
  65.     //方式1:不通过注解发布  
  66.     //这种方式没有添加webService注解,也就是说没有注解也可以发布webService服务,  
  67. //    但是这种方式不是很规范,比如我们不可以通过注解的方式来修改WSDL的标签信息  
  68.     private static void publishServie1(){  
  69.         LanguageService languageService=new LanguageServiceImpl();  
  70.         ServerFactoryBean bean=new ServerFactoryBean();  
  71.         //Endpoint :地址  , 实现对象  
  72. //      bean.setAddress("http://192.168.8.178:9999/ws/cxf/languangeService");  
  73.         bean.setAddress("http://127.0.0.1:9999/ws/cxf/languangeService?WSDL");  
  74.         //注册服务器地址和端口  
  75.         bean.setServiceClass(LanguageService.class);//对外提供webservcie的业务类或者接口  
  76.         //注册哪个实现类提供服务  
  77.         bean.setServiceBean(languageService);//服务的实现bean  
  78.         Server server = bean.create();//创建,发布webservice  
  79.         //10秒有效  
  80. //      Thread.sleep(1*10*1000);  
  81. //      server.stop();  
  82. //      System.exit(0);  
  83.     }  
  84.       
  85.       
  86.     //JaxWsServerFactoryBean是ServerFactoryBean的子类  
  87.     //可以提供拦截器  
  88.     private static void publishServie2(){  
  89.         JaxWsServerFactoryBean bean=new JaxWsServerFactoryBean();  
  90.         //地址WSDL加不加都可以,访问时加上就可以了,不加端口也可以发布  
  91.         bean.setAddress("http://127.0.0.1:8888/ws/cxf/languangeService?WSDL");  
  92. //      bean.setAddress("http://127.0.0.1/ws/cxf/languangeService?WSDL");  
  93.         //设置服务接口  
  94.         bean.setServiceClass(LanguageService.class);  
  95.         //设置服务的类  
  96.         bean.setServiceBean(new LanguageServiceImpl());  
  97.           
  98.         //输入信息拦截器  
  99.         bean.getInInterceptors().add(new LoggingInInterceptor());  
  100.         //输出信息拦截器  
  101.         bean.getOutInterceptors().add(new LoggingOutInterceptor());  
  102.           
  103.         Server server = bean.create();  
  104.     }  
  105.       
  106.     public static void main(String[] args) throws Exception{  
  107. //      publishServie1();  
  108.         publishServie2();  
  109.     }  
  110. }  
@WebService
//声明soap1.2
//@BindingType(value=SOAPBinding.SOAP12HTTP_BINDING)

public interface LanguageService {

	public  String getLanguage(int num);

}

//开发语言排行榜
@WebService
public class LanguageServiceImpl implements LanguageService {
  
    @Override
	public String getLanguage(int num) {
    	String language="";
    	switch (num) {
		case 1:
			language="java语言";
			break;
		case 2:
			language="C语言";
			break;
		case 3:
			language="Objective-C语言";
			break;
		case 4:
			language="C#语言";
			break;
		default:
			language="没有找到你要排名的语言";
			break;
		}
		return language;
	}
    
    /*
     * 方式1:ServerFactoryBean
     * 不支持注解,就算你添加了注解也不起作用
     * 所以你不能修改服务名,方法名,参数名,工作空间等
     * 另外不支持拦截器
     * 方式2:JaxWsServerFactoryBean为ServerFactoryBean的子类(功能扩展)
     * 特点:
     * 1、支持注解,如果你没有使用@webService,运行后,是不会发布方法的。。,所以注解必须加
     * 如果有接口实现,只需要在接口加上注解即可,命名注解也要在接口里面做
     * 这跟之前的纯java开发webservice有些不一样,纯java开发接口和实现类要改名必须都加上注解才行
     * 2、支持拦截器
     * 3、生成的wsdl更加规范
     * 两者的wsdl区别:
     *     a.方式1 默认不加servcie  方式2:默认加Service,比如
             方式2
             没有加PortType
             
        webService访问流程:
        1.首先进行握手,检查本地代理与服务端的wsdl是否一致,采用的是get请求验证
        2.采用post请求,封装请求参数到xml中,采用soap通信,将这个请求xml传输到服务端
        3.封装结果为xml,采用soap通信返回xml,再到客户端解析得到方法的返回值
     */
    
    
    //方式1:不通过注解发布
    //这种方式没有添加webService注解,也就是说没有注解也可以发布webService服务,
//    但是这种方式不是很规范,比如我们不可以通过注解的方式来修改WSDL的标签信息
    private static void publishServie1(){
    	LanguageService languageService=new LanguageServiceImpl();
		ServerFactoryBean bean=new ServerFactoryBean();
		//Endpoint :地址  , 实现对象
//		bean.setAddress("http://192.168.8.178:9999/ws/cxf/languangeService");
		bean.setAddress("http://127.0.0.1:9999/ws/cxf/languangeService?WSDL");
		//注册服务器地址和端口
		bean.setServiceClass(LanguageService.class);//对外提供webservcie的业务类或者接口
		//注册哪个实现类提供服务
		bean.setServiceBean(languageService);//服务的实现bean
		Server server = bean.create();//创建,发布webservice
		//10秒有效
//		Thread.sleep(1*10*1000);
//		server.stop();
//		System.exit(0);
    }
    
    
    //JaxWsServerFactoryBean是ServerFactoryBean的子类
    //可以提供拦截器
    private static void publishServie2(){
    	JaxWsServerFactoryBean bean=new JaxWsServerFactoryBean();
    	//地址WSDL加不加都可以,访问时加上就可以了,不加端口也可以发布
    	bean.setAddress("http://127.0.0.1:8888/ws/cxf/languangeService?WSDL");
//    	bean.setAddress("http://127.0.0.1/ws/cxf/languangeService?WSDL");
    	//设置服务接口
    	bean.setServiceClass(LanguageService.class);
    	//设置服务的类
    	bean.setServiceBean(new LanguageServiceImpl());
    	
    	//输入信息拦截器
    	bean.getInInterceptors().add(new LoggingInInterceptor());
    	//输出信息拦截器
    	bean.getOutInterceptors().add(new LoggingOutInterceptor());
    	
    	Server server = bean.create();
    }
    
	public static void main(String[] args) throws Exception{
//		publishServie1();
		publishServie2();
	}
}

3.2 结合Spring发布服务

      这里重点是如何配置发布服务,业务逻辑仅仅是演示(辅助),不必参考

     要发布的服务:保存和根据姓名查询员工

    saveEmployee          findEmployeeByName

    步骤:

       3.2.1.导包cxf2.7.18里面的所有jar包 ,其中jetty包不需要,因为应用是部署在tomcat里面

       3.2. 2.建实体类,DB类(模拟)

    

[html] view plain copy
print ?
  1. public class Employee {  
  2.     private String name;  
  3.     private Integer age;  
  4.       
  5.     @DateTimeFormat(pattern="yyyy-MM-dd")  
  6.     private Date birthday;  
  7.   
  8.     public Employee() {  
  9.         super();  
  10.     }  
  11.   
  12.     public Employee(String name, Integer age, Date birthday) {  
  13.         super();  
  14.         this.name = name;  
  15.         this.age = age;  
  16.         this.birthday = birthday;  
  17.     }  
  18.   
  19.     public String getName() {  
  20.         return name;  
  21.     }  
  22.   
  23.     public void setName(String name) {  
  24.         this.name = name;  
  25.     }  
  26.   
  27.     public Integer getAge() {  
  28.         return age;  
  29.     }  
  30.   
  31.     public void setAge(Integer age) {  
  32.         this.age = age;  
  33.     }  
  34.   
  35.     public Date getBirthday() {  
  36.         return birthday;  
  37.     }  
  38.   
  39.     public void setBirthday(Date birthday) {  
  40.         this.birthday = birthday;  
  41.     }  
  42.   
  43.     @Override  
  44.     public String toString() {  
  45.         return "Employee [name=" + name + "age=" + age + "birthday="  
  46.                 + birthday + "]";  
  47.     }  
  48.   
  49. }  
public class Employee {
	private String name;
	private Integer age;
	
	@DateTimeFormat(pattern="yyyy-MM-dd")
	private Date birthday;

	public Employee() {
		super();
	}

	public Employee(String name, Integer age, Date birthday) {
		super();
		this.name = name;
		this.age = age;
		this.birthday = birthday;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Integer getAge() {
		return age;
	}

	public void setAge(Integer age) {
		this.age = age;
	}

	public Date getBirthday() {
		return birthday;
	}

	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}

	@Override
	public String toString() {
		return "Employee [name=" + name + ", age=" + age + ", birthday="
				+ birthday + "]";
	}

}
[html] view plain copy
print ?
  1. //运行时如果报错Unsupported major.minor version 51.0  
  2. //这说明jdk版本不对,即tomcat的jdk版本跟项目版本不一致  
  3. @Repository  
  4. public class EmployeeDB {  
  5.     public EmployeeDB(){}  
  6.    private static List<Employee> list=new ArrayList<Employee>();  
  7.       
  8.     static{  
  9.         list.add(new  Employee("小米", 12, new Date()));  
  10.     }  
  11.       
  12.     public void save(Employee employee){  
  13.         list.add(employee);  
  14.     }  
  15.       
  16.     public Employee findByName(String name){  
  17.           
  18.         if (list.size()>0) {  
  19.             for(Employee e:list){  
  20.                 if (e.getName().equals(name)) {  
  21.                     return e;  
  22.                 }  
  23.             }  
  24.         }  
  25.         return null;  
  26.     }  
  27.       
  28.     public List<Employee> findAll(){  
  29.         return list;  
  30.     }  
  31.       
  32.       
  33.     public void deleteByName(String name) throws Exception{  
  34.         if (name.length()==0||name==null) {  
  35.           throw new Exception("删除用户异常");  
  36.         }  
  37.           
  38.         for (int i = 0; i < list.size(); i++) {  
  39.             if (name.equals(list.get(i).getName())) {  
  40.                 list.remove(list.get(i));  
  41.                 break;  
  42.             }  
  43.         }  
  44.     }  
  45. }   
//运行时如果报错Unsupported major.minor version 51.0
//这说明jdk版本不对,即tomcat的jdk版本跟项目版本不一致
@Repository
public class EmployeeDB {
	public EmployeeDB(){}
   private static List list=new ArrayList();
	
	static{
		list.add(new  Employee("小米", 12, new Date()));
	}
	
	public void save(Employee employee){
		list.add(employee);
	}
	
	public Employee findByName(String name){
		
		if (list.size()>0) {
			for(Employee e:list){
				if (e.getName().equals(name)) {
					return e;
				}
			}
		}
		return null;
	}
	
	public List findAll(){
		return list;
	}
	
	
	public void deleteByName(String name) throws Exception{
		if (name.length()==0||name==null) {
		  throw new Exception("删除用户异常");
		}
		
		for (int i = 0; i < list.size(); i++) {
			if (name.equals(list.get(i).getName())) {
				list.remove(list.get(i));
				break;
			}
		}
	}
} 

    3.2.3.建立服务类

    

[html] view plain copy
print ?
  1. @WebService(serviceName="EmployeeService")  
  2. public interface EmployeeService {  
  3.       
  4.    public void saveEmployee(@WebParam(name="employee")Employee employee );  
  5.      
  6.    public @WebResult(name="Employee")Employee  findEmployeeByName(@WebParam(name="name")String name);  
  7. }  
  8.   
  9.   
  10. public class EmployeeServiceImpl implements EmployeeService{  
  11.   
  12.     @Autowired  
  13.     private EmployeeDB db;  
  14.       
  15.     @Override  
  16.     public void saveEmployee(Employee employee) {  
  17.         System.out.println("EmployeeDB:"+db);  
  18.         db.save(employee);  
  19.     }  
  20.   
  21.     @Override  
  22.     public Employee findEmployeeByName(String name) {  
  23.         if (name.length()==0||name==null) {  
  24.             return null;  
  25.         }  
  26.           
  27.         return  db.findByName(name);  
  28.     }  
  29.   
  30. }  
@WebService(serviceName="EmployeeService")
public interface EmployeeService {
	
   public void saveEmployee(@WebParam(name="employee")Employee employee );
   
   public @WebResult(name="Employee")Employee  findEmployeeByName(@WebParam(name="name")String name);
}


public class EmployeeServiceImpl implements EmployeeService{

	@Autowired
	private EmployeeDB db;
	
	@Override
	public void saveEmployee(Employee employee) {
		System.out.println("EmployeeDB:"+db);
		db.save(employee);
	}

	@Override
	public Employee findEmployeeByName(String name) {
		if (name.length()==0||name==null) {
			return null;
		}
		
		return	db.findByName(name);
	}

}
 3.2. 4.写页面,写Servlet(如果单纯为了测试发布的服务,这些可以不需要)

   

[html] view plain copy
print ?
  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
  2.   
  3.   
  4. >  
  5. <html>  
  6.   <head>  
  7.       
  8.     <title>添加员工title>  
  9.     <meta http-equiv="pragma" content="no-cache">  
  10.     <meta http-equiv="cache-control" content="no-cache">  
  11.     <meta http-equiv="expires" content="0">      
  12.     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">  
  13.     <meta http-equiv="description" content="This is my page">  
  14.       
  15.   head>  
  16.     
  17.   <body>  
  18.        <form action="${pageContext.request.contextPath}/AddServlet" method="post">  
  19.             用户名:<input type="text" name="name" /><br/>  
  20.             年龄:<input type="text" name="age" /><br/>  
  21.             生日:<input type="text" name="birthday" /><br/>  
  22.             <input type="submit" value="提交" />  
  23.       form>  
  24.   
  25.   body>  
  26. html>  
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>




  
    
    添加员工
	
	
	    
	
	
	
  
  
  
       
用户名:
年龄:
生日:

[html] view plain copy
print ?
  1. public class AddServlet extends HttpServlet {  
  2.   
  3.     private EmployeeService employeeService;  
  4.       
  5.     @Override  
  6.     public void init() throws ServletException {  
  7.         WebApplicationContext context=WebApplicationContextUtils.getWebApplicationContext(this.getServletContext());  
  8.         //得到的是实现类对象  
  9.         employeeService=(EmployeeService) context.getBean("employeeService");  
  10.         System.out.println("employeeService:"+employeeService);  
  11.     }  
  12.       
  13.     public void doGet(HttpServletRequest request, HttpServletResponse response)  
  14.             throws ServletException, IOException {  
  15.         response.setContentType("text/html;charset=utf-8");  
  16.         String name=request.getParameter("name");  
  17.         String age=request.getParameter("age");  
  18.         String birthday=request.getParameter("birthday");  
  19.           
  20.           
  21.         Employee employee=new Employee();  
  22.         employee.setName(name);  
  23.         employee.setAge(Integer.parseInt(age));  
  24.         employee.setBirthday(DateUtil.stringToDate(birthday, "yyyy-MM-dd"));  
  25.           
  26.         employeeService.saveEmployee(employee);  
  27.           
  28.         //检查是否存进去进去了  
  29.         EmployeeDB db=new EmployeeDB();  
  30.         System.out.println("db.size():"+db.findAll().size());  
  31.     }  
  32.   
  33.   
  34.     public void doPost(HttpServletRequest request, HttpServletResponse response)  
  35.             throws ServletException, IOException {  
  36.          doGet(request, response);    
  37.     }  
  38.       
  39.       
  40. }  
public class AddServlet extends HttpServlet {

    private EmployeeService employeeService;
    
	@Override
	public void init() throws ServletException {
		WebApplicationContext context=WebApplicationContextUtils.getWebApplicationContext(this.getServletContext());
		//得到的是实现类对象
		employeeService=(EmployeeService) context.getBean("employeeService");
		System.out.println("employeeService:"+employeeService);
	}
	
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
        response.setContentType("text/html;charset=utf-8");
        String name=request.getParameter("name");
        String age=request.getParameter("age");
        String birthday=request.getParameter("birthday");
		
        
        Employee employee=new Employee();
        employee.setName(name);
        employee.setAge(Integer.parseInt(age));
        employee.setBirthday(DateUtil.stringToDate(birthday, "yyyy-MM-dd"));
        
        employeeService.saveEmployee(employee);
        
        //检查是否存进去进去了
        EmployeeDB db=new EmployeeDB();
        System.out.println("db.size():"+db.findAll().size());
	}


	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
         doGet(request, response);  
	}
	
	
}

3.2.5.配置applicationContext.xml和web.xml

[html] view plain copy
print ?
  1. xml version="1.0" encoding="UTF-8"?>  
  2. <beans  
  3.     xmlns="http://www.springframework.org/schema/beans"  
  4.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  5.     xmlns:p="http://www.springframework.org/schema/p"  
  6.       xmlns:context="http://www.springframework.org/schema/context"  
  7.       xmlns:jaxws="http://cxf.apache.org/jaxws"  
  8.     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd  
  9.     http://www.springframework.org/schema/context  
  10.     http://www.springframework.org/schema/context/spring-context.xsd  
  11.     http://cxf.apache.org/jaxws   
  12.     http://cxf.apache.org/schemas/jaxws.xsd">  
  13.       
  14. <context:component-scan base-package="com.demo.*">context:component-scan>  
  15.   
  16. <bean id="employeeService"  class="com.demo.webService.EmployeeServiceImpl">bean>  
  17.   
  18.   
  19.   

    web.xml

    [html] view plain copy
    print ?
    1. xml version="1.0" encoding="UTF-8"?>  
    2. <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">  
    3.   <display-name>CXFDemo1display-name>  
    4.   <welcome-file-list>  
    5.     <welcome-file>index.jspwelcome-file>  
    6.   welcome-file-list>  
    7.     
    8.   
    9.   <servlet>  
    10.     <servlet-name>cxfservlet-name>  
    11.     <servlet-class>org.apache.cxf.transport.servlet.CXFServletservlet-class>  
    12.     <load-on-startup>1load-on-startup>  
    13.   servlet>  
    14.   <servlet>  
    15.     <servlet-name>AddServletservlet-name>  
    16.     <servlet-class>com.demo.web.AddServletservlet-class>  
    17.   servlet>  
    18.   
    19.     
    20.   <servlet-mapping>  
    21.      <servlet-name>cxfservlet-name>  
    22.      <url-pattern>/ws/*url-pattern>  
    23.   servlet-mapping>  
    24.     
    25.     
    26.   <servlet-mapping>  
    27.     <servlet-name>AddServletservlet-name>  
    28.     <url-pattern>/AddServleturl-pattern>  
    29.   servlet-mapping>  
    30.     
    31.   <listener>  
    32.     <listener-class>org.springframework.web.context.ContextLoaderListenerlistener-class>  
    33.   listener>  
    34.   <context-param>  
    35.     <param-name>contextConfigLocationparam-name>  
    36.     <param-value>classpath:applicationContext.xmlparam-value>  
    37.   context-param>  
    38. web-app>  
    
    
      CXFDemo1
      
        index.jsp
      
      
    
      
        cxf
        org.apache.cxf.transport.servlet.CXFServlet
        1
      
      
        AddServlet
        com.demo.web.AddServlet
      
    
      
      
         cxf
         /ws/*
      
      
      
      
        AddServlet
        /AddServlet
      
      
      
        org.springframework.web.context.ContextLoaderListener
      
      
        contextConfigLocation
        classpath:applicationContext.xml
      
    


    3.2.6.工具类

    [html] view plain copy
    print ?
    1. public class DateUtil {  
    2.   
    3.     private DateUtil() {  
    4.     }  
    5.   
    6.     public static String dateToString(Date d, String format) {  
    7.   
    8.         return new SimpleDateFormat(format).format(d);  
    9.     }  
    10.       
    11.     public static Date stringToDate(String s, String format) {  
    12.         try {  
    13.             return new SimpleDateFormat(format).parse(s);  
    14.         } catch (ParseException e) {  
    15.             e.printStackTrace();  
    16.         }  
    17.         return null;  
    18.     }  
    19.   
    20. }  
    public class DateUtil {
    
    	private DateUtil() {
    	}
    
    	public static String dateToString(Date d, String format) {
    
    		return new SimpleDateFormat(format).format(d);
    	}
    	
    	public static Date stringToDate(String s, String format) {
    		try {
    			return new SimpleDateFormat(format).parse(s);
    		} catch (ParseException e) {
    			e.printStackTrace();
    		}
    		return null;
    	}
    
    }


    3.2.7.访问:http://localhost:8080/CXFDemo2/ws


    4.Axis2发布服务

        4.1比较

        Axis2是从Axis1.x系列发展而来。CXF则是XFire和Celtix项目的结合产品。Axis2是从底层全部重新实现,使用了新的扩展性更好模块架构。 CXF也重新的深化了XFire和Celtix这两个开发工具。
    1.CXF支持 WS-Addressing,WS-Policy, WS-RM, WS-Security和WS-I Basic Profile。Axis2不支持WS-Policy,现在应该支持了。
    2. CXF可以很好支持Spring。Axis2不能(没测试过,现在应该可以吧,待测。。)
    3. AXIS2支持更广泛的数据并对,如XMLBeans,JiBX,JaxMe和JaxBRI和它自定义的数据绑定ADB。注意JaxME和JaxBRI都还是试验性的。CXF只支持JAXB和Aegis。
    4. Axis2支持多语言-除了Java,他还支持C/C++版本
    如何抉择: 
    1、如果应用程序需要多语言的支持,Axis2 应当是首选了; 
    2、如果应用程序是遵循 Spring 哲学路线的话,Apache CXF 是一种更好的选择,特别对嵌入式的 Web Services 来说; 

       

    目前asix2最新版本1.7.1

        4.2安装插件

         4.2.1Eclipse

         axis2-eclipse-codegen-plugin-1.7.1.zip
         axis2-eclipse-service-plugin-1.7.1.zip

         解压的jar包放入Eclipse的dropins目录

         4.2.2Myeclipse

         axis2-eclipse-codegen-wizard.zip
         axis2-eclipse-service-archiver-wizard.zip
         解压放入到Myeclipse的dropins目录


        4.3  实现方式有很多

       这里简单说明下最快速的2种方式,Eclipse实现

         方式1:不使用插件实现

             1.配置环境变量(不是必须的)

           

              2.配置webService环境

           

           

             2.建立一个动态web项目

           

            

        

       

       


         方式2:使用插件实现

         建一个普通的动态项目,不选择webService环境

         这个实现网上有很多,实现参考:http://blog.csdn.NET/wangchangpen62/article/details/45171001

         好了,先写到这吧

         以上做了个简单的小结,深入应用还待学习。。。。





0
0
 
 

我的同类文章

JAVA(5)
http://blog.csdn.net
  • 三目运算符test2016-09-08阅读57
  • Xstream 简单入门2016-05-08阅读2790
  • java项目与javaweb项目导入jar包的区别2016-02-15阅读1175
  • Maven简单了解2016-05-11阅读1015
  • web.xml及 web-fragment.xml模板2016-03-17阅读635

你可能感兴趣的:(#,webService)