WebService体系之——JavaBean的传递

WebService体系之——JavaBean的传递

 

        摘要:相比上篇笔记、这篇是实现使用webservice接口来实现JavaBean的传递。


一简介:


        主要搭建的步骤:

        1、            到apache的cxf官网上下载相应的jar包。

        2、            建立一个java工程、将下载的jar包引入到项目中。

        3、            创建JavaBean。

        4、            创建服务端功能接口。

        5、            创建实现服务端功能接口的具体类。

        6、            发布服务接口。

        7、            创建测试类、充当客户端调用服务端提供的功能、获取服务调用服务端提供的服务(具体点就是调用服务端提供的方法)。

 

二:同一个项目时具体步骤及代码


        1、创建java项目、引入jar包、方便起见就直接把jar包(除endorsed文件夹下的之外)全部引入即可下载之后的包中我们还可以发现有自带的spring的包、这样我们在使用spring集成它的时候就方便很多了、这里先不提集成。后面会补充jar和项目结构图。

        2、创建JavaBean——UserInfo:


package com.chy.ws.model;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;

/**
 * 注解:@XmlRootElement-指定XML根元素名称(可选) 
 *           @XmlAccessorType-控制属性或方法序列化 , 四种方案: 
 *                      FIELD-对每个非静态,非瞬变属性JAXB工具自动绑定成XML,除非注明XmlTransient 
 *                      NONE-不做任何处理 
 *                      PROPERTY-对具有set/get方法的属性进行绑定,除非注明XmlTransient 
 *                      PUBLIC_MEMBER -对有set/get方法的属性或具有共公访问权限的属性进行绑定,除非注 明XmlTransient 
 *           @XmlType-映射一个类或一个枚举类型成一个XML Schema类型
 *
 */

@XmlRootElement(name="userInfo")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(propOrder={"userName", "age"})
public class UserInfo {

	private String userName;
	private int age;
	
	
	public UserInfo(String userName, int age) {
		super();
		this.userName = userName;
		this.age = age;
	}
	
	public UserInfo() {
		super();
	}

	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	
	public String toString(){
		return "user name: " + userName + " age: " + age;
	}
}

        3、创建服务端接口:注意别忘了在服务端接口类级别上加上@WebService ! UserService代码:


package com.chy.ws.service;

import javax.jws.WebService;

import com.chy.ws.model.UserInfo;

@WebService//切记 别丢了!
public interface UserService {
	public UserInfo getUserInfo(String userName, int age);
}

        4、创建实现服务端功能接口的具体类——UserServiceImpl代码:


package com.chy.ws.service;

import com.chy.ws.model.UserInfo;

public class UserServiceImpl implements UserService {

	@Override
	public UserInfo getUserInfo(String userName, int age) {
		return new UserInfo(userName, age);
	}
}

        5、发布服务接口——WebServiceServer代码:


package com.chy.ws.server;

import org.apache.cxf.jaxws.JaxWsServerFactoryBean;

import com.chy.ws.service.UserService;
import com.chy.ws.service.UserServiceImpl;

public class WebServiceUserInfo {
	public WebServiceUserInfo(){
		//create a factory for create a web service interface
		JaxWsServerFactoryBean factory = new JaxWsServerFactoryBean();
		
		//release the web service
		factory.setAddress("http://localhost:8080/userinfoservice");
		
		//register the web service
		factory.setServiceClass(UserService.class);
		factory.setServiceBean(new UserServiceImpl());
		
		factory.create();
		
		//another method to release the web service
		//Endpoint.publish("http://localhost:8080/userinfoservice", new UserServiceImpl());
	}
	
	public static void main(String[] args) {
		new WebServiceUserInfo();
		 System.out.println("Server ready...");     
	        try {  
	            Thread.sleep(1000*300);//休眠五分分钟,便于测试     
	        } catch (InterruptedException e) {  
	            e.printStackTrace();  
	        }     
	        System.out.println("Server exit...");     
	        System.exit(0);  
	}
}

        6、通过浏览器访问地址:http://localhost:8080/userinfoservice?wsdl  若有结果则发布成功!

        7、测试类——WebServiceUserInfoClient代码:


package com.chy.ws.client;

import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
import com.chy.ws.model.UserInfo;
import com.chy.ws.service.UserService;

public class WebServiceUserInfoClient {
	public static void main(String[] args) {

		JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
		factory.setAddress("http://localhost:8080/userinfoservice");
		factory.setServiceClass(UserService.class);
		UserService userService = (UserService) factory.create();
		System.out.println("invoke userinfo webservice...");
		// 测试返回JavaBean对象的
		UserInfo user = userService.getUserInfo("vicky", 23);
		System.out.println(user.toString());
	}
}

 

三:不同项目时客户端搭建具体步骤及代码


        1、创建一个java项目、引入与服务端相同的jar包。

        2、创建JavaBean——UserInfo(注意一定要和服务器中的JavaBean是相同的包名和内容、可直接将服务端的复制过来)。

        3、创建服务端功能接口(直接将服务端的java代码复制到客户端、注意:完整路径名一定要一样、及包名完全相同)。

        4、创建测试类来测试服务——UserInfoClient代码:


package com.chy.ws.client;

import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;

import com.chy.ws.service.UserService;

public class UserInfoClient {

	public static void main(String[] args) {
		JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
		factory.setAddress("http://localhost:8080/userinfoservice");
		factory.setServiceClass(UserService.class);
		UserService userService = (UserService) factory.create();
		System.out.println("invoking web service...");
		System.out.println("user info :" + userService.getUserInfo("chy", 22).toString());
		System.exit(0);
	}
}

 

四:补充——项目结构图及jar包


        相对于前面的图这里明显有了多加的内容、但是并没有重新建一个新的项目。回头看的时候方便点。

                 


WebService体系之——JavaBean的传递,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。