日期:2012-09-22  浏览次数:20577 次

一:简介

本文介绍了Java与.NET开发的Web Services相互调用的技术。本文包括两个部分,第一部分介绍了如何用.NET做客户端调用Java写的Web Services,第二部分介绍了如何用Java做客户端调用.NET开发的Web Services。



二:项目需要的工具

Windows2000 Server(IIS)

Jbuilder9.0( 含有Tomcat , axis)

JDK1.4+Java Web Services Develop

VS.Net 2003

备注:如果没有JBuilder的话就需要自己下载安装Tomcat4.1 以及 Axis的开发包,并做相应配置。由于网上有很多这样的文章,这里就不一一说明了。



三:用.NET做客户端调用Java写的Web Services

1. 生成一个Java Web Services

使用JBuilder 生成一个Web Services是非常简单的,我完全是按照它的帮助做的,只要一步步做

下去就可以了。具体路径是Developing Web Services -> tutorials : Web Services(Axis) -> Creating a simple Web Services

2. 发布这个Web Services并得到它的WSDL

Web Services生成好之后,F9运行这个项目。然后,单击View浏览现有的Web 服务,单击Bean1的WSDL连接,我们可以在浏览器中察看它的WSDL描述。在浏览器地址栏复制WSDL地址,为下一步使用.NET开发客户端调用程序做准备。

3. 用VS.NET生成一个.NET的客户端

新建一个项目(WinForm,ASP.net都可以),我在这里使用的是一个Asp.Net项目。在起始页面上放置一个文本输入框用来显示调用Web Services的结果,放置一个按钮,用来单击调用Web Services。然后,选择添加Web 引用,在WSDL一栏中把刚才得到的WSDL地址复制过来,Web 引用的名称输入JavaService,单击添加引用按钮就可以了。此时,我们可以在VS.net 的Solution Explore中看到这个Web 引用。

在按钮的单击事件中输入下列代码:

JavaService.Bean1 bean = new JavaService.Bean1();

TextBox1.Text = bean.getSample.ToString ();



这样,一个.NET客户端就完成了,测试一下,工作正常,OK.



四:用Java做客户端调用.NET写的 Web Services

有了上面的成功,使我以为用Java做客户端调用也是一件十分容易的事情,可实际情况却耗费了我两天时间才得以实现。

1. 用VS.NET新建一个Asp Web Services工程,添加一个web 服务,命名为SumService.asmx。新增一个web method,代码如下:

[WebMethod]

public int IntAdd(int a,int b)

{

return a+b ;

}

然后运行它,并利用IE进行测试成功。

2. 打开jbuilder9.0,新建一个项目,添加一个java class ,命名为TestNetService,输入下列代码:

package MyWebServiceJavaClient;

import java.util.Date;

import java.text.DateFormat;

import java.util.Date;

import java.text.DateFormat;

import org.apache.axis.client.Call;

import org.apache.axis.client.Service;

import javax.xml.namespace.QName;

import java.lang.Integer;

import javax.xml.rpc.ParameterMode;



/**

* <p>Title: </p>

* <p>Description: </p>

* <p>Copyright: Copyright (c) 2004</p>

* <p>Company: </p>

* @author not attributable

* @version 1.0

*/



public class TestNetService {

public TestNetService() {

}



public static void main(String[] args) {

try {

Integer i = new Integer(1);

Integer j = new Integer(2);

String endpoint="http://localhost/MyServices/WebServiceTest/SumService.asmx";



Service service = new Service();

Call call = (Call)service.createCall();



call.setTargetEndpointAddress(new java.net.URL(endpoint));

call.setOperationName(new QName("http://www.my.com/SU","IntAdd"));



call.addParameter("a",org.apache.axis.encoding.XMLType.XSD_DATE,javax.xml.rpc.ParameterMode.IN);

call.addParameter("b",org.apache.axis.encoding.XMLType.XSD_DATE,javax.xml.rpc.ParameterMode.IN);

call.setReturnType(org.apache.axis.encoding.XMLType.XSD_INT);

call.setUseSOAPAction(true);

call.setSOAPActionURI("http://www.my.com/Rpc");





Integer k = (Integer)call.invoke(new Object[]{i,j});



System.out.println( "result is " + k.toString() + ".");

}

catch (Exception e) {System.err.println(e.toString());}