`
543334061
  • 浏览: 11290 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

webservice 远程调用

 
阅读更多

 

  

webservice 远程调用技术

1.1 webservice 组成及原理:

      

          Webservice是一种使用http传输SOAP协议的数据远程调用技术

     wsdl:是一个xml文件  简单的说就是webservice的说明书

      soap:简单对象访问协议

     uudi:一种目录 (不重要)

   xml文件的阅读规则:

  

 targetNamespaces  名称空间

 portType 标签下的 name属性是实现类  massage属性是方法名称

 service 标签下的 name属性是service

1.2 webservice 的入门案例:

                           服   务   端 

   第一步:  导入jar包

/**
 * 创建接口
 * @author Administrator
 *
 */
public interface WeatherInterface {
  public String getWeather(String str);
}

  第二步:

/**
 * 创建实现类  实现类要加 @WebService 表签
 * @author Administrator
 *
 */
@WebService
public class WeatherInterfaceImpl implements WeatherInterface {

	@Override
	public String getWeather(String str) {
		System.out.println("我来了。。。。");
		return str;
	}
}

  第三步:

import javax.xml.ws.Endpoint;
/**
 * 发布服务
 * @author Administrator
 *
 */
public class WeatherServer {
  public static void main(String[] args) {
       //第一个参数服务地址
       //第二个参数实现类
	Endpoint.publish("http://127.0.0.1:12345/weather", new WeatherInterfaceImpl());
}
}

  第四步:测试服务是否发布成功    打开wsdl 阅读xml 文件

                测试地址:http://127.0.0.1:12345/weather?wsdl

                             客  户  端

   说明:dom 中

   命令wsimportjdk提供根据WSDL地址生成客户端代码的工具

   命令wsimport位置%JAVA_HOME%/bin

   命令wsimport常用的参数:

     -d指定生成*.class默认参数

     -s,指定生成*.java文件

     -p,指定代码生成包名,如果不加该参数,默认包名WSDL命名空间的倒序

              命令wsimport仅支持SOAP1.1客户端生成

 第一步:wsimport生成代码   wsimport  -s  .  http://127.0.0.1:weather?wsdl              建立一个项目 导入生成的代码 导入jar包

  第二步:

import test00.WeatherInterfaceImpl;
import test00.WeatherInterfaceImplService;
/**
 * 客户端
 * @author Administrator
 */
public class WeatherClient {
  public static void main(String[] args) {
	//创建service对象
	WeatherInterfaceImplService weatherInterfaceService=new WeatherInterfaceImplService();
	//获取实现类
	WeatherInterfaceImpl weatherInterfaceImpl=weatherInterfaceService.getPort(WeatherInterfaceImpl.class);
	//调用方法
	String weather = weatherInterfaceImpl.getWeather("晴");
	System.out.println(weather);
}
}

 

1.3 webservice 的四种客户端调用:

   说明:公网地址

     http://www.webxml.com.cn/zh_cn/web_services.aspx

     wsimport -s . http://ws.webxml.com.cn/WebServices/WeatherWS.asmx?wsdl   生成查询天气的代码

   建一个项目  导入生成的代码  导入jar包

   第一种方式:

 

import cn.com.webxml.ArrayOfString;
import cn.com.webxml.WeatherWS;
import cn.com.webxml.WeatherWSSoap;
/**
 * 入门案例中就是用的这种
 * @author Administrator
 */
public class demo01 {

	public static void main(String[] args) {
		WeatherWS weatherWS=new WeatherWS();
		WeatherWSSoap weatherWSSoap = weatherWS.getPort(WeatherWSSoap.class);
		ArrayOfString weather = weatherWSSoap.getWeather("北京", "");
		List<String> list = weather.getString();
		StringBuffer yp=new StringBuffer();
		for(String str:list){
			yp.append(str+" ");
		}
		System.out.println(yp);
	}
}

  第二种方式:

 

/**
 * 用服务地址获取实现类  灵活
 * @author Administrator
 */
public class demo02 {
	
    public static void main(String[] args) throws MalformedURLException {
    	//服务地址
	URL url=new URL("http://ws.webxml.com.cn/WebServices/WeatherWS.asmx");
	//第一个参数名称空间   第二个参数是service标签的name属性
    	QName name=new QName("http://WebXml.com.cn/","WeatherWS");
    	Service service=Service.create(url, name);
    	//获取实现类
    	WeatherWSSoap weatherWSSoap = service.getPort(WeatherWSSoap.class);
    	//调用方法
    	ArrayOfString weather = weatherWSSoap.getWeather("原平", "");
    	List<String> list = weather.getString();
    	for(String str:list){
    		System.out.println(str);
    	}
	}
}

  第三种方式:

 

/**
 * 利用HttpURLConnection实现调用
 * @author Administrator
 */
public class demo03 {
    public static void main(String[] args) throws Exception {
    	//服务地址
	URL url=new URL("http://ws.webxml.com.cn/WebServices/WeatherWS.asmx");
	//打开链接
	HttpURLConnection connection=(HttpURLConnection)url.openConnection();
	//设置请求方式
	connection.setRequestMethod("POST");
	//设置mime类型  这是soap1.1的    soap1.2的是 "application/soap+xml;chartset=utf-8"
	connection.setRequestProperty("content-type", "text/xml;charset=utf-8");
	//设置输入输出
	connection.setDoOutput(true);
	connection.setDoInput(true);
	//输出请求体
	OutputStream outputStream = connection.getOutputStream();
	outputStream.write(getXml("太原").getBytes());
	//如果响应成功
	int i = connection.getResponseCode();
	if(i==200){
		InputStream inputStream = connection.getInputStream();
		BufferedReader reader=new BufferedReader(new InputStreamReader(inputStream));
		String but=null;
		StringBuilder der=new StringBuilder();
		while(null!=(but=reader.readLine())){
			der.append(but);
	         }
		byte[] bytes = der.toString().getBytes();
		System.out.println(new String(bytes,"utf-8"));
		reader.close();
		inputStream.close();
		}
		outputStream.close();
	}
    //请求体
    public static String getXml(String str){
    	String xmlSpoat="<?xml version=\"1.0\" encoding=\"utf-8\"?>"
		          +" <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/\">"
			  +"  <soap:Body>"
			  +"    <getWeather xmlns=\"http://WebXml.com.cn/\">"
		          +"      <theCityCode>"+str+"</theCityCode>"
		          +"      <theUserID></theUserID>"
			  +"    </getWeather>"
		          +"  </soap:Body>"
		       +"</soap:Envelope>";
    	return xmlSpoat;
    }
}

  第四种方式:基于ajax

 

<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<script >
			function getMobile(){
				alert(999);
				var xml=new XMLHttpRequest();
				
				xml.open("post","http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl",true);
				xml.setRequestHeader("context-type","text/html;charset=utf-8");
				xml.onreadystatechange=function(){
					if(xml.status==200 && xml.readyState==4){
						var div=document.getElementById("div");
						div.innerHTML(xml.responseText);
					}
				}
				var soapXml='<?xml version="1.0" encoding="utf-8"?>'
       						+'<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/">'
							+'	  <soap:Body>'
							+'	    <getMobileCodeInfo xmlns="http://WebXml.com.cn/">'
							+'	      <mobileCode>"+document.getElementById("dd")+"</mobileCode>'
							+'	      <userID></userID>'
							+'	    </getMobileCodeInfo>'
							+'	  </soap:Body>'
							+'	</soap:Envelope>';
				xml.send(soapXml);
			}
			
		</script>
	</head>
	<body>
		电话:<input type="text" id="dd" /><br/>
		<input type="button" onclick="getMobile()" /><br/>
		<div id="div"></div>
	</body>
</html>

 

1.3 webservice 基于cxf框架:

   1.3.1 cxf的介绍

    cxf:一个开源的webservice框架,提供很多成熟的功能,帮助我们快速开发

    cxf:支持的协议:SOAP1.1/1.2REST

               cxf:支持的数据格式:XMLJSON(仅在REST支持)

  1.3.2 cxf的下载  安装

         http://cxf.apache.org/download.html

            第一步:安装前必须安装jdk 最好是1.7版本的  配置jdk的环境变量

            第二步: 解压下载完毕的apache-cxf-2.7.11

            第三步:配置cxf的环境变量

        



 

 

          第四步:
测试是否配置成功在一个新的cmd窗口中输入wsdl2java -h

      

    
1.3.3 cxf服务端和客户端代码

                 服    务    端     导入jar包

     第一步:

/**
 * 接口  @BindingType(SOAPBinding.SOAP12HTTP_BINDING)  
 * 说明是soap1.2
 * @author Administrator
 */
@WebService
@BindingType(SOAPBinding.SOAP12HTTP_BINDING)
public interface WeatherInterface {
   public String getWeather(String str);
}

   第二步: 

/**
 * 实现类
 * @author Administrator
 */
public class WeatherInterfaceImpl implements WeatherInterface {
	public String getWeather(String str) {
		System.out.println("我来了。。。。");
		return str;
	}
}

    第三步:

/**
 * 基于cxf 的发布服务
 * @author Administrator
 */
public class WeatherServer {
   public static void main(String[] args) {
	  JaxWsServerFactoryBean factoryBean=new JaxWsServerFactoryBean();
	  factoryBean.setServiceClass(WeatherInterface.class);
	  factoryBean.setServiceBean(new WeatherInterfaceImpl());
	  //设置服务地址
	  factoryBean.setAddress("http://127.0.0.1:1314/weather");
	  //发布
	  factoryBean.create();
}
}

 

                     客    户    端

     说明:

    wsdl2java命令生成客户端代码
    命令wsdl2javaCXF提供的根据WSDL地址生成客户端代码的工具

    命令wsdl2java位置%CXF_HOME%\bin

    命令wsdl2java常用参数:

                  -d,生成java代码,指定代码的存放目录

                 -p指定代码生成包名,不指定该参数,默认包名WSDL命名空间的倒序

    命令wsdl2java支持SOAP1.1SOAP1.2生成

  

             E:\workspace\wsimport\src>wsdl2java  -p  cn.itcast.cxf -d . http://127.0.0.1:12345/weather?wsd

     建一个新项目 导入生成的代码 导入jar包

     

/**
 * 客户端 使用JaxWsProxyFactoryBean类获取
 * @author Administrator
 *
 */
public class WeatherClient {
    public static void main(String[] args) {
		JaxWsProxyFactoryBean factoryBean=new JaxWsProxyFactoryBean();
		factoryBean.setServiceClass(WeatherInterface.class);
		factoryBean.setAddress("http://127.0.0.1:1314/weather?wsdl");
		//获取接口
		WeatherInterface weatherInterface = factoryBean.create(WeatherInterface.class);
		//调用方法
		String weather = weatherInterface.getWeather("小风吹的凉爽");
		System.out.println(weather);
	}
}

 1.3.4 cxf与spring的整合

      服务端:建一个项目 导入jar包
     第一步   web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
	xmlns="http://java.sun.com/xml/ns/javaee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <display-name></display-name>
  <!-- 加载applicationContext.xml -->
  <context-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:applicationContext.xml</param-value>
  </context-param>
  	<listener>
  	   <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  	</listener>
  	
  	<!-- cxf服务 -->
  	<servlet>
  	   <servlet-name>cxf</servlet-name>
  	   <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
  	</servlet>
  	<servlet-mapping>
  	   <servlet-name>cxf</servlet-name>
  	   <url-pattern>/ws/*</url-pattern>
  	</servlet-mapping>
  	
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>
   第二步: config下面的applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxws="http://cxf.apache.org/jaxws"
	xmlns:jaxrs="http://cxf.apache.org/jaxrs" xmlns:cxf="http://cxf.apache.org/core"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
				            http://www.springframework.org/schema/beans/spring-beans.xsd
				            http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd
				            http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd
				            http://cxf.apache.org/core http://cxf.apache.org/schemas/core.xsd">
	<!-- <jaxws:server>发布服务  -->
	<jaxws:server address="/weather" serviceClass="cn.xebest.weather.WeatherInterface">
		<jaxws:serviceBean>
			<ref bean="weatherInterface"/>
		</jaxws:serviceBean>
		
		<jaxws:inInterceptors>
			<ref bean="inInterceptor"/>
		</jaxws:inInterceptors>
		<jaxws:outInterceptors>
			<ref bean="outInterceptor"/>
		</jaxws:outInterceptors>
	</jaxws:server>
	<!-- 配置拦截器 -->
	<bean id="inInterceptor" class="org.apache.cxf.interceptor.LoggingInInterceptor"/>
	<bean id="outInterceptor" class="org.apache.cxf.interceptor.LoggingOutInterceptor"/>
	
	<!-- 配置实现类的bean -->
	<bean id="weatherInterface" class="cn.xebest.weather.WeatherInterfaceImpl"/>
	
</beans>
  第三步:接口
/**
 * 接口  @BindingType(SOAPBinding.SOAP12HTTP_BINDING)  
 * 说明是soap1.2
 * @author Administrator
 */
@WebService
@BindingType(SOAPBinding.SOAP12HTTP_BINDING)
public interface WeatherInterface {
   public String getWeather(String str);
}
   第四步:实现类
/**
 * 实现类
 * @author Administrator
 */
public class WeatherInterfaceImpl implements WeatherInterface {
	public String getWeather(String str) {
		System.out.println("我来了。。。。");
		return str;
	}
}
   
  客户端:
   在dom 中 用命令 wsdl2java  生成代码
   建一个项目 导入生成的代码 导入jar包
  第一步: config 下的 applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxws="http://cxf.apache.org/jaxws"
	xmlns:jaxrs="http://cxf.apache.org/jaxrs" xmlns:cxf="http://cxf.apache.org/core"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
				            http://www.springframework.org/schema/beans/spring-beans.xsd
				            http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd
				            http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd
				            http://cxf.apache.org/core http://cxf.apache.org/schemas/core.xsd">
	<jaxws:client id="weatherInterface" address="http://127.0.0.1:8090/webservice00/ws/weather?wsdl"
	 serviceClass="cn.xebest.weather.WeatherInterface"/>
	
</beans>
  第二步:获取配置文件
/**
 * 获取xml 文件
 * @author Administrator
 */
public class test05 {
   public static void main(String[] args) {
	 ApplicationContext context=new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
	 WeatherInterface weatherInterface = (WeatherInterface) context.getBean("weatherInterface");
	 String weather = weatherInterface.getWeather("原平的天气也很好");
	 System.out.println(weather);
}
}
  
 1.3.5 cxf与spring的综合案例
    说明:根据地址:http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl 先获取到手机的服务 再把获取到的手机服务发布
    在dom中用命令生成 天气服务http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl的代码 导入项目中  导入所需jar包

   第一步:接口 MobileInterface

 

/**
 * 接口
 * @author Administrator
 */
@WebService
@BindingType(SOAPBinding.SOAP12HTTP_BINDING)
public interface MobileInterface {
   public String getMobile(String str);
}

   第二步:实现类 MobileInterfaceImpl

 

/**
 * 实现类
 * @author Administrator
 */
public class MobileInterfaceImpl implements MobileInterface {
	//声明要获取的天气的实现类
	public MobileCodeWSSoap mobileCodeWSSoap;
	//set方法是为了能在配置文件中给这个属性赋值
	public void setMobileCodeWSSoap(MobileCodeWSSoap mobileCodeWSSoap) {
		this.mobileCodeWSSoap = mobileCodeWSSoap;
	}
    //要发布的方法
	public String getMobile(String str) {
		return mobileCodeWSSoap.getMobileCodeInfo(str, "");
	}

}

   第三步:定义servlet类 Mobile

 

/**
 * 自定义的servlet类  继承HttpServlet
 * @author Administrator
 *
 */
public class Mobile extends HttpServlet {
    //get的请求
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
	}
	//post请求
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		MobileInterfaceImpl mobileInterfaceImpl;
        WebApplicationContext context=WebApplicationContextUtils.getWebApplicationContext(this.getServletContext());
        mobileInterfaceImpl=(MobileInterfaceImpl) context.getBean("mobileInterfaceImpl");
        
        request.setCharacterEncoding("utf-8");
        String num=request.getParameter("mobileNum");
        num=mobileInterfaceImpl.getMobile(num);
        request.setAttribute("num",num);
        request.getRequestDispatcher("/form.jsp").forward(request, response);
		System.out.println("请求来了");
	}
}

 

  第四步:配置web.xml

 

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
	xmlns="http://java.sun.com/xml/ns/javaee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <display-name></display-name>	
  <!-- 加载spring 配置文件 -->
  <context-param>
     <param-name>contextConfigLocation</param-name>
     <param-value>classpath:applicationContext.xml</param-value>
  </context-param>
  <listener>
      <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  <!-- 加载cxf服务 -->
  <servlet>
     <servlet-name>cxf</servlet-name>
     <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
  </servlet>
  <servlet-mapping>
     <servlet-name>cxf</servlet-name>
     <url-pattern>/mobile/*</url-pattern>
  </servlet-mapping>
  <!-- 配置自定义的servlet -->
   <servlet>
    <servlet-name>Mobile</servlet-name>
    <servlet-class>cn.xebest.mobile.Mobile</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>Mobile</servlet-name>
    <url-pattern>/mobile.action</url-pattern>
  </servlet-mapping>
  
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

  第五步:config 下的applicationContext.xml

 

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxws="http://cxf.apache.org/jaxws"
	xmlns:jaxrs="http://cxf.apache.org/jaxrs" xmlns:cxf="http://cxf.apache.org/core"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
				            http://www.springframework.org/schema/beans/spring-beans.xsd
				            http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd
				            http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd
				            http://cxf.apache.org/core http://cxf.apache.org/schemas/core.xsd">
	<!-- 服务端 -->
	<jaxws:server id="mobileInterface" serviceClass="cn.xebest.mobile.MobileInterface" address="/address">
	    <jaxws:serviceBean>
	       <ref bean="mobileInterfaceImpl"/>
	    </jaxws:serviceBean>
	</jaxws:server>
	<!-- 给属性赋值 -->
	<bean id="mobileInterfaceImpl" class="cn.xebest.mobile.MobileInterfaceImpl">
	   <property name="mobileCodeWSSoap" ref="mobileCodeWSSoap" />
	</bean>
	
	<!-- 客户端  获取公网的数据-->
	<jaxws:client id="mobileCodeWSSoap" address="http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl" serviceClass="cn.com.webxml.MobileCodeWSSoap"></jaxws:client>			            
</beans>				            

 第六步:form.jsp

 

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/mobile.action" method="post" onsubmit="return sub()">
  <input type="text" name="mobileNum"  />
  <input type="submit" value="submit">
</form>
${num}
</body>
</html>

   127.0.0.1:8090/项目名/mobile/address?wsdl

 

1.4 webservice 基于cxf框架的rest风格:(cxf是能实现rest风格的框架)

    1.4.1 普通的发布:

     建立项目  导入jar包

   第一步:实体类

 

/**
 * 在这个类上面必须有此标签 name 的值谁编写
 * @author Administrator
 */
@XmlRootElement(name="student")
public class Student implements Serializable{
	 private String name;
	    private String sex;
	    private String age;
		public String getName() {
			return name;
		}
		public void setName(String name) {
			this.name = name;
		}
		public String getSex() {
			return sex;
		}
		public void setSex(String sex) {
			this.sex = sex;
		}
		public String getAge() {
			return age;
		}
		public void setAge(String age) {
			this.age = age;
		}
}

  第二步:接口

 

@WebService
@Path("/student")//类的路径
public interface StudentInterface {
    
	@GET//get请求
	@Path("/string/{id}")//方法的路径  id是参数  在方法中用@PathParam获取
	@Produces(MediaType.APPLICATION_XML)//xml格式
	public Student getString(@PathParam("id")String id);
		
	@GET
	@Path("/list/{id}")
	//可以是xml 也可以是 json
    @Produces({MediaType.APPLICATION_XML,MediaType.APPLICATION_JSON})
	public List<Student> getList(@PathParam("id")String id);
}

  第三步: 实现类

 

public class StudentInterfaceImpl implements StudentInterface{

	@Override
	public Student getString(String id) {
		Student t=new Student();
		t.setName("小刚");
		t.setAge("18");
		t.setSex("男");
		if(StringUtils.isNotBlank(id)){
			return t;
		}
		return null;
	}

	@Override
	public List<Student> getList(String id) {
		Student t1=new Student();
		t1.setName("小刚");
		t1.setAge("18");
		t1.setSex("男");
		Student t2=new Student();
		t2.setName("小刚");
		t2.setAge("18");
		t2.setSex("男");
		Student t3=new Student();
		t3.setName("小刚");
		t3.setAge("18");
		t3.setSex("男");
		@SuppressWarnings("unused")
		List<Student> list=new ArrayList<Student>();
		list.add(t1);
		list.add(t2);
		list.add(t3);
		if(StringUtils.isNotBlank(id)){
			return list;
		}
		return null;
	}

}

 第四步:发布服务

 

/**
 * rest发布服务
 * @author Administrator
 *
 */
public class StudentServer {

	public static void main(String[] args) {
		//rest框架的api
		JAXRSServerFactoryBean factroyBean=new JAXRSServerFactoryBean();
		factroyBean.setAddress("http://127.0.0.1:1232/server");
		factroyBean.setResourceClasses(StudentInterfaceImpl.class);
		factroyBean.create();
	}
}

   http:127.0.0.1:1232/server/student/list/99?_type=json   //获取json格式

   http:127.0.0.1:1232/server/student/list/99?_type=xml   //获取xml格式

   http:127.0.0.1:1232/server/student/string/99                //获取xml格式

   

  1.4.2 rest与spring整合的发布:

   建立项目  导入jar包

  第一步:实体类

 

package cn.xebest.rest;

import javax.xml.bind.annotation.XmlRootElement;
/**
 * 实体类   
 * 此处必须有标签 @XmlRootElement
 * @author Administrator
 *
 */
@XmlRootElement(name="student")
public class Student {
		private String name;
		private String age;
		private String sex;
	   public Student() {
			super();
		}
		public Student(String name,String age,String sex){
			   this.name=name;
			   this.age=age;
			   this.sex=sex;
		   }
		public String getName() {
			return name;
		}
		public void setName(String name) {
			this.name = name;
		}
		public String getAge() {
			return age;
		}
		public void setAge(String age) {
			this.age = age;
		}
		public String getSex() {
			return sex;
		}
		public void setSex(String sex) {
			this.sex = sex;
		} 
		   
}

 

   第二步:接口

  

@WebService
@Path("/student")
public interface StudentInterface {

	@GET
	@Path("/string/{id}")
	@Produces(MediaType.APPLICATION_XML)
	public Student getStudent(@PathParam("id")String id);
	
	@GET
	@Path("/list/{id}")
	@Produces({MediaType.APPLICATION_XML,MediaType.APPLICATION_JSON})
	public List<Student> getList(@PathParam("id")String dd);
}

   第三步:实现类

 

public class StudentInterfaceImpl implements StudentInterface {

	public Student getStudent(String id) {
		Student t=new Student("小明","21","男");
		if(StringUtils.isNotBlank(id)){
			return t;
		}
		return null;
	}

	public List<Student> getList(String dd) {
		Student t1=new Student("小明","21","男");
		Student t2=new Student("小明","21","男");
		Student t3=new Student("小明","21","男");
		List<Student> list=new ArrayList<Student>();
		if(StringUtils.isNotBlank(dd)){
			list.add(t1);
			list.add(t2);
			list.add(t3);
			return list;
		}
		return null;
	}

}

 

 第四步:config下的 applicationContext.xml

 

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxws="http://cxf.apache.org/jaxws"
	xmlns:jaxrs="http://cxf.apache.org/jaxrs" xmlns:cxf="http://cxf.apache.org/core"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
				            http://www.springframework.org/schema/beans/spring-beans.xsd
				            http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd
				            http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd
				            http://cxf.apache.org/core http://cxf.apache.org/schemas/core.xsd">
	<jaxrs:server address="/address" >
	    <jaxrs:serviceBeans>
	      <ref bean="studentInterfaceImpl"/>
	    </jaxrs:serviceBeans>
	</jaxrs:server>
	<bean id="studentInterfaceImpl" class="cn.xebest.server.StudentInterfaceImpl"></bean>			            
</beans>				           

 第五步:web.xml

 

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
	xmlns="http://java.sun.com/xml/ns/javaee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <display-name></display-name>	
  <context-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:applicationContext.xml</param-value>
  </context-param>
  <listener>
      <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  
  <servlet>
      <servlet-name>cxf</servlet-name>
      <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
  </servlet>
  <servlet-mapping>
      <servlet-name>cxf</servlet-name>
      <url-pattern>/server/*</url-pattern>
  </servlet-mapping>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

   http:127.0.0.1:8090/项目名/server/address/student/string/99

 

 

 

 

 

 

 

 

 

 

 

  • 大小: 14.3 KB
分享到:
评论

相关推荐

    webservice远程调用,返回数据生成xml文件,并通过SAX解析出来

    webservice远程调用,返回String数据并生成xml文件到本地工程,在通过SAX解析器把数据解析出来。这是webservice应用的一个简单的例子。根据该例子的思想,可以实现很多功能了。例如把client工程的sayHello方法改为...

    webService远程调用报错设置.doc

    WebService 远程调用报错设置 在 WebService 远程调用时,可能会出现一些报错设置问题,本文将对这些问题进行详细的分析和解决。 错误信息:“测试窗体只能用于来自本地计算机的请求” 在 WebService 远程调用时...

    webservice远程调用与cxf框架共26页.pdf

    总之,"webservice远程调用与cxf框架共26页.pdf"文档很可能会深入讲解如何使用CXF框架来创建和使用Web服务,包括SOAP和RESTful服务的创建、配置、测试和优化。这份资料对于理解和应用CXF框架以及理解Web服务远程调用...

    java+restful+Jersey+webservice 远程调用

    在本项目中,你将学习如何使用Java和Jersey构建RESTful Web服务,并进行远程调用。以下是一些关键知识点: 1. **JAX-RS注解**: - `@Path`:用于定义资源的URI路径。 - `@GET`, `@POST`, `@PUT`, `@DELETE`:分别...

    客户端调用远程Webservice

    调用远程wadl的Webservice代码,请求参数是json,返回结果通过main方法打印

    使用spring远程调用服务端接口实现WebService功能

    这就是Spring框架实现远程调用服务端接口以实现WebService功能的基本流程。由于HttpInvoker基于HTTP,它天生具备良好的网络穿透能力,适合于分布式系统中的跨网络通信。同时,由于使用了Java序列化,它的性能相对较...

    Web Service远程调用技术

    Web Service 远程调用技术 Web Service 是一种跨编程语言和跨操作系统平台的远程调用技术,通过 SOAP 在 Web 上提供的软件服务,使用 WSDL 文件进行说明,并通过 UDDI 进行注册。XML 是 Web Service 的基础,它是...

    ASP.NET远程调用

    2. **WebService远程调用方式**:通过Web服务的形式为客户端提供接口。客户端可以通过标准的HTTP协议访问这些接口,并接收由服务器端处理后的业务逻辑结果。 #### 三、HTTP/TCP方式远程调用详解 ##### 接口定义 ...

    远程调用技术代码追踪(webservice)

    这是一份DELPHI的webservice 远程调用例子,里面有详细文档介绍和代码,可以作为参考看看。

    在WinForm程序中调用WebService

    `WebMethod`特性标记表示该方法可以被远程调用。 3. **业务逻辑层(BLL)**: - BLL是应用程序的核心,处理业务规则和数据验证。在BLL层,你可以封装对WebService的调用,如`PaymentBLL.cs`: ```csharp public...

    webservice异步调用

    在 EzoneService 中,我们定义了一个名为 HelloWorld 的方法,该方法使用 [WebMethod] 属性指定了该方法可以被远程调用。HelloWorld 方法返回一个字符串 "Hello World"。 在客户端,我们可以使用 ConsoleApp 来调用...

    webservice接口调用工具类依赖jar包

    WebService接口调用工具类是Java开发中常见的一种技术,用于与远程服务进行通信,尤其在集成不同系统或服务时非常关键。在这个场景中,"webservice接口调用工具类依赖jar包"指的是为了实现对WebService接口的调用,...

    C# webservice 服务调用工具类,源码

    C# webservice 服务调用工具类。 此工具 对 post get 请求进行了封装,只需要传递对应的URL以及参数即可返回JSON 或者XML 的字符串。 是非常有用的调用远程接口的服务类。 webservice

    axis2 webservice 客户的调用所需要的jar

    activation-1.1.jar axiom-api-1.2.13.jar axiom-impl-1.2.13.jar axis2-adb-1.6.2.jar axis2-adb-codegen-1.6.2.jar axis2-codegen-1.6.2.jar axis2-java2wsdl-1.6.2.jar axis2-kernel-1.6.2.jar ...

    WebService调用的几种方式

    这些存根类提供了与服务交互的方法,使得开发者可以像调用本地方法一样调用远程服务。 2. CXF:Apache CXF是一个全面的服务开发框架,支持SOAP和RESTful风格的Web服务。相比于Axis,CXF提供了更现代的API和更好的...

    labview调用webservice访问远程数据1

    LabVIEW 调用WebService 访问远程数据 在本篇文章中,我们将讨论如何使用 LabVIEW 调用 WebService 来访问远程数据。首先,我们需要了解为什么需要使用 WebService 来访问远程数据。传统的方法是使用链接字符串连接...

    用webservice 实现在天气预报查询程序

    2. **调用WebService**:利用SOAP消息,开发者可以向WebService发送请求。SOAP是一种传输协议,它封装了请求数据,并通过HTTP或HTTPS等网络协议发送到服务器。 3. **处理响应**:服务器接收到请求后,执行相应的...

    AXIS2远程调用WebService示例(Eclipse+AXIS2)工具和所用包.rar

    AXIS2远程调用WebService是Java开发者在进行分布式服务交互时常用的一种技术。本文将详细介绍如何使用Eclipse集成开发环境和AXIS2框架创建并调用WebService。首先,我们需要准备以下基础工具: 1. Eclipse IDE:这...

    远程调用技术代码追踪(webservice) 之一

    在本文中,我们将重点关注使用Web服务(WebService)作为远程调用的一种实现方式,以及如何通过代码追踪理解其工作原理。 首先,Web服务是基于开放标准如SOAP(Simple Object Access Protocol)和HTTP(超文本传输...

Global site tag (gtag.js) - Google Analytics