java调用webservice:Java和.NET 的Web Services相互调用来源: 发布时间:星期三, 2008年12月17日 浏览:160次 评论:0
:介绍
本文介绍了Java和.NET开发Web Services相互技术本文包括两个部分第部分介绍了如何用.NET做客户端Java写Web Services,第 2部分介绍了如何用Java做客户端.NET开发Web Services
2:项目需要工具
Windows2000 Server(IIS)
Jbuilder9.0( 含有Tomcat , axis)
JDK1.4+Java Web Services Develop
VS.Net 2003
备注:如果没有JBuilder话就需要自己下载安装Tomcat4.1 以及 Axis开发包并做相应配置由于网上有很多这样文章这里就不介绍说明了
3:用.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 服务单击Bean1WSDL连接我们可以在浏览器中察看它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 = JavaService.Bean1;
TextBox1.Text = bean.getSample. ;
这样个.NET客户端就完成了测试下工作正常OK.
4:用Java做客户端.NET写 Web Services
有了上面成功使我以为用Java做客户端也是件十分容易事情可实际情况却耗费了我两天时间才得以实现
1. 用VS.NET新建个Asp Web Services工程添加个web 服务命名为SumService.asmx新增个web method代码如下:
[WebMethod]
public IntAdd( a, b)
{
a+b ;
}
然后运行它并利用IE进行测试成功
2. 打开jbuilder9.0,新建个项目添加个java 命名为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..QName;
import java.lang.Integer;
import javax.xml.rpc.ParameterMode;
/**
* Title:
* Description: * Copyright: Copyright (c) 2004 * Company: * @author not attributable * @version 1.0 */ public TestNetService { public TestNetService { } public void (String args) { try { Integer i = Integer(1); Integer j = Integer(2); String endpo="http://localhost/MyServices/WebServiceTest/SumService.asmx"; Service service = Service; Call call = (Call)service.createCall; call.TargetEndpoAddress( java.net.URL(endpo)); call.OperationName( 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.ReturnType(org.apache.axis.encoding.XMLType.XSD_INT); call.UseSOAPAction(true); call.SOAPActionURI("http://www.my.com/Rpc"); Integer k = (Integer)call.invoke( Object{i,j}); .out.prln( "result is " + k.toString + "."); } catch (Exception e) {.err.prln(e.toString);} } } 运行上面java客户端你会发现系统会抛出个SoapAction异常奇怪如何会呢?想到了我开发asp web services没有指定SoapAction于是在SumService.asmx中 [web method] 上行添加下列代码: [SoapRpcMethod(Action="http://www.my.com/Rpc",RequestNamespace="http://www.my.com/SU",ResponseNamespace="http://www.my.com/SU")] 重新编译运行asp web services后在执行java这时会发现输出了正确结果3 这样用java.net生成web services也算初步完成了好像也不是很复杂是吧其实在实际工作中我开始并没有在网上找到个很好代码例子全部是依靠jbuilder 和 axis帮助完成, 可总是提示什么找不到相应SoapAction而实际上我在运行了asp web services后是可以在IE浏览器中看到那个SoapAction我试验过将默认SoapAction拷贝到java代码中但是java客户端依然抛出同样异常这要我也很迷惑 5:整理总结 经过两天试验终于从技术上明确了通过Web Services实现.net 和 java互通是可能当然有几点是需要注意: 1. 在提供Web Services时候尽量使用xml schema中支持变量类型做参数如果使用.net 中data这种类型对于java来说解析起来将是个灾难当然理论上是可以解析但是从效率角度来说在Web Services和客户端交换信息过程中始终有个序列化和反序列化问题如果使用data这种类型系统还需要对它进行序列化操作这将是个很耗费资源过程而使用类型将简单很多 2. 如果使用了soap header等扩展功能例如使用了微软提供WSE技术它们的间相互通信需要作特殊处理 0
相关文章
读者评论发表评论 |
|