读书人

Tomcate 公布基于JAX-WS的项目流程小案

发布时间: 2012-12-24 10:43:14 作者: rapoo

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

?

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

?

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

?

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

?

Tomcate 公布基于JAX-WS的项目流程小案例

?

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<String,Book> bookMap=new HashMap<String,Book>();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<Book> list(){ArrayList<Book> bookList=new ArrayList<Book>();Set<String> 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;@WebServicepublic interface IBookBiz {@WebResultpublic void add(@WebParam(name="book")Book b) throws BookException;@WebResult(name="bookList")public List<Book> 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();@Overridepublic void add(Book b) throws BookException {bookDao.add(b);}public List<Book> 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文件中配置如下内容:

?

<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xmlns="http://java.sun.com/xml/ns/javaee"  xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"  id="WebApp_ID"  version="2.5">    <listener><listener-class>com.sun.xml.ws.transport.http.servlet.WSServletContextListener</listener-class></listener><!-- 其中是servlet-name和sun-jaxws中endpoint中的name一致 --><servlet><servlet-name>bookService</servlet-name><servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet</servlet-class></servlet><servlet-mapping><servlet-name>bookService</servlet-name><url-pattern>/book</url-pattern></servlet-mapping></web-app>

?

?

?

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

?

<?xml version="1.0" encoding="UTF-8"?><endpoints xmlns="http://java.sun.com/xml/ns/jax-ws/ri/runtime" version="2.0"><!-- 每个endpoint表示一个发布的webservice服务,name要和web.xml中servlet的name一致,url-pattern和servlet的url-pattern一致-->  <endpoint name="bookService"        implementation="com.lyl.service.BookBizImpl" url-pattern="/book"/></endpoints>

?

?

?

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

?

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

?

<?xml version="1.0" encoding="UTF-8" ?> - <!--  Published by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.2.5-b05 .   --> - <!--  Generated by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.2.5-b05 .   --> - <definitions xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsp="http://www.w3.org/ns/ws-policy" xmlns:wsp1_2="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://service.lyl.com" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://service.lyl.com" name="BookBizImplService">  <import namespace="http://service.lyl.com/" location="http://localhost:8080/test_soa_web1/book?wsdl=1" /> - <binding xmlns:ns1="http://service.lyl.com/" name="BookBizImplPortBinding" type="ns1:IBookBiz">  <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document" /> - <operation name="add">  <soap:operation soapAction="" /> - <input>  <soap:body use="literal" />   </input>- <output>  <soap:body use="literal" />   </output>- <fault name="BookException">  <soap:fault name="BookException" use="literal" />   </fault>  </operation>- <operation name="list">  <soap:operation soapAction="" /> - <input>  <soap:body use="literal" />   </input>- <output>  <soap:body use="literal" />   </output>  </operation>- <operation name="findBookByName">  <soap:operation soapAction="" /> - <input>  <soap:body use="literal" />   </input>- <output>  <soap:body use="literal" />   </output>- <fault name="BookException">  <soap:fault name="BookException" use="literal" />   </fault>  </operation>  </binding>- <service name="BookBizImplService">- <port name="BookBizImplPort" binding="tns:BookBizImplPortBinding">  <soap:address location="http://localhost:8080/test_soa_web1/book" />   </port>  </service>  </definitions>

?

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

?

Tomcate 公布基于JAX-WS的项目流程小案例

?

?

新建客户端项目:添加客户端代码和测试类,引入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;@Beforepublic void init(){BookBizImplService bbs=new BookBizImplService();bz=bbs.getBookBizImplPort();}@Testpublic 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 blockSystem.out.println(e.getMessage());}}@Testpublic void testList(){List<Book> bookList=bz.list();for(Book book:bookList){System.out.println(book.getBookName());}}@Testpublic void testFindByName(){String bookName="销售";try {Book book=bz.findBookByName(bookName);System.out.println(bookName+"的价格是:"+book.getBookPrice());} catch (BookException_Exception e) {// TODO Auto-generated catch blockSystem.err.println(e.getMessage());}}}

?

?

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

?

?

读书人网 >编程

热点推荐