| |
| 使用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) |
|
|
| |
| 免责声明:该文章由网友发表,如果对您造成侵权,请联系站长。 |
|