0 0

用axis开发java web service中关于服务返回复杂类型的问题5

我是个初学者。我做了一个简单的例子,遇到点问题,希望大家可以帮忙看看
      首先这里是个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
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("oracle.jdbc.driver.OracleDriver");
      _conn = DriverManager.getConnection(
          "jdbc:oracle:thin:@127.0.0.1:1521:ICSS", "PRODUCT", "icss");
    } 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()方法了,可是在这里就有问题了

这里是ProductoptionSoapBindingImpl.java的代码
public class ProductoptionSoapBindingImpl implements com.icss.oa.opt.Productoption{


    public java.lang.Object[] getAllProducts() throws java.rmi.RemoteException {
    return null;
    }

}
这里返回类型怎么成了java.lang.Object[]而我的业务代码应该是
import ....这里也要倒入一些包
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;//这里肯定是错误的,可是我确实想让他返回一个ArrayList类型  啊,要不然在调用的时候怎么办,如下面我写的test.java来测试这个web 服务
}                                    
  
    }

}
test.java文件
import .....//这里要倒入一些包
public class test {
public static void main(String args[]) throws ServiceException, MalformedURLException, RemoteException{  
       ProductoptionService s = new ProductoptionServiceLocator();
       Productoption opt = s.getProductoption();
       //这里我想用ArrayList因为只有这样才能取出数据库的东西啊
       ArrayList list = opt.getAllProducts();
        for (int i = 0; i < list.size(); i++){
                 Product product = (Product) list.get(i);
      
               System.out.println("pid is" +product.getPid());
        System.out.println("cnt is" +product.getCnt());
        System.out.println("ext is" +product.getExt());
        System.out.println("pname is" +product.getPname());
        System.out.println("price is" +product.getPrice());
       
       
}
}
}
请问各位大侠,这里怎么修改才可以解决这个问题啊;


问题补充:
谢谢您,不过我也试了toArray了,只是以前没用过toArray,可能有点不对,这里是我重新写的关于上面ProductoptionSoapBindingImpl.java
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);
      }
     java.lang.Object[] pro = null;
      pro = (proList).toArray(pro);
      return pro;
  //这里是使用了toArray  
}
   
}

接着我又修改了test.java文件
具体如下:
import java.net.MalformedURLException;  
import java.rmi.RemoteException;  
import java.util.ArrayList;

import javax.xml.rpc.ServiceException;  

import com.icss.oa.entity.*;
import com.icss.oa.opt.*;  
 
public class test {
public static void main(String args[]) throws ServiceException, MalformedURLException, RemoteException{  
       ProductoptionService s = new ProductoptionServiceLocator();
       Productoption opt = s.getProductoption();
java.lang.Object[] l = opt.getAllProducts();
   ArrayList myList = new ArrayList(l.length);
//这里我认为要再转换回来,要不然下面的代码无法用     
for (int i = 0; i < myList.size(); i++) {
Product product = (Product) myList.get(i);
System.out.println("pid is"  +product.getPid());
System.out.println("cnt is" +product.getCnt());
System.out.println("ext is" +product.getExt());
System.out.println("pname is" +product.getPname());
System.out.println("price is" +product.getPrice());
       
       
}
}
}
SOA 
2008年12月07日 09:53

2个答案 按时间排序 按投票排序

0 0

采纳的答案

第一片红字,直接改为return proList.toArray();或者return proList.toArray(new Object[]{});

第二片红字:
java.lang.Object[] l = opt.getAllProducts();
if(l != null && l.length > 0) {
  for(int i = 0; i < l.length; i ++) {
    Product product = (Product) l[i];
    //...
  }
}
另外,List的遍历这样写比较好:
for(Iterator itr = myList.iterator(); itr.hasNext();) {
   Product product = (Product) itr.next();
}

2008年12月10日 08:08
0 0

axis我也不熟悉,不过ArrayList不是有toArray方法吗,你可以试试。

2008年12月09日 11:10

相关推荐

    用axis2开发web service

    【用Axis2开发Web Service】是本文的核心主题,轴心技术是Java开发Web服务的一种框架,相较于Axis1,其过程更为简洁。以下是关于使用Axis2开发Web Service的详细步骤和知识点: 1. **实验环境搭建**: - 首先确保...

    Axis开发Web Service实例

    ### Axis开发Web Service实例详解 #### 一、概述 在探讨如何使用Apache Axis来开发Web Service之前,我们首先需要了解一些基本概念。 **Web Service**是一种标准的技术框架,用于实现不同平台之间的应用通信。它...

    Axis2与Eclipse整合开发的Web Service的服务端

    【描述】:本文将详细介绍如何在Eclipse环境中利用Axis2框架开发一个Web Service服务端,包括计算器服务CalculateService的实现步骤。 【标签】:Axis2, Eclipse, 整合开发, Web Service 【内容】: 开发Web ...

    java基于Axis2调用C#开发的web service获取xml结果

    Axis2是Apache软件基金会开发的一个Web服务框架,用于在Java环境中创建和部署Web服务。它基于SOAP,提供了高效的处理和强大的功能,包括WS-ReliableMessaging、WS-Security等高级Web服务标准支持。 3. **C#开发的...

    MyEclipse下开发Web Service(Axis)

    ### MyEclipse下开发Web Service(Axis):深入解析与实践指南 #### 一、环境配置与准备 在深入探讨如何使用Apache Axis在MyEclipse环境下构建Web Services之前,首要任务是确保拥有一个完整的开发环境。这包括但不...

    用Axis2创建Web Service

    在本文中,我们将详细讲解如何使用 Axis2 创建 Web Service,以及搭建开发环境所需的步骤。 一、Axis2 简介 1. Web Service 的作用:Web Service 主要解决了不同操作系统、编程语言之间的互操作性问题,使得系统间...

    基于Tomcat5.0和Axis2开发Web Service应用实例

    【标题】基于Tomcat5.0和Axis2开发Web Service应用实例 在Web服务的世界里,Axis2是一个高效且强大的工具,它允许开发者创建、部署和使用SOAP Web服务。本教程将详细介绍如何利用Apache Tomcat 5.0作为应用服务器,...

    基于Axis2的Web Service 快速开发.ppt

    【基于Axis2的Web Service快速开发】 Web Service是一种在互联网上进行交互的软件技术,它允许不同的系统和服务之间通过标准的协议进行数据交换。Web Service的核心特性包括自包含性、自描述性、开放性、标准性和...

    方便Web Service开发的axis2插件

    标题中的“方便Web Service开发的axis2插件”指的是Axis2,这是一个开源的Web服务框架,专门用于简化和加速在Java环境中开发Web服务的过程。它提供了丰富的功能集,包括自动代码生成、服务部署以及多种协议的支持,...

    使用Axis开发Web Service程序

    ### 使用Axis开发Web Service程序 #### 一、概述 随着互联网技术的发展,Web Service作为一种标准的、基于XML的网络服务形式,在实现不同平台之间数据交换和应用集成方面扮演着重要角色。Axis作为Apache组织下的一...

    AXIS开发Web Service.docx

    AXIS 是 Apache 开源项目提供的一款强大的 Web Service 引擎,用于开发和部署 Web Service。在本文中,我们将深入探讨如何使用 AXIS 在 Tomcat 6.0.26 上进行配置,并详细介绍三种部署和调用 Web Service 的方法:...

    Axis开发Web Service程序教程

    【描述】: "本文旨在引导读者通过AXIS框架体验Web服务的开发流程,适合已有Web服务基础的Java、XML开发者学习。" 【标签】: "axis webservice soap java" 【内容】: 在Web服务的世界里,AXIS是一个关键的角色。...

    Axis开发Web Service的实例

    ### Axis开发Web Service的实例详解 #### 一、概述 在现代软件开发中,Web服务是一种重要的技术,它允许不同应用程序之间通过网络进行通信。Apache Axis是实现Web服务的一个流行框架,它支持SOAP协议,并提供了...

    Axis2与Eclipse整合开发Web Service

    【Axis2与Eclipse整合开发Web Service】是一个关于在Eclipse集成开发环境中使用Apache Axis2创建和部署Web服务的教程。Apache Axis2是用于构建Web服务的高效且灵活的框架,而Eclipse作为流行的Java IDE,提供了方便...

    axis开发web service程序

    ### Axis 开发 Web Service 程序详解 #### 一、Web Service 概念与应用场景 Web Service 是一种跨编程语言和操作系统平台的远程调用技术。它允许不同语言编写的程序通过网络进行通信和数据交换。Web Service 的...

    JAVA高级开发:使用Axis开发Web Service

    为了更多喜爱开发的程序员也能迅速了解Web Service的开发,我这里整理了一些通过Axis开发Web Service的一些要点,希望能让不熟悉Web Service的开发人员能够迅速掌握Web Service。

Global site tag (gtag.js) - Google Analytics