Product.java
package org.sample.model;
import java.math.BigDecimal;
public class Product {
private Integer productId;
private String productName;
private String description;
private Float weight;
private BigDecimal price;
private Integer categoryId;
public Integer getCategoryId() {
return categoryId;
}
public void setCategoryId(Integer categoryId) {
this.categoryId = categoryId;
}
public Integer getProductId() {
return productId;
}
public void setProductId(Integer productId) {
this.productId = productId;
}
public String getProductName() {
return productName;
}
public void setProductName(String productName) {
this.productName = productName;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public Float getWeight() {
return weight;
}
public void setWeight(Float weight) {
this.weight = weight;
}
public BigDecimal getPrice() {
return price;
}
public void setPrice(BigDecimal price) {
this.price = price;
}
}
Category.java
package org.sample.model;
public class Category {
private Integer categoryId;
private String categoryName;
public Integer getCategoryId() {
return categoryId;
}
public void setCategoryId(Integer categoryId) {
this.categoryId = categoryId;
}
public String getCategoryName() {
return categoryName;
}
public void setCategoryName(String categoryName) {
this.categoryName = categoryName;
}
}
Product.hbm.xml
version="1.0"?>
hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
Category.hbm.xml
version="1.0"?>
hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
+ Dao class
ProductDAO.java
package org.sample.dao;
import org.sample.model.Product;
public interface ProductDAO {
public void createProduct(Product product);
public void updateProduct(Product product);
public void deleteProduct(Product product);
public Product getProduct(Integer productId);
public Product[] listAllProduct();
}
CategoryDAO.java
package org.sample.dao;
import org.sample.model.Category;
public interface CategoryDAO {
public void createCategory(Category cat);
public void updateCategory(Category cat);
public void deleteCategory(Category cat);
public Category getCategory(Integer categoryId);
public Category[] getAllCategories();
}
ProductDAOImpl.java
package org.sample.dao.impl;
import org.sample.dao.ProductDAO;
import org.sample.model.Product;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
public class ProductDAOImpl extends HibernateDaoSupport implements ProductDAO {
public void createProduct(Product product) {
getHibernateTemplate().save(product);
}
@SuppressWarnings("unchecked")
public Product[] listAllProduct() {
Product[] products = new Product[0];
return (Product[]) getHibernateTemplate().find("from Product").toArray(products);
}
public Product getProduct(Integer productId) {
Product pro1 = (Product) getHibernateTemplate().load(Product.class,
productId);
Product pro2 = new Product();
pro2.setProductId(pro1.getProductId());
pro2.setProductName(pro1.getProductName());
pro2.setCategoryId(pro1.getCategoryId());
pro2.setPrice(pro1.getPrice());
pro2.setWeight(pro1.getWeight());
pro2.setDescription(pro1.getDescription());
return pro2;
}
public void updateProduct(Product product) {
getHibernateTemplate().update(product);
}
public void deleteProduct(Product product) {
getHibernateTemplate().delete(product);
}
}
CategoryDAOImpl.java
package org.sample.dao.impl;
import java.util.List;
import org.sample.dao.CategoryDAO;
import org.sample.model.Category;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
public class CategoryDAOImpl extends HibernateDaoSupport implements CategoryDAO {
public void createCategory(Category cat) {
getHibernateTemplate().save(cat);
}
public void deleteCategory(Category cat) {
getHibernateTemplate().delete(cat);
}
@SuppressWarnings("unchecked")
public Category[] getAllCategories() {
List list = getHibernateTemplate().find("from Category");
Category[] categories = (Category[]) list.toArray();
return categories;
}
public void updateCategory(Category cat) {
getHibernateTemplate().update(cat);
}
public Category getCategory(Integer categoryId) {
Category cat1 = (Category) getHibernateTemplate().get(Category.class,
categoryId);
Category cat2 = new Category();
cat2.setCategoryId(cat1.getCategoryId());
cat2.setCategoryName(cat1.getCategoryName());
return cat2;
}
}
+ Service class (call dao)
ProductService.java
CategoryService.java
ProductServiceImpl.java
CategoryServiceImpl.java
+ applicationContext.xml
beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
class="org.apache.axis2.extensions.spring.receivers.ApplicationContextHolder"/>
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
class="org.springframework.orm.hibernate3.HibernateInterceptor">
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
org.hibernate.dialect.MySQLDialect
class="org.springframework.orm.hibernate3.HibernateTemplate">
class="org.sample.service.impl.ProductServiceImpl">
class="org.springframework.aop.framework.ProxyFactoryBean">
class="org.sample.service.impl.CategoryServiceImpl">
class="org.springframework.aop.framework.ProxyFactoryBean">
+ services.xml
org.sample.service.SpringInit
class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
org.sample.service.impl.ProductServiceImpl
org.apache.axis2.extensions.spring.receivers.SpringAppContextAwareObjectSupplier
class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver"/>
class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
org.sample.service.impl.CategoryServiceImpl
org.apache.axis2.extensions.spring.receivers.SpringAppContextAwareObjectSupplier
class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver"/>
class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
+ Client class
CreateProductSpringClient.java
UpdateProductSpringClient.java
package org.sample.client;
import javax.xml.namespace.QName;
import org.apache.axis2.AxisFault;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.Options;
import org.apache.axis2.rpc.client.RPCServiceClient;
import org.sample.model.Category;
public class UpdateCategorySpringClient {
public static void main(String[] args) throws AxisFault {
RPCServiceClient serviceClient = new RPCServiceClient();
Options options = serviceClient.getOptions();
EndpointReference targetEPR = new EndpointReference(
"http://127.0.0.1:8989/axis2/services/categoryService");
options.setTo(targetEPR);
// get products
QName opGetCategory = new QName("http://impl.service.sample.org",
"getCategory");
Object[] opGetCategoryArgs = new Object[] { new Integer(4) };
Class[] returnTypes = new Class[] { Category.class };
Object[] response = serviceClient.invokeBlocking(opGetCategory,
opGetCategoryArgs, returnTypes);
Category cat = (Category) response[0];
// Displaying the result
System.out.println("CategoryId : " + cat.getCategoryId());
System.out.println("CategoryName : " + cat.getCategoryName());
// update Product
EndpointReference targetEPR1 = new EndpointReference(
"http://127.0.0.1:8989/axis2/services/categoryService");
options.setTo(targetEPR1);
cat.setCategoryName("Games");
Object[] opGetCategoryArgs1 = new Object[] { cat };
System.out.println("Category id:" + cat.getCategoryId());
QName opGetCategory1 = new QName("http://impl.service.sample.org",
"updateCategory");
serviceClient.invokeRobust(opGetCategory1, opGetCategoryArgs1);
System.out.println("xong roi");
}
}
DeleteProductSpringClient.java
ListProductSpringClient.java
package org.sample.client;
import javax.xml.namespace.QName;
import org.apache.axis2.AxisFault;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.Options;
import org.apache.axis2.rpc.client.RPCServiceClient;
import org.sample.model.Product;
public class ListProductSpringClient {
public static void main(String[] args) throws AxisFault {
RPCServiceClient serviceClient = new RPCServiceClient();
Options options = serviceClient.getOptions();
EndpointReference targetEPR = new EndpointReference(
"http://127.0.0.1:8989/axis2/services/productService");
options.setTo(targetEPR);
// get products
QName opGetProduct = new QName("http://impl.service.sample.org",
"listAllProduct");
Object[] opGetProductArgs = new Object[] {};
Class[] returnTypes = new Class[] { Product[].class };
Object[] response = serviceClient.invokeBlocking(opGetProduct,
opGetProductArgs, returnTypes);
Product[] products = (Product[]) response[0];
for (int i = 0; i < products.length; i++) {
Product pro = (Product) products[i];
System.out.println("product name:" + pro.getProductName());
}
}
}
+ Library
cglib.jar
common-collection.jar
ehcache.jar
dom4j.jar
jta.jar
hibernate3.jar
mysql-connector.jar
antlr-2.7.5H3.jar
Chú ý: copy tất cả thư mục con của thư mục classes trong thư mục target vào C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\axis2\WEB-INF\classes
Tip
+ Lỗi java.lang.IllegalStateException: No valid ObjectCreator found <= thiếu stax-1.2.0.jar file
+ Có thể sử dụng eclipse plugin để phát sinh WSDL file: http://ws.apache.org/axis2/tools/index.html
+ SOAP: nghi thức trao đổi thông tin qua HTTP, SOAP message là XML message
+ JAX-WS là kỹ thuật để xây dựng web service và client giao tiếp qua XML
+ JAX-RPC cung cấp mô hình để phát triển ứng dụng dựa vào SOAP. Lập trình JAX-RPC đơn giản kỹ thuật chạy nghi thức SOAP và cung cấp ánh xạ services giữa Java và WSDL
+ WSDL: file mô tả web service
+ Sử dụng tool java2wsdl để phát sinh wsdl file: java2wsdl -cp . -cn org.sample.service.BusinessService -of BusinessService.wsdl
+ POJO nhấn mạnh đối tượng là đối tượng Java bình thường (hông phải Enterprise JavaBean, nó không cài đặt, kế thừa bất kỳ lớp nào hoặc chứa annotation) để thiết kế đơn giản hơn, tốt hơn. JavaBean là một POJO có tính chất serializable (cho phép truy cập các thuộc tính private của các đối tượng persistent), có phương thức khởi tạo không tham số, cho phép truy cập các thuộc tính bằng phương thức getter và setter.
(Spring POJO: http://www.onjava.com/pub/a/onjava/2005/06/29/spring-ejb3.html).
Chúc bạn thành công.
DangTrung
Chúc bạn thành công.
DangTrung
Không có nhận xét nào:
Đăng nhận xét