Tomcat 发布基于JAX-WS的项目流程小案例

阅读更多
 
  

 

前面是基于java Application发布webservice的服务,现在我们以前看一个用Tomcat发布服务的过程。

 

这个WebService主要是对书的管理的小功能实现。

 

1、首先我们建立一个Dynamic WEB项目,看下这个项目的结构:

 

Tomcat 发布基于JAX-WS的项目流程小案例_第1张图片

 

2、首先看下实体类:Book.java

 

package com.lyl.vo;

public class Book {
	private int bookId;
	
	private String bookName;
	
	private int bookPrice;

	public Book() {
		super();
	}

	public Book(int bookId, String bookName, int bookPrice) {
		super();
		this.bookId = bookId;
		this.bookName = bookName;
		this.bookPrice = bookPrice;
	}

	public int getBookId() {
		return bookId;
	}

	public void setBookId(int bookId) {
		this.bookId = bookId;
	}

	public String getBookName() {
		return bookName;
	}

	public void setBookName(String bookName) {
		this.bookName = bookName;
	}

	public int getBookPrice() {
		return bookPrice;
	}

	public void setBookPrice(int bookPrice) {
		this.bookPrice = bookPrice;
	}
}

 

3、持久层 BookDao.java

 

package com.lyl.dao;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

import com.lyl.vo.Book;

public class BookDao {
	
	private Map bookMap=new HashMap();
	
	private static BookDao bookDao;
	
	public static BookDao newStance(){
		if( bookDao==null){ 
			bookDao=new BookDao();
		}
		return bookDao;
		
	}
	private BookDao(){
		bookMap.put("三国演义", new Book(1,"三国演义",20));
	}
	
	
	public void add(Book b) throws BookException{
		
		if(bookMap.containsKey(b.getBookName())){
			throw new BookException("此书已存在");
			}
		bookMap.put(b.getBookName(), b);
	}
	
	public List list(){
		ArrayList bookList=new ArrayList();
		
		Set bookNames=bookMap.keySet();
		
		for(String bookName:bookNames){
			
			bookList.add(bookMap.get(bookName));
		}
		return bookList;
		
	}
	
	public Book findBookByName(String bookName) throws BookException{
		Book book=bookMap.get(bookName);
		if(book==null){
			
				throw new BookException("此书不存在");	
		}
		
		return book;
	}
	
	
	
	
}

 

 

3、异常处理类:BookException.java(注意通过注解@WebFault表示是用来封装服务端程序处理过程中出现异常,以便通过消息传递到客户端,而不会在服务端报异常)

 

package com.lyl.dao;

import javax.xml.ws.WebFault;

@WebFault(faultBean="com.lyl.BookException",messageName="BookException" ,name="fault")
public class BookException extends Exception {

	public BookException() {
		super();
		// TODO Auto-generated constructor stub
	}

	public BookException(String message, Throwable cause) {
		super(message, cause);
		// TODO Auto-generated constructor stub
	}

	public BookException(String message) {
		super(message);
		// TODO Auto-generated constructor stub
	}

	public BookException(Throwable cause) {
		super(cause);
		// TODO Auto-generated constructor stub
	}

}

 

3、具体的业务操作接口,也就WebService的服务接口 

 

IBookBiz.java

 

package com.lyl.service;

import java.util.List;

import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;

import com.lyl.dao.BookException;
import com.lyl.vo.Book;

@WebService
public interface IBookBiz {
	
	@WebResult
	public void add(@WebParam(name="book")Book b) throws BookException;
	
	@WebResult(name="bookList")
	public List list();
	
	@WebResult(name="book")
	public Book findBookByName(@WebParam(name="bookName")String bookName) throws BookException;
}

 

 

实现类: BookBizImpl .java

 

package com.lyl.service;

import java.util.List;

import javax.jws.WebService;

import com.lyl.dao.BookDao;
import com.lyl.dao.BookException;
import com.lyl.vo.Book;

@WebService(endpointInterface="com.lyl.service.IBookBiz",targetNamespace="http://service.lyl.com")
public class BookBizImpl implements IBookBiz {

	private BookDao bookDao=BookDao.newStance();
	
	@Override
	public void add(Book b) throws BookException {
		bookDao.add(b);

	}

	public List list() {
		
		return bookDao.list();
	}

	public Book findBookByName(String bookName) throws BookException {
		return bookDao.findBookByName(bookName);

	}

}

 

需要的类我们都准备好了,现在是如何利用Tomcate在启动的时候将WebService发布出去,这里我们就需要引入第三方法的jar包,我们可以到http://jax-ws.java.net/2.2.5/ 官方网上下载所有基于java API for XML 开发webservice需要的jar包,拷贝其中lib目录下的jar包到项目中的lib目录下。

 

因为要在Tomcat启动时候就加载,因此在web.xml文件中配置如下内容:

 



  
  	
	
		com.sun.xml.ws.transport.http.servlet.WSServletContextListener
	
	
	
	
		bookService
		com.sun.xml.ws.transport.http.servlet.WSServlet
	
	
	
		bookService
		/book
	
	

 

 

 

然后再WEB-INF目了下添加一个sun-jaxws.xml文件

 




  

 

 

 

在endpoint中的url-pattern指定了我们可以通过"http://localhost:port/projectName/url_pattern"发布的地址。

 

因此在启动Tomcate后输入http://localhost:8080/test_soa_web1/book?wsdl将可以看到如下WSDL文件信息:

 

 
-  
-  
- 
   
- 
   
- 
   
- 
   
  
- 
   
  
- 
   
  
  
- 
   
- 
   
  
- 
   
  
  
- 
   
- 
   
  
- 
   
  
- 
   
  
  
  
- 
- 
   
  
  
  

 

同样我们通过wsimport 命令生成客户端代码:

 

 

 

新建客户端项目:添加客户端代码和测试类,引入Junit4库。

 

import java.util.List;

import org.junit.Before;
import org.junit.Test;

import com.lyl.service.Book;
import com.lyl.service.BookBizImplService;
import com.lyl.service.BookException_Exception;
import com.lyl.service.IBookBiz;


public class TestBookService {
	
	IBookBiz bz;
	
	@Before
	public void init(){
		BookBizImplService bbs=new BookBizImplService();
		bz=bbs.getBookBizImplPort();
	}
	
	
	@Test
	public void testAdd(){
		
		Book book=new Book();
		book.setBookId(2);
		book.setBookName("水浒传");
		book.setBookPrice(100);
		try {
			bz.add(book);
		} catch (BookException_Exception e) {
			// TODO Auto-generated catch block
			System.out.println(e.getMessage());
		}
	}
	
	
	@Test
	public void testList(){

		List bookList=bz.list();
		
		for(Book book:bookList){
			System.out.println(book.getBookName());
		}
		
	}
	
	@Test
	public void testFindByName(){
		
		String bookName="销售";
		try {
			Book book=bz.findBookByName(bookName);
			System.out.println(bookName+"的价格是:"+book.getBookPrice());
		} catch (BookException_Exception e) {
			// TODO Auto-generated catch block
			System.err.println(e.getMessage());
		}
	}
	
	
	
}

 

 

好了,这就是整个的流程,下面有源码,不过jar要自己到上面提供的官网下载,有什么问题或意见欢迎提出。

 

 

  • Tomcat 发布基于JAX-WS的项目流程小案例_第2张图片
  • 大小: 17.2 KB
  • Tomcat 发布基于JAX-WS的项目流程小案例_第3张图片
  • 大小: 3 KB
  • 源码.rar (39.4 KB)
  • 下载次数: 19
  • 查看图片附件

你可能感兴趣的:(Tomcat,JAX-WS)