。它们是:
ListAllBook:查询所有的图书信息;
ListByCategory:按类别查询图书信息;
BookDetail:查询某个特定名称的图书信息。
客户端是用Swing编写的GUI界面,使用界面如图5所示。
图5 客户端界面
客户端和服务端传输图书信息时采用例程1所示的格式。
例程1 传输图书信息的格式(book.dtd)
<!ELEMENT books(book*)>
<!ELEMENT book (name,publisher,price,author+,category,description)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT publisher (#PCDATA)>
<!ELEMENT price (#PCDATA)>
<!ELEMENT author (#PCDATA)>
<!ELEMENT category (#PCDATA)>
<!ELEMENT description (#PCDATA)>
<!ATTLIST book id CDATA #REQUIRED>
这个信息包含在SOAP消息的Body里,按照这个格式,传输的SOAP消息结构如例程2所示。
例程2 传输的SOAP消息的格式(book.msg)
<soap-env:Envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/">
<soap-env:Header/>
<soap-env:Body>
<books:GetAllBooks xmlns:books="http://hellking.webservice.com">
<books:book id="2-1234-4455-4">
<books:name>J2EE企业应用开发</books:name>
<books:publisher>电子工业出版社</books:publisher>
<books:price>60</books:price>
<books:category>计算机类</books:category>
<books:description>非常好的介绍J2EE企业应用开发的书</books:description>
<books:author>陈亚强</books:author>
<books:author>刘晓华</books:author>
</books:book>
</books:GetAllBooks>
</soap-env:Body>
</soap-env:Envelope>
用JAXM开发Web服务(4)
时间:2011-02-07 IBM 陈亚强
为了传输数据的便利,我把图书信息用一个专门的值对象来表示,如例程3所示。
例程3 BookVO值对象
package com.hellking.webservice;
import java.util.Collection;
public class BookVO implements java.io.Serializable
{
private String name;//图书名字
private String publisher;//图书出版社
private float price;//图书价格
private String isbn;//图书ISBN
private String description;//图书的简介
private String category;//图书的类别
private Collection authors;//图书的作者,因一本书可以有多个作者,故把它表示成Collection。
public void setName(String name)
{
this.name=name;
}
public String getName()
{
return this.name;
}
…其它的getter和setter方法
可以看出,BookVO其实是和例程1中的DTD是对应的。需要指出的是,BookVO可以使用JAXB(Java API for XML Binding)中的工具来生成。
EJB组件介绍
本案例使用了两个EJB组件,它们分别是BookEntityEJB和BookServiceFacadeEJB。其中BookEntityEJB是实体Bean,它代表了每本书的详细信息;BookServiceFacadeEJB为有状态会话Bean,它是一个会话门面,为JAXM Servlet提供业务服务。BookServiceFacadeEJB组件的远程接口如例程4所示。
例程4 BookServiceFacadeEJB组件的远程接口
package com.hellking.webservice.ejb;
import java.rmi.RemoteException;
import javax.ejb.*;
public interface BookServiceFacade extends EJBObject
{
/**
* @J2EE_METHOD -- getAllBook,查找所有的书
*/
public java.util.Collec
|