博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java调用.NET webservice方法的几种方式
阅读量:6845 次
发布时间:2019-06-26

本文共 2914 字,大约阅读时间需要 9 分钟。

  hot3.png

一. 使用axis1.x调用webservice方法 
Axis的最常用版本:1.4和2.0版本。以下为1.4版本 
核心代码: 
// webserviceURL 
      service_url = "http://vip.cxcod.com/PodApi/GetPodStr.asmx?wsdl"; 
      Service service = new Service(); 
      Call call = (Call) service.createCall(); 
      call.setTargetEndpointAddress(new java.net.URL(service_url)); 
// 设置要调用的方法 
// http://intelink.net/是wsdl中definitions根节点的targetNamespace属性值 
call.setOperationName(new QName("http://intelink.net/","GetStrByJobno")); 
// 该方法需要的参数 
call.addParameter("CustNo", 
org.apache.axis.encoding.XMLType.XSD_STRING, 
javax.xml.rpc.ParameterMode.IN); 
call.addParameter("passwd", 
org.apache.axis.encoding.XMLType.XSD_STRING, 
javax.xml.rpc.ParameterMode.IN); 
call.addParameter("Jobno", 
org.apache.axis.encoding.XMLType.XSD_STRING, 
javax.xml.rpc.ParameterMode.IN); 
// 方法的返回值类型 
call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING); 
// call.setUseSOAPAction(true); //call.setSOAPActionURI("http://intelink.net/GetStrByJobno"); 
// 调用该方法, new Object[] { CustNo, passwd, Jobno}为参数列表 
String xmlStr = call.invoke(new Object[] { CustNo, passwd, Jobno}).toString(); 
} catch (Exception e) { 
e.printStackTrace(); 
JAVA用这种方式调用webservice,需要注意的地方: 
1. 服务器未能识别 HTTP 标头 SOAPAction 的值: 
症状一: 
Web Service + ASP.NET 应用程序部署到服务器默认目录中,在IE中用http://<服务器地址>/<程序目录名>/<默认启动页面名>发生“服务器未能识别 HTTP 标头 SOAPAction 的值”错误。 
症状二: 
在Java平台上调用.NET Web Service的服务时,出现"服务器未能识别 HTTP 标头 SOAPAction 的值"。 
症状三: 
在Java平台下调用.NET WEB Service,出现数据时有时无。 
解决对策: 
给.NET的WebService类(即.asmx文件下的类)添加属性[SoapDocumentService(RoutingStyle=SoapServiceRoutingStyle.RequestElement)] 
小知识: 
什么是SoapAction?它在WSDL中有何作用? 
SOAPAction HTTP request header被用来标识SOAP HTTP请求的目的地,其值是个URI地址。SOAP发送并不限制格式、URI特征或其必须可解析,那么在这种情况下,发送一个HTTP SOAP请求时,其HTTP客户端必须使用/指明SOAPAction HTTP request header。 
SOAPAction header的内容可以被用在服务端,诸如:防火墙适当的过滤基于HTTP的SOAP请求消息等场景。SOAPAction header的值为空串("")表示SOAP消息的目的地由HTTP请求的URI标识;无值则表示没有指定这条消息的目的地。 
本人补充: 
在.NET环境调用.NET WebService出现 “SOAPAction 值在 XML Web services 的所有方法中不唯一的错误”,也可以通过此法解决。 
2. 为了Java能够调用WebService的方法,所以。NETP写的WebServiced的每个方法都要声明为Rpc方法,即添加"[SoapRpcMethod.....]". 
例如:[WebMethod] 
        [SoapRpcMethod(Use=SoapBindingUse.Literal,Action= http://tempuri.org/HelloWorld", RequestNamespace = "http://tempuri.org/", ResponseNamespace = "http://tempuri.org/")] 
3. 对返回值、参数的处理上: 
应尽量将webservice方法的返回值、参数都写成字符串(String)不要使用复杂对象类型,这样便于在网络上传输。避免了复杂对象类型的不易转换问题。。。对于返回类型是字符串数组型的,可以设置返回类型为 org.apache.axis.encoding.XMLType.SOAP_VECTOR或java.lang.String[].class. 
二.利用xfire调用WebService 
XFire是新一代的Java Web服务引擎,XFire使得在JavaEE应用中发布Web服务变得轻而易举。和其他Web服务引擎相比,XFire的配置非常简单,可以非常容易地和Spring集成,它使得Java开发人员终于可以获得和.Net开发人员一样的开发效率。 
核心代码: 
Service service = new ObjectServiceFactory().create(IWebservice.class); 
XFireProxyFactory factory = 
new XFireProxyFactory(XFireFactory.newInstance().getXFire()); 
String url= "http://localhost:8080/webservices/services/webservices"; 
IWebservice iw = (IWebservice) factory.create(service, url); 
List list=iw.getTest();

转载于:https://my.oschina.net/leafe/blog/32918

你可能感兴趣的文章
IMP 导入表结构到指定用户
查看>>
windows下FTP连接linux简单演示-dos操作
查看>>
redhat6启动U盘安装
查看>>
H3C 交换机 和windows NPS结合实现内网802.1X认证
查看>>
device "eth0" does not seem to be present, delaying initialization
查看>>
mysql日志
查看>>
深入理解jQuery插件开发
查看>>
Hibernate 马上入门(一)
查看>>
linux安装redis键值数据库服务器
查看>>
我的友情链接
查看>>
搭建lnmp环境
查看>>
maven 使用学习01:在windows 7下安装和配置maven
查看>>
ora-1493,no data found
查看>>
show slave status需要什么权限
查看>>
Wordpress后台自动更新相关设置与解答
查看>>
mysql命令之reset slave all
查看>>
脚本安全
查看>>
MYSQL外键(Foreign Key)的使用
查看>>
RHEL 7 静态IP地址配置
查看>>
linux 负载均衡(4层)
查看>>