`

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

阅读更多

 

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

 

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

 

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

 

 

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;

@WebService
public interface IBookBiz {
	
	@WebResult
	public 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();
	
	@Override
	public 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 命令生成客户端代码:

 

 

 

新建客户端项目:添加客户端代码和测试类,引入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<Book> 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要自己到上面提供的官网下载,有什么问题或意见欢迎提出。

 

 

  • 大小: 17.2 KB
  • 大小: 3 KB
分享到:
评论
3 楼 星夜的遐想 2013-05-05  
dota_nec 写道
以上都运行成功了,但是客户端怎么调用呢,请指教


直接在wsimport命令将发布的wsdl文件,导出成本地的java源代码,集成到调用项目中直接调用相关方法就可以了
2 楼 dota_nec 2013-04-25  
dota_nec 写道
以上都运行成功了,但是客户端怎么调用呢,请指教

哦,有了JUnit已经调用成功了
1 楼 dota_nec 2013-04-25  
以上都运行成功了,但是客户端怎么调用呢,请指教

相关推荐

    Jax-ws RI.zip

    在本案例中,"Jax-ws RI.zip"是一个包含这些组件的压缩包,特别设计用于在Apache Tomcat服务器上部署Web服务。 首先,我们需要理解Web服务的基本概念。Web服务是一种通过互联网进行通信的应用程序接口,它使用XML...

    将铲子朝向JAX-WS

    文件名"jwstutorial20"可能是教程系列的一部分,可能包含一系列逐步的指导或案例研究,帮助读者理解并应用JAX-WS。数字20可能表示这是系列中的第20个教程,意味着可能有一个系统的教学过程。 **知识点详述:** JAX...

    CursoWebServices:Curso Java Web服务JAX-WS JAX-RS

    JAX-WS提供了一种基于WSDL(Web Service Description Language)的模型,允许开发者声明服务的接口、消息结构以及服务地址等信息。通过这种方式,服务消费者可以轻松地发现、理解和调用Web服务。 接着,我们讨论...

    webservice-simple-example

    这个项目旨在展示如何在实际开发中创建、部署和调用基于 JAX-WS 的 Web 服务,并结合 Spring 提供的依赖注入和管理能力。 【描述】中的 "jax-ws 与 spring 整合的简单例子" 提到的核心技术是 JAX-WS 和 Spring。JAX...

    基于jaxws-ri的webservice项目

    本项目是基于Java API for XML Web Services (JAX-WS) 的参考实现——JAXWS-RI(Java API for XML Web Services Reference Implementation)构建的。JAX-WS是Java平台标准版(Java SE)的一部分,为开发SOAP(Simple...

    JAXWS2.2当前时间最新版

    3. **部署服务**:将服务打包成WAR或EAR文件,部署到支持JAX-WS的Servlet容器(如Tomcat、Glassfish等)。 4. **创建客户端**:使用WSDL生成客户端代理类,或使用动态客户端API。 5. **调用服务**:通过客户端接口...

    WebServiceDemoGH1.zip

    "WebServiceDemoGH1.zip"是一个基于Java的WebService演示项目,它利用JAX-WS创建了一个可以通过SOAP协议访问的服务,并可以在IDEA中开发和调试。Tomcat作为服务器运行这个服务,允许跨平台的通信。理解这些知识点,...

    resteasy-jaxrs-2.2 学习整理的例子

    标题 "resteasy-jaxrs-2.2 学习整理的例子" 暗示了我们即将探讨的是关于RESTful服务开发的一个案例,其中涉及到的主要技术是RESTEasy和JAX-RS 2.2。RESTEasy是Java EE平台上的一个开源框架,它实现了Java API for ...

    web service简单实例 包括基本的jar包

    1. **JAX-WS相关库**:如`javax.xml.ws-api.jar`,这是JAX-WS规范的API,用于编写服务端和客户端代码。 2. **Apache CXF**:一个流行的JAX-WS实现,可能包括`cxf-rt-frontend-jaxws.jar`和`cxf-rt-transports-...

    using java webservice 随书源码

    在本案例中,“Using Java WebServices”随书源码提供了一组示例代码,帮助开发者深入理解如何使用Java来发布和消费Web服务。以下是关于Java Web服务的一些核心知识点和相关技术的详细解释: 1. **SOAP(Simple ...

    WebserviceSoap实例(tomcat发布)

    本实例“WebServiceSoap实例(tomcat发布)”将教你如何在Apache Tomcat服务器上部署和使用一个基于SOAP的Web服务。Apache Tomcat是一个流行的开源Java Servlet容器,它能够运行Java Web应用程序,包括JSP和Servlet...

    webservice简单实现例子java工程

    7. **Apache CXF**: Apache CXF是一个开源的Web服务框架,它支持JAX-WS和JAX-RS标准,并提供了丰富的功能,如SOAP消息处理、WS-Security等。在这个例子中,CXF可能被用来创建、发布和测试Web服务。 8. **部署与测试...

    SpringBootWebservice.zip

    在本项目中,Spring Boot 与 Web 服务的整合主要涉及到 JAX-WS(Java API for XML Web Services)或者 JAX-RS(Java API for RESTful Web Services)。 JAX-WS 是 Java 平台上的 SOAP(简单对象访问协议)Web 服务...

    JDK6开发WebService及用户认证

    在实际项目中,可能需要将WebService集成到现有系统中,例如结合Spring框架,或者使用Tomcat、Jetty等应用服务器部署。此外,还可以考虑使用Apache CXF或Glassfish等其他Web服务框架,它们提供了更丰富的功能和更好...

    Apache CXF Web Service Development.pdf

    Apache CXF 是一个开源项目,提供了一套强大的框架用于构建和开发基于Java的Web服务。它支持多种协议,包括SOAP和REST,并且能够很好地与其他标准兼容,如WS-Addressing、WS-Security、WS-Policy等。通过Apache CXF...

    基于Servlet发送、接收SOAP消息的java源程序

    将项目打包为WAR文件,部署到支持Servlet的Web服务器,如Tomcat。 4. **编写SOAP客户端** 创建Servlet,负责构造SOAP请求,发送到服务端,并处理返回的SOAP响应。 5. **测试与调试** 使用SOAP UI等工具测试服务...

    javax.xml.ws.Service 报错需要的包

    在Java开发中,`javax.xml.ws.Service` 是一个核心组件,属于Java API for XML Web Services (JAX-WS)的一部分,用于创建客户端和服务端的Web服务代理。报错通常表明缺少必要的依赖包,这可能会影响到程序的正常运行...

    webservice cxf简单案例

    这个案例可能是一个博客文章,但由于提供的描述为空,我们将基于一般Web服务CXF开发流程进行讲解。Apache CXF允许开发者以JAX-WS(Java API for XML Web Services)和JAX-RS(Java API for RESTful Web Services)...

    简单的科学计算器 以java webservice实现

    4. **JAX-WS API**:这个API包括一系列接口和类,如`WebService`, `Service`, `Port`等,它们帮助开发者创建、发布和使用Web服务。例如,开发者可以使用`@WebService`注解来标记服务接口,并使用`@WebMethod`来定义...

Global site tag (gtag.js) - Google Analytics