<%@ page contentType="text/html; charset=gb2312"%> 使用Java客户端类调用c# WebService和xml rpc server
网站公告:   ◆北天JAVA技术网热情为java爱好者服务,本网内容包括JAVA(JSP、servlet、EJB、webservice、j2ee、javabean、应用服务器、JavaScript),数据库(MYSQL、SQL Server、Sybase、Oracle、DB2、数据库综合知识),设计研究(设计模式、Struts、Spring、Hibernate、设计框架、设计综合知识),WEB2.0新技术(主要介绍AJAX),以及各种技术的入门、实例、例子等等,欢迎各位多来坐坐!◆  诚邀各位JAVA爱好者加盟!◆  本网站内容丰富,更新快,保证每周20篇以上!  
加入收藏
设为首页
联系站长
承接项目
  相关资源:网站首页 | 免费培训学院 | 技术论坛 | JAVA聊天室 | 作家专栏 | 开发工具 | 认证考试 | 会员俱乐部
  JAVA技术初学者园地 | jsp与servlet | javascript | Java源代码 | EJB | web service | 应用服务器 | JAVA综合知识
  设计研究设计模式 | 设计框架 | Struts | Spring | Hibernate | 开源项目 | 面向对象设计 | 设计综合知识
  数 据 库MYSQL | SQL Server | Sybase | Oracle | DB2 | Informix | Access | 数据库综合知识
  其他资源:AJAX新技术 | 网站开发 | ERP软件 | OA办公软件 | 商业智能BI | 开发综合知识 | 承接项目 | 项目试用

 
 
使用Java客户端类调用c# WebService和xml rpc server
     发布者: 发布时间:2007-11-26
  本文介绍一个非常实用的Java客户端工具类来调用C# WebServices和apache xml rpc server,这个类的源码是从网上下载的,我在博客网做项目的时候一直使用这个类来调试C# WebServices和MetaWeblog API。顺便在这里也给大家介绍一下C#如何处理此类发送的xml数据。使用这个类不用安装任何第三方工具,因为采用http的方式发送xml文件,所以你只需要安装好JDK就可以了。执行此类还可以获得WebServices或xml rpc server返回的xml字符流,你可以根据返回的xml数据来进行其他程序处理。通过这种方式实现了Java平台和.NET平台的数据交换和WebService调用。下面是此类的源代码SOAPClient4XG.java:/*** SOAPClient4XG. Read the SOAP envelope file passed as the second* parameter, pass it to the SOAP endpoint passed as the first parameter, and* print out the SOAP envelope passed as a response. with help from Michael* Brennan 03/09/01*** @author Bob DuCharme* @version 1.1* @param SOAPUrl URL of SOAP Endpoint to send request.* @param xmlFile2Send A file with an XML document of the request.** 5/23/01 revision: SOAPAction added*/import java.io.*;import java.net.*;public class SOAPClient4XG {public static void main(String[] args) throws Exception {if (args.length < 2) { //小于System.err.println("Usage: java SOAPClient4XG " +"http://soapURL soapEnvelopefile.xml" +" [SOAPAction]");System.err.println("SOAPAction is optional.");System.exit(1);}String SOAPUrl = args[0];String xmlFile2Send = args[1];String SOAPAction = "";if (args.length > 2) //大于SOAPAction = args[2];// Create the connection where we're going to send the file.URL url = new URL(SOAPUrl);URLConnection connection = url.openConnection();HttpURLConnection httpConn = (HttpURLConnection) connection;// Open the input file. After we copy it to a byte array, we can see// how big it is so that we can set the HTTP Cotent-Length// property. (See complete e-mail below for more on this.)FileInputStream fin = new FileInputStream(xmlFile2Send);ByteArrayOutputStream bout = new ByteArrayOutputStream();// Copy the SOAP file to the open connection.copy(fin,bout);fin.close();byte[] b = bout.toByteArray();// Set the appropriate HTTP parameters.httpConn.setRequestProperty( "Content-Length",String.valueOf( b.length ) );httpConn.setRequestProperty("Content-Type","text/xml; charset=utf-8");httpConn.setRequestProperty("SOAPAction",SOAPAction);httpConn.setRequestMethod( "POST" );httpConn.setDoOutput(true);httpConn.setDoInput(true);// Everything's set up; send the XML that was read in to b.OutputStream out = httpConn.getOutputStream();out.write( b );out.close();// Read the response and write it to standard out.InputStreamReader isr =new InputStreamReader(httpConn.getInputStream());BufferedReader in = new BufferedReader(isr);String inputLine;while ((inputLine = in.readLine()) != null)System.out.println(inputLine);in.close();}// copy method from From E.R. Harold's book "Java I/O"public static void copy(InputStream in, OutputStream out)throws IOException {// do not allow other threads to read from the// input or write to the output while copying is// taking placesynchronized (in) {synchronized (out) {byte[] buffer = new byte[256];while (true) {int bytesRead = in.read(buffer);if (bytesRead == -1) break;out.write(buffer, 0, bytesRead);}}}}}编译:javac SOAPClient4XG.java运行的命令格式: java -classpath . SOAPClient4XG http://localhost/BokeServices/Service1.asmx c:\loginReq.xml http://tempuri.org/UserLoginReq,不过先不要运行上面的命令,先介绍一下命令行的意思,http://localhost/BokeServices/Service1.asmx是C# WebService的地址,c:\loginReq..xml里的内容是调用的WebService方法的xml文件, http://tempuri.org是WebService方法的命名空间,一定要有,否则调用失败,如果你在C# WebServices中使用了方法默认的命名空间的话,就使用http://tempuri.org,否则要与C#中定义的一致,UserLoginReq是C# WebServices的方法名。注意xml文件中的方法名和参数名是与C# WebServices的方法名、参数名是一一对应的(参数顺序是可以颠倒的)。我先介绍一个简单的例子(c:\loginReq.xml),这个xml文件调用了远程C# WebService的UserLoginReq方法,并带UserAcc(用户名)和UserPwd(口令)两个参数,调用成功后C#会自动返回一个xml格式的SOAP包。<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><UserLoginReq xmlns="http://tempuri.org/"><UserAcc>baozheng</UserAcc><UserPwd>mypwd</UserPwd></UserLoginReq></soap:Body></soap:Envelope>现在看一下C# WebServices的UserLoginReq的方法的定义:public struct UserLoginResp{public string UserAcc;public int Result;}[WebMethod]public UserLoginResp UserLoginReq(string UserAcc,string UserPwd,int ReqFrom){…}注意结构UserLoginResp,C# WebServices返回SOAP信息时会自动将UserLoginResp结构转换成xml的格式。用此类做xml rpc server 的客户端也很简单,下文是一个客户端rpc.xml文件,调用了xml rpc server 端实现的metaWeblog.deletePost方法。<?xml version="1.0" encoding="utf-8"?><methodCall><methodName>metaWeblog.deletePost</methodName><params><param><value>appKeyValue</value></param><param><value>746</value></param><param><value>baozheng</value></param><param><value>Hello123</value></param></params></methodCall>调用命令的格式:java -classpath %CLASSPATH%;. SOAPClient4XG. http://192.168.25.97:8080/BokeeXmlRpc/xml-rpc rpc.xml对比调用WebServices的命令行,可以看出调用xml rpc server的命令行少一个方法名参数。http://192.168.25.97:8080/BokeeXmlRpc/xml-rpc 是提供xml rpc 调用的server端servlet地址,关于如何用apache xml rpc技术实现MetalogAPI的帖子将在近期整理发布。注:上文的左右尖括号为保证正常发贴替换为全角。作者:王保政QQ:19803446Msn:baozhengw999@hotmail.comEmail:baozhengw@netease.com
(转载文章请保留出处:北天JAVA技术网(www.java114.com))
 
更多精彩文章:
为J2EE定制一个用来处理错误的异常处理框架
如何将apache的slide部署到Weblogic环境
WebDAV客户端开发实例
在Jetspeed2.0中安装JCMS
Java 理论与实践:让 J2EE 脱离容器
使用acegi在业务逻辑层获得Web层的用户ID
 
最近评论:
        
Chadwick
4962b401c658b3ecc65101bb7c93cbf4 http://njdokj.info/f2d0d0e53cf2aee34abdeafc0f1d3ec4/4962b401c658b3ecc65101bb7c93cbf4 http://njdokj.info/f2d0d0e53cf2aee34abdeafc0f1d3ec4/4962b401c658b3ecc65101bb7c93cbf4 [url]http://njdokj.info/f2d0d0e53cf2aee34abdeafc0f1d3ec4/4962b401c658b3ecc65101bb7c93cbf4[url]
        
春暖花开
wow power leveling2 wow power leveling gvf wow power levelingfcvg wow power leveling wow power leveling wow powerlevelingfcgv wow powerlevelingwq4 wow powerleveling wow powerleveling wow powerleveling world of warcraft power leveling world of warcraft power leveling world of warcraft power leveling world of warcraft power levelingszr world of warcraft power leveling world of warcraft powerleveling world of warcraft powerlevelinge5t world of warcraft powerleveling world of warcraft powerleveling world of warcraft powerleveling wow gold wow gold wow goldrfy5 wow gold wow gold world of warcraft goldre world of warcraft goldgh world of warcraft gold world of warcraft goldfr world of warcraft gold AOC Power Levelinggvgv AGE OF CONAN Power Levelingllwwbb928 z7u6t7sn
        
鍥炲
        
那个雨天的想法!
wow gold,wow power leveling.wow power leveling,wow power leveling, max(1993)
        
如果真的有来生!
四川旅游,九寨沟旅游,稻城亚丁旅游,四姑娘山旅游,海螺沟旅游,西藏旅游, max(3842)
        
左边的风景!
wow gold,wow power leveling.wow power leveling,wow power leveling, max(425)
        
轻轻走过你的窗前!
world of warcraft gold,cheap world of warcraft gold,warcraft gold,world of warcraft gold,cheap world of warcraft gold,warcraft gold, max(3367)
        
轻轻走过你的窗前!
world of warcraft gold,cheap world of warcraft gold,warcraft gold,world of warcraft gold,cheap world of warcraft gold,warcraft gold max(8072)
        
快乐情人节!
wow gold,wow gold,wow gold,wow gold,wow gold,wow gold,wow gold buy wow gold for cheap. max(5374)
        
昨夜的狂想曲!
wow gold,WoW Gold,world of warcraft gold,WoW Gold, max(9214)
        
标 题:   
内 容:   
 
                                  
 
免责声明:该文章由网友发表,如果对您造成侵权,请联系站长

首页 - 承接项目 - 网站地图 - 联系我们 -
版权所有北天JAVA技术工作室 ICP证号:粤ICP备06079815号