-- 作者:lixiaoming
-- 发布时间:12/11/2008 10:03:00 PM
-- 我想做一个简单的拥有三层架构的web service
各位大侠,请指教,起初刚刚接触了web service想自己做一个简单的例子,我现在已经把,juddi+axis+MyEclipse+Tomcat+Mysql的一个试验平台搭建好了,uddi4j连接juddi也测试成功了。现在我想做一个简单的包括三层架构的web service, 希望各位可以指点指点: 首先,我做了如下的功夫 首先在myeclipse中新建了一个web project 接着: 这里是个pojo类,名字为Product.java public class Product { private String pid; private String pname; private double price; private int cnt; private String ext; public int getCnt() { return cnt; } public void setCnt(int cnt) { this.cnt = cnt; } public String getExt() { return ext; } public void setExt(String ext) { this.ext = ext; } public String getPid() { return pid; } public void setPid(String pid) { this.pid = pid; } public String getPname() { return pname; } public void setPname(String pname) { this.pname = pname; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } } 接着我做了一个数据库连接的文件,,名字为:DBAccess.java package com.icss.oa.opt; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class DBAccess { private static Connection _conn = null; public static Connection getConn() { try { Class.forName("com.mysql.jdbc.Driver"); _conn = DriverManager.getConnection( "jdbc:mysql://127.0.0.1:3306/juddi", "root", "root"); } catch (Exception e) { e.printStackTrace(); } return _conn; } public static void closeConn(Statement stmt, ResultSet rs, Connection conn) { try { if (rs != null) { rs.close(); } } catch (Exception e) { e.printStackTrace(); } try { if (stmt != null) { stmt.close(); } } catch (SQLException e) { e.printStackTrace(); } try { if (conn != null) { conn.close(); } } catch (SQLException e) { e.printStackTrace(); } } public static void closeConn() { try { if (_conn == null || _conn.isClosed()) { return; } else { _conn.close(); } } catch (SQLException e) { e.printStackTrace(); } } public void execUpdate() { } public ResultSet exceQuery(String sql) { ResultSet rs = null; try { if (_conn.isClosed()) { System.out.println("Conn is closed!!"); } Statement stmt = _conn.createStatement(); rs = stmt.executeQuery(sql); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return rs; } } 接着我又做了一个接口:Productoption.java import java.util.ArrayList; public interface Productoption { public ArrayList getAllProducts(); } //里面有一个返回为ArrayList的方法 将这几个文件通过MyEclipse+Tomcat发布之后,进入发布后classes所在的文件夹:我的是C:\Program Files\Apache Software Foundation\Tomcat 5.5\webapps\SimpleExample\WEB-INF\classes 在cmd中输入命令:C:\Program Files\Apache Software Foundation\Tomcat 5.5\webapps\SimpleExample\WEB-INF\classes> java org.apache.axis.wsdl.Java2WSDL -o mb.wsdl -l "http://localhost:80/axis/services/Productoption" -n "urn:Productoption" -p"com.icss.oa.opt" "urn:Produtoption" com.icss.oa.opt.Productoption 生成了mb.wsdl文件,接着在输入命令: java org.apache.axis.wsdl.WSDL2Java -o . -d Session -s -S true -Nurn:Productoption com.icss.oa.opt mb.wsdl 生成了许多的.java文件, 最后就是在ProductoptionSoapBindingImpl.java中添加业务代码了,也就是说具体实现上面接口中的getAllProducts()方法了 具体代码如下: import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import com.icss.oa.entity.Product; public class ProductoptionSoapBindingImpl implements com.icss.oa.opt.Productoption{ public java.lang.Object[] getAllProducts() throws java.rmi.RemoteException { Connection conn = null; Statement stmt = null; ResultSet rs = null; conn = DBAccess.getConn(); String sql ="select * from product"; ArrayList<Product> proList = new ArrayList<Product>(); try { stmt = conn.createStatement(); rs = stmt.executeQuery(sql); Product product; while(rs.next()){ product = new Product(); product.setPid(rs.getString(1)); product.setPname(rs.getString(2)); product.setPrice(rs.getDouble(3)); product.setCnt(rs.getInt(4)); product.setExt(rs.getString(5)); proList.add(product); } } catch (SQLException e) { e.printStackTrace(); }finally{ DBAccess.closeConn(stmt,rs,conn); } return proList.toArray(); } 最后我用 java org.apache.axis.client.AdminClient deploy.wsdd命令发布了这个方法 现在,我是想把getAllproducts()这个方法以web service的方式放到uddi上面,让人们可以查找并调用它。是不是不用使用 java org.apache.axis.client.AdminClient deploy.wsdd 命令而是直接把上面的mb.wsdl文件放到uddi上面啊,如果是的话,怎么放,可不可以指教一下呢。 如果完成了上述的步骤,下面应该做什么呢,是不是可以来编写客户端的代码了,客户端该如何调用这个服务呢,希望您能够指教
|