加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

webservice传递ResultSet结果

发布时间:2020-12-17 01:02:44 所属栏目:安全 来源:网络整理
导读:webservice只能够传递一些简单的数据,如果传递一些复杂的数据就很麻烦。这时候可以自己写bean来传递 但是像ResultSet这样的数据结构是不断变化的,写bean的话就很麻烦了,不可能每次查询都专门写一个bean 还有一种方法就是把resultset算换成XML然后再变成by

webservice只能够传递一些简单的数据,如果传递一些复杂的数据就很麻烦。这时候可以自己写bean来传递

但是像ResultSet这样的数据结构是不断变化的,写bean的话就很麻烦了,不可能每次查询都专门写一个bean

还有一种方法就是把resultset算换成XML然后再变成byte[]传递。



下面这个类是把ResultSet转换成Document:

package com.web.Beans;


import java.io.FileOutputStream;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;


import org.jdom.Document;
import org.jdom.Element;
import org.jdom.Namespace;
import org.jdom.Text;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;


public class XMLManager { ? ? ? ? ? ? ? ? ? ? ? ? ?//XML文件相关的处理
public ?Document SQL2DOC(ResultSet rs) ? ?//把ResultSet转换成Document
{
Document doc = new Document(); ? ? ?//创建一个新文档
Element root=new Element("ResultSet"); ? ? //创建根节点
doc.setRootElement(root); ? ? ? ? ? ?//设置根节点
ResultSetMetaData rsmd;
int numberOfColumns=0,i=0;
Element em=null,emn=null;
String value=null; ? ? ? ? ?//存储每一列的值
//System.out.println("SQL->DOC初步成功!");
try {
rsmd = rs.getMetaData(); ? ? ? ? ? //获取字段名
numberOfColumns= rsmd.getColumnCount(); //获取字段数
//System.out.println("SQL->DOC,列数:"+numberOfColumns);
String[] names =new String[numberOfColumns]; ? ?//names存储列名
for(i=1;i<=numberOfColumns;i++)
names[i-1]=rsmd.getColumnName(i); ? ? ? ? ? ? ?//获取每列的名称
//System.out.println("获取列名成功");
while(rs.next())
{
//System.out.println("查询结果不为空");
? ? ? ? ? ? ? ? ?em=new Element("row"); ? ? ? //创建一个以每行为单位的节点
? ? ? ? ? ? ? ? ?for(i=1;i<=numberOfColumns;i++)
? ? ? ? ? ? ? ? ?{
? ? ? ? ? ? ? ? value=rs.getString(i).toString(); ? ? //获得每列的值?
? ? ? ? ? ? ? ? emn=new Element(names[i-1]); ? ? ? ? ? //创建每列为单元的节点
? ? ? ? ? ? ? ? emn.addContent(value); ? ? ? ? ? ? ? ? ?//把值赋给节点
? ? ? ? ? ? ? ? em.addContent(emn); ? ? ? ? ? ? ? ? ? ? //把节点赋给每行单位的节点
? ? ? ? ? ? ? ? ?}
? ? ? ? ? ? ? ? ?root.addContent(em); ? ? ? ? ? ? ? ? ? ? ? ?//把每行赋给根节点
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}?
return doc;
}

public ?XMLOutputter SQL2XML(ResultSet rs) ? ?//把ResultSet转换成XMLOutputter
{
Document doc = new Document(); ? ? ?//创建一个新文档
Element root=new Element("ResultSet"); ? ? //创建根节点
doc.setRootElement(root); ? ? ? ? ? ?//设置根节点
ResultSetMetaData rsmd;
int numberOfColumns=0,emn=null;
String value=null; ? ? ? ? ?//存储每一列的值
try {
rsmd = rs.getMetaData(); ? ? ? ? ? //获取字段名
numberOfColumns= rsmd.getColumnCount(); //获取字段数
String[] names = null; ? ?//names存储列名
for(i=1;i<=numberOfColumns;i++)
names[i-1]=rsmd.getColumnName(i); ? ? ? ? ? ? ?//获取每列的名称
while(rs.next())
{
? ? ? ? ? ? ? ? ?em=new Element("row"); ? ? ? //创建一个以每行为单位的节点
? ? ? ? ? ? ? ? ?for(i=1;i<=numberOfColumns;i++)
? ? ? ? ? ? ? ? ?{
? ? ? ? ? ? ? ? value=rs.getString(i).toString(); ? ? //获得每列的值?
? ? ? ? ? ? ? ? emn=new Element(names[i-1]); ? ? ? ? ? //创建每列为单元的节点
? ? ? ? ? ? ? ? emn.addContent(value); ? ? ? ? ? ? ? ? ?//把值赋给节点
? ? ? ? ? ? ? ? em.addContent(emn); ? ? ? ? ? ? ? ? ? ? //把节点赋给每行单位的节点
? ? ? ? ? ? ? ? ?}
? ? ? ? ? ? ? ? ?root.addContent(em); ? ? ? ? ? ? ? ? ? ? ? ?//把每行赋给根节点
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}?


XMLOutputter outputter = null;?
? ?Format format = Format.getCompactFormat();?
? ?format.setEncoding("GB2312");?
? ?format.setIndent(" ? ?");?
? ?outputter = new XMLOutputter(format);?
return outputter;

}
public static void XMLTest(){ ?//测试创建XML文件
? ?try{?
? ? ?Document doc = new Document();?
? ? ? ?
? ? ?Namespace ns = Namespace.getNamespace("http://www.bromon.org");?
? ? ?Namespace ns2 = Namespace.getNamespace("other","http://www.w3c.org");?
? ? ? ?
? ? ?Element root = new Element("根元素",ns);?
? ? ?root.addNamespaceDeclaration(ns2);?
? ? ?doc.setRootElement(root);?
? ? ? ?
? ? ?Element el1 = new Element("元素一");?
? ? ?el1.setAttribute("属性","属性一");?
? ? ?Text text1 = new Text("元素值");?
? ? ? ?
? ? ?Element em = new Element("元素二").addContent("第二个元素");?
? ? ?el1.addContent(text1);?
? ? ?el1.addContent(em);?
? ? ? ?
? ? ?Element el2 = new Element("元素三").addContent("第三个元素");?
? ? ? ?
? ? ?root.addContent(el1);?
? ? ?root.addContent(el2);?
? ? ? ?
? ? ?XMLOutputter outputter = null;?
? ? ?Format format = Format.getCompactFormat();?
? ? ?format.setEncoding("GB2312");?
? ? ?format.setIndent(" ? ?");?
? ? ?outputter = new XMLOutputter(format);?
? ? ? ?
? ? ?outputter.output(doc,new FileOutputStream("C:a.xml"));?
? ?}catch(Exception e){?
? ? ?e.printStackTrace();?
? ?}?
?}?
}


下面这个类就是把Document转换成ByteArrayOutputStream:

package com.web.Beans;


import java.io.BufferedOutputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;


import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;
import org.jdom.xpath.XPath;


/**
*JDOM解析XML
*@FileName:JdomXML.java
*@DATE 2008-02-03
*
*/


public class JdomXML
{
?/**
?* 定义xml编码方式
?*/
?public static final String ENCODING_GBK="GBK";
?public static final String ENCODING_UTF8="UTF-8";
?public static final String ENCODING_UTF16="UTF-16";
?public static final String ENCODING_GB2312="gb2312";
?public static final String ENCODING_ISO8859="ISO8859-1";
?
?private static Format format=Format.getCompactFormat(); ? ? ??
?
?static{
format.setEncoding(ENCODING_GB2312); ? ? ? ?//该句可以解决汉字乱码问题
?}
?
?/**
?* 通过给定的xml文件名来读取并且解析它
?*@param filepath要解析的xml文件路径
?*@return the JDOM document parsed from thd file.
?*@throws IOException
?*?
?*/
?
?public static Document readDocument(String filePath)throws IOException
?{
? try{
? ?SAXBuilder builder=new SAXBuilder(false);
? ?Document doc=builder.build(new File(filePath));
? ?return doc;
? }catch(Exception ex){
? ?ex.printStackTrace();
? ?throw new IOException(ex.getMessage());
? }
?}
?
??
?/**
?* 通过InputStream来读取并且解析它
?*@param input ?输入流
?*@return the JDOM document parsed from thd file.
?*@throws IOException
?*?
?*/
?public static Document readDocument(InputStream inputStream)throws IOException
?{
? try{
? ?SAXBuilder builder=new SAXBuilder(false);
? ?Document doc=builder.build(inputStream);
? ?return doc;
? }catch(Exception ex){
? ?ex.printStackTrace();
? ?throw new IOException(ex.getMessage());
? }
?}
?
?/**
?*读取xml文件
?*@param srcFile 目标文件
?*@return the JDOM document parsed from thd file.
?*@throws IOException
?*?
?*/
?
?public static Document readDocument(File srcFile)throws IOException
?{
? try{
? ?SAXBuilder builder=new SAXBuilder(false);
? ?Document doc=builder.build(srcFile);
? ?return doc;
? }catch(Exception ex){
? ?ex.printStackTrace();
? ?throw new IOException(ex.getMessage());
? }
?}
?


?/**
?* 将xml文档模型输出到标准输出设备(流)
?* @param document 指定的xml文档模型
?*/
?public ByteArrayOutputStream outputDocumentbyte (Document document) {
System.out.println("进入outputDocument");
format.setIndent(" ");
format.setExpandEmptyElements(false);
ByteArrayOutputStream bout = new ByteArrayOutputStream();
XMLOutputter outputter = new XMLOutputter(format);
try {
outputter.output(document,bout);
//outputter.output(document,new FileOutputStream("c:/testxml.xml"));
} catch (Exception e) {
? ? e.printStackTrace();
}
return bout;
?}
?
?/**
? * 将xml文档模型输出到标准输出设备(流)
? * @param document 指定的xml文档模型
? */
? public OutputStream outputDocument (Document document) {
?ByteArrayOutputStream bout= outputDocumentbyte (document);
? return (OutputStream)bout;
? }
?
?/**
?* 将xml文档模型输出到指定文件
?* @param document 指定的xml文档模型
?* @param outputFilePath 输出文件路径
?*/
?public static void outputDocumentToFile(Document document,String outputFilePath) {
?outputDocumentToFile(document,outputFilePath,ENCODING_GB2312);
?}
?

?/**
?* 将将xml文档模型输出到指定字符串
?* @param document 指定的xml文档模型
?* @return 返回document的内容
?*/
?public static String outputDocumentString(Document document){
?
?return outputDocumentString(document,ENCODING_GBK);
?}
?
?/**
?* 将将xml文档模型输出到指定字符串
?* @param document 指定的xml文档模型
?* @param encodingMode 编码格式
?* @return 返回document的内容
?*/
?public static String outputDocumentString(Document document,String encodingMode){
?format.setEncoding(encodingMode);
?format.setIndent(" ");
?format.setExpandEmptyElements(false);
?XMLOutputter outputter = new XMLOutputter(format);
?return outputter.outputString(document);
?}

?}


然后webservice调用上面的2个类:

package com.web.services;


import java.io.ByteArrayOutputStream;
import java.io.OutputStream;
import java.sql.ResultSet;


import org.jdom.Document;


import com.web.Beans.JdomXML;
import com.web.Beans.XMLManager;
import com.web.manager.ColumnManager;


public class ColumnService { ? ? ? ? ? ? //栏目相关的services
ColumnManager colm=new ColumnManager(); ? ? ? ? ? ? ? ?//这个类是栏目处理的类,替换成为自己的就OK了
XMLManager xmlm=new XMLManager();
JdomXML jx=new JdomXML();
public byte[] getInforById(String columnid,? //通过栏目Id来获得栏目的相关信息
? ? String lev1id)
{
//System.out.println("连接webservice成功!");
ResultSet rs=colm.getInforById(columnid,lev1id);
//System.out.println("查询数据库成功!");
Document doc=xmlm.SQL2DOC(rs);
//System.out.println("SQL->DOC成功!");
ByteArrayOutputStream boutput=jx.outputDocumentbyte(doc);?
System.out.println("数据库结果:"+boutput.toString());
//System.out.println("DOC->output成功!");
byte[] bt=boutput.toByteArray();
//System.out.println("ByteArrayOutputStream->byte[]成功!");
return bt;
}
}
?



然后客户端接受byte[]:

package com.web.test.stubs;


import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.net.URL;


import org.apache.axis.client.Call;
import org.apache.axis.client.Service;


public class DatabaseClient { ? ?//数据库测试
public static void main(String argss[]) throws Exception
{
Service s = new Service(); ? ?
? ?Call call = (Call)s.createCall();
? ?call.setTargetEndpointAddress(new URL("http://localhost:8080/axis/services/columnservice?wsdl"));
? ?call.setOperationName("getInforById");
? ?byte[] result = (byte[])call.invoke(new Object[]{"1","0"});
? ?InputStream in=new ByteArrayInputStream(result); ? ? ? ? ? ? ?//byte[]转换成InputStream,有待于解析XML 文件使用 ? ?String Sresult = result.toString(); ? ? ?? ? ?//System.out.println(result); ? ?System.out.println(Sresult); } }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读