Java如何处理WebService返回的值(j2ee,j2me)

dawei2310 2009-10-26 09:20:28
c# webservice
内容是返回一个ds。
我们都知道返回的webservice 是以xml文件的形式展现给我们的。
dataset 值c#里的数据集 好比与table集合
webservice 方法里面是这样处理dataset ds的 。
如果
return ds;
则在web浏览器 访问是这种形式的:

<?xml version="1.0" encoding="utf-8" ?>
- <DataSet xmlns="http://www.digital-star.com.cn/">
- <xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
- <xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
- <xs:complexType>
- <xs:choice minOccurs="0" maxOccurs="unbounded">
- <xs:element name="Table">
- <xs:complexType>
- <xs:sequence>
<xs:element name="人员编号" type="xs:string" minOccurs="0" />
<xs:element name="中文姓名" type="xs:string" minOccurs="0" />
<xs:element name="撤销时间" type="xs:string" minOccurs="0" />
<xs:element name="相片" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
- <diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
- <NewDataSet xmlns="">
- <Table diffgr:id="Table1" msdata:rowOrder="0">
<人员编号>123465345</人员编号>
<中文姓名>张良</中文姓名>
<英文姓名 />
<别名或绰号 />
<性别>1</性别>
<出生日期>2009-01-08T10:10:39+08:00</出生日期>
<移交地址省市县区>张家口</移交地址省市县区>
<移交地址详细地址>潍坊市</移交地址详细地址>
<撤销时间>19520827175518</撤销时间>
</Table>
</NewDataSet>
</diffgr:diffgram>
</DataSet>



如果处理ds 则返回:
<?xml version="1.0" encoding="utf-8" ?> 
<base64Binary xmlns="http://www.digital-star.com.cn/">H4sIAJXSH4kA/7VYWVMbRxB
……
……
VBuMUDyMAAA==</base64Binary>


处理的方法是这样的

MeoryStream ms=new MemoryStream();
XmlSerializer ser = new XmlSerializer(typeof(DateSet));
ser.Serialize(ms,ds);
return CompressionHelper.Compress(buffer);



CompressionHelper.Compress(byte[] bytesToCompress){//方法内容:
MeoryStream ms=new MemoryStream();
Stream s = OUtputStream(ms);
s.Write(bytesToCompress,0,bytesToCompress.Length);
s.Close();
retrun ms.ToArray();
}


问题:
我现在要把
<?xml version="1.0" encoding="utf-8" ?> 
<base64Binary xmlns="http://www.digital-star.com.cn/">H4sIAJXSH4kA/7VYWVMbRxB
……
……
VBuMUDyMAAA==</base64Binary>

返回的结果给解出来
webservice 是不变的。我要在java程序上面解返回的xml文件
也就是我怎么处理
H4sIAJXSH4kA/7VYWVMbRxB
……
……
VBuMUDyMAAA==
这个。。
是被压缩了。
我如何的处理解压并且在java 或者J2ME 处理成的是dataset的形式!
注:C# webservice 不变 默认的返回就是
<?xml version="1.0" encoding="utf-8" ?> 
<base64Binary xmlns="http://www.digital-star.com.cn/">H4sIAJXSH4kA/7VYWVMbRxB
……
……
VBuMUDyMAAA==</base64Binary>

我要处理这个!
高分给出。希望能够解决
...全文
431 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
阁楼上的伟哥 2009-10-31
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 dawei2310 的回复:]
XML code<?xml version="1.0" encoding="utf-8"?><base64Binaryxmlns="http://www.digital-star.com.cn/">H4sIAJXSH4kA/7VYWVMbRxB
……
……
VBuMUDyMAAA==</base64Binary>
解压 上面的字节
大侠帮忙啊
[/Quote]
解决方法:
先把H4sIAJXSH4kA/7VYWVMbRxB提取出来付给字符串
把字符串通过base64编码 变成byte[]形式

byte[] bt = Base64.decode(String s);
即可转换

在通过Gzip 解压方式进行解压。

具体实施代码:
/***
* 压缩GZip
*
* @param data
* @return
*/
public static byte[] gZip(byte[] data) {
byte[] b = null;
try {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
GZIPOutputStream gzip = new GZIPOutputStream(bos);
gzip.write(data);
gzip.finish();
gzip.close();
b = bos.toByteArray();
bos.close();
} catch (Exception ex) {
ex.printStackTrace();
}
return b;
}

/***
* 解压GZip
*
* @param data
* @return
*/
public static byte[] unGZip(byte[] data) {
byte[] b = null;
try {
ByteArrayInputStream bis = new ByteArrayInputStream(data);
GZIPInputStream gzip = new GZIPInputStream(bis);
byte[] buf = new byte[1024];
int num = -1;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
while ((num = gzip.read(buf, 0, buf.length)) != -1) {
baos.write(buf, 0, num);
}
b = baos.toByteArray();
baos.flush();
baos.close();
gzip.close();
bis.close();
} catch (Exception ex) {
ex.printStackTrace();
}
return b;
}
dawei2310 2009-10-28
  • 打赏
  • 举报
回复
<?xml version="1.0" encoding="utf-8" ?> 
<base64Binary xmlns="http://www.digital-star.com.cn/">H4sIAJXSH4kA/7VYWVMbRxB
……
……
VBuMUDyMAAA==</base64Binary>

解压 上面的字节
大侠帮忙啊
swandragon 2009-10-26
  • 打赏
  • 举报
回复
解压?解析xml
不知道怎么解压
解析xml的方式java倒是很多
帮顶
pengrong 2009-10-26
  • 打赏
  • 举报
回复
顶下
dawei2310 2009-10-26
  • 打赏
  • 举报
回复
[code=XML]/<?xml version="1.0" encoding="utf-8" ?>
<base64Binary xmlns="http://www.digital-star.com.cn/">H4sIAJXSH4kA/7VYWVMbRxB
……
……
VBuMUDyMAAA==</base64Binary>[code]
我想把这个转为
[code=XML]

<?xml version="1.0" encoding="utf-8" ?>
- <DataSet xmlns="http://www.digital-star.com.cn/">
- <xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
- <xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
- <xs:complexType>
- <xs:choice minOccurs="0" maxOccurs="unbounded">
- <xs:element name="Table">
- <xs:complexType>
- <xs:sequence>
<xs:element name="人员编号" type="xs:string" minOccurs="0" />
<xs:element name="中文姓名" type="xs:string" minOccurs="0" />
<xs:element name="撤销时间" type="xs:string" minOccurs="0" />
<xs:element name="相片" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
- <diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
- <NewDataSet xmlns="">
- <Table diffgr:id="Table1" msdata:rowOrder="0">
<人员编号>123465345</人员编号>
<中文姓名>张良</中文姓名>
<英文姓名 />
<别名或绰号 />
<性别>1</性别>
<出生日期>2009-01-08T10:10:39+08:00</出生日期>
<移交地址省市县区>张家口</移交地址省市县区>
<移交地址详细地址>潍坊市</移交地址详细地址>
<撤销时间>19520827175518</撤销时间>
</Table>
</NewDataSet>
</diffgr:diffgram>
</DataSet>
[code]
在手机端 直接转如何实现
fansy007 2009-10-26
  • 打赏
  • 举报
回复
1. base64的encode decode可以用 commons-codec-1.3.jar(版本无所谓)

给你个小例子:

String data = XXX;
byte[] test = org.apache.commons.codec.binary.Base64
.decodeBase64(data.getBytes());


2. 至于怎么解析
<base64Binary xmlns="http://www.digital-star.com.cn/">H4sIAJXSH4kA/7VYWVMbRxB
……
……
VBuMUDyMAAA==</base64Binary>

A)如果response的结构比较复杂,且c#有response的xsd schema,你可以用jaxb做unmarshal
B) 如果仅仅为了读这个base64Binary,可以直接用正则表达式:

String pos_regex = "base64Binary>(.+?)<";
Pattern POS_PATTERN = Pattern.compile(pos_regex);
Matcher match = POS_PATTERN.matcher(xmlresp);
if (match.find()) {
return match.group(1);
} else {
return new String("");
}
lzh_me 2009-10-26
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 liangwansheng 的回复:]
c#?不会,顶一下。
[/Quote]
俺也不会,帮顶...
myloveyoyo1314 2009-10-26
  • 打赏
  • 举报
回复
既然 webservice 是不变的那就直接读喽 卡在哪了 没听懂
liangwansheng 2009-10-26
  • 打赏
  • 举报
回复
c#?不会,顶一下。
JAVA学习要点 一、关于Java 1、Java的三种体系: J2SE 用于桌面开发,低端商务开发(Java to Standard Edition) ; J2ME 用于移动电话、电子消费品、嵌入式开发(Java to Micro Edition) ; J2EE 企业级解决方案的开发,基于WEB的开发等,(Java to Enterprise Edition) ; 2、Java的特点: 序号 语言角度 学习角度 1 比C++简单,放弃了对指针的使用; 入门迅速,容易学; 2 目前最好的网络编程语言; 编写更少、更好的代码; 3 开放式先进的技术,可移植性强; 更快的开发程序 4 完全的OO(面向对象,单根结构) 的跨平台语言; 用纯Java编写的程序可以避免平台相关性; 5 分布式开发,支持多线程,可靠安全健壮; 一次编写,处处运行,可以更容易的发布软件; 3、主要的开源网站: ①www.Java.net ②www.apache.org ③www.sourceforge.net ④www.theserverside.com ⑤www.javaworld.com ⑥ www.chinalab.com 4、其他技术问题: 序号 特征 1 目前国内比较流行的技术组合:spring(www.springframework.com) + hibernate技术,还有webservice +XML技术; 2 J2EE的相关技术:EJB,SEVILET,JSP等; 3 源文件(*.java) --------->类文件(*.class) --------->java虚拟机(JVM) 编译器 解释器 4 应用程序层 Java应用程序 Java平台层 Java虚拟机 操作系统层 UNIX WINDOWS RTOS 硬件层 SPARC X86 MIPSPPC 二、面向对象的特征 序号 特征 1 面向对象的三个原则 封装性 封装的基本单元是类(class),类是一个抽象的逻辑结构,而类的对象是一个真实的物理实体;类的目的是封装复杂性,在类内部存在隐藏实现复杂性机制; 封装(encapsulation) 的两个好处: 模块化:可以独立于其他对象的源代码进行编写和维护,可以很容易的将对象在系统中传递; 隐藏信息:其他对象可以通过本对象的一个公共接口进行通信而不影响其他对象; 继承性 继承是一个对象获得另一个对象的属性的过程,继承机制是一个对象成为一个更具通用类的一个特定实例成为可能,避免了代码的重复编写; 多态性 (重载overload,方法名相同、参数的个数不同、参数的类型不同、返回的类型不同和覆盖override) ;多态性就是“一种接口,多种方法”,可以为一组相关的动作设计一个通用的接口,其实类的函数的重载就是一种多态的体现; 4 引入抽象编程的思想; 类的封装就是一种抽象思想

67,515

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧