java_调用.net_WebService2.doc_第1页
java_调用.net_WebService2.doc_第2页
java_调用.net_WebService2.doc_第3页
java_调用.net_WebService2.doc_第4页
java_调用.net_WebService2.doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Java调用.net写的webservice2Java使用axis来调用.net写的asmx WebService,大体步骤如下。Axis需要用到的包如下:1. axis.jar2. commons-discovery-0.2.jar3. commons-logging-1.0.4.jar4. jaxrpc.jar5. wsdl4j-1.5.1.jarjava调用的代码如下:.net webService的GetSafeMode方法 WebMethod public string GetSafeMode(string factoryId, string simId) . return “0”; 上面的例子演示了怎样传递参数和接收返回值,传递string类型的数据。下面看看怎么解决传递Dataset的问题。(以下为转贴)原文地址:/blog/325610版权归原文作者所有package etpsmsws.etpsms.hnas; import java.util.Iterator; import space.QName; import org.apache.axis.client.Call; import org.apache.axis.client.Service; import org.apache.axis.message.MessageElement; import org.apache.axis.types.Schema; /* * * Title: * * * Description: * * * Copyright: Copyright (c) 2004 * * * Company: * * * author not attributable * version 1.0 */ public class testSoap2 public testSoap2() public static void main(String args) try String wsdlUrl = http:/test; String soapActionURI = HNAS.EtpSms.EtpSmsWS/GetRecvFromTemp; Service service = new Service(); Call call = (Call) service.createCall(); / / call.setOperationName(new QName(HNAS.EtpSms.EtpSmsWS, / EtpSmsWSSoap); call.setOperationName(new QName(HNAS.EtpSms.EtpSmsWS, GetRecvFromTemp); call.setTargetEndpointAddress(new .URL(wsdlUrl); call.addParameter(new QName(HNAS.EtpSms.EtpSmsWS, iMemberId), org.apache.axis.encoding.XMLType.XSD_INT, javax.xml.rpc.ParameterMode.IN); call.setReturnType(org.apache.axis.encoding.XMLType.XSD_SCHEMA); call.setUseSOAPAction(true); call.setSOAPActionURI(soapActionURI); Object objs = new Object 8918; Object res = call.invoke(objs); / System.out.println(res); Schema schema = (Schema) res; MessageElement messageElement = schema.get_any(); for (int i = 0; i messageElement.length; i+) / System.out.println(messageElementi.getChildElements(); / System.out.println(messageElementi.getRealElement() / .getChildren(); Iterator iterator = messageElementi.getChildElements(); while (iterator.hasNext() MessageElement m = (MessageElement) iterator.next(); m = m.getRealElement(); Iterator it = m.getChildElements(); while (it.hasNext() m = (MessageElement) it.next(); it = m.getChildElements(); while (it.hasNext() m = (MessageElement) it.next(); System.out.println(m.getValue(); catch (Exception ex) System.err.println(ex.toString(); 注意事项: 参数必须是String类型的,你定义的是啥类型不管。 setOperationName 要给方法名。 1. 概述 很多正在开发或者打算开发XML Web Services的程序员都问过这样的一个问题:我的Web Service返回的结果是一个DataSet类型的对象,但如果我的客户端不是用.NET写的(因而没有内建的DataSet类型), 那该如何调用这个Web Service并访问DataSet中的数据呢?。 对于这个问题,首先应该说的是:1)在多种语言共存的编程环境下,是不适合使用类似DataSet这种只属于特定语言的数据类型的。不管是在 XML Web Services还是CORBA的环境中,都应该尽量使用简单数据类型以及简单数据类型的数组。2)应当很谨慎的决定是否需要通过Web Service来返回大量数据。由于网络传输的开销既包括HTTP连接建立的时间,也包括传送数据的时间,因此需要在减少访问服务器次数和减少网络传输量 之间寻找一个合适的平衡。如非必须,则不适合通过Web Service传送含有几十条或者几百条数据的数据表。 然后,就问题本身而言,.NET Web Services返回的DataSet类型是可以直接被其他非.NET的客户端解析的,因为即便是DataSet类型的返回值,也会被表达成XML格式再 进行传输。下面的例子就是一个返回类型为DataSet的Web Method,及其被调用后返回的XML格式数据: 2. 创建.NET Web Services,返回数据集合 WebMethod public DataSet GetPersonTable(string str) . DataTable table = new DataTable(Person); table.Columns.Add(Name); table.Columns.Add(Gender); table.Rows.Add(new string2 . Alice, Female ); table.Rows.Add(new string2 . Bob, Male ); table.Rows.Add(new string2 . Chris, Female ); table.Rows.Add(new string2 . Dennis, Male ); table.Rows.Add(new string2 . Eric, Male ); DataSet dataset = new DataSet(PersonTable); dataset.Tables.Add(table); return dataset; 3. 在Java中调用.NET Web Services,处理返回的数据集合 try . String wsdlUrl = http:/localhost/WebSite1/Service.asmx?op=GetPersonTable; String soapActionURI = /GetPersonTable; Service service = new Service(); Call call = (Call) service.createCall(); / call.setOperationName(new QName(/,GetPersonTable); call.setTargetEndpointAddress(new .URL(wsdlUrl); call.addParameter(a, org.apache.axis.encoding.XMLType.XSD_STRING, javax.xml.rpc.ParameterMode.IN); call.setReturnType(org.apache.axis.encoding.XMLType.XSD_SCHEMA); call.setUseSOAPAction(true); call.setSOAPActionURI(soapActionURI); Object objs = new Object.ssss; Object res = call.invoke( objs ); System.out.println(res); Schema schema = (Schema)res; DefaultTableModel model=new DefaultTableModel(new S,gender,0); schema.get_any()1.getChildNodes().getLength(); int nLength=schema.get_any()1.getChildNodes().item(0).getChildNodes().getLength(); String name=N/A; String gender=N/A; for(int i=0;inLength;i+) . if(schema.get_any()1.getChildNodes().item(0).getChildNodes().item(i).getChildNodes().item(0).getNodeName().equals(Name) . name=schema.get_any()1.getChildNodes().item(0).getChildNodes().item(i).getChildNodes().item(0).getFirstChild().getNodeValue(); if(schema.get_any()1.getChildNodes().item(0).getChildNodes().item(i).getChildNodes().item(1).getNodeName().equals(Gender) . gender=schema.get_any()1.getChildNodes().item(0).getChildNodes().item(i).getChildNodes().item(1).getFirstChild().getNodeValue(); model.addRow(new S,gender); this.jScrollPane1.getViewport().add(jTable1, null); jTable1.setModel(model); catch (Exception ex) . System.err.println(ex.toString(); public String ValidateUser(String uId,String uPwd);需传2个参数,字符串类型的用户名和密码(需按顺序填写,以下同理)返回succ表明验证通过,fail表明验证不通过在java中调用如下:public static void main(String args) try String endpoint = 08:8080/Controls/services/UserInfo;/ip地址 Service service = new Service(); Call call = null; call = (Call) service.createCall(); call.setOperationName(new QName(endpoint, ValidateUser);/方法名 call.setTargetEndpointAddress(new .URL(endpoi

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论