北大青鸟

网站首页 > 常见IT技术问题 > Java开发 >

站内公告

Java调用.NET webservice方法的几种方式

责任编辑:宏鹏来源:武汉北大青鸟鲁广校区时间:2013-01-24 10:10:44
导读:Java调用.NET webservice方法的几种方式, 使用axis1.x调用webservice方法,利用xfire调用WebService。

一. 使用axis1.x调用webservice方法

Axis的常用版本:1.4和2.0版本。以下为1.4版本

 核心代码:

// webserviceURL

service_url = "//vip.cxcod.com/PodApi/GetPodStr.asmx?wsdl";

Service service = new Service();

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

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

// 设置要调用的方法

// //intelink.net/是wsdl中definitions根节点的targetNamespace属性值

call.setOperationName(new QName("//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("//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 标头 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= //tempuri.org/HelloWorld", RequestNamespace = "//tempuri.org/", ResponseNamespace = "//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= "//localhost:8080/webservices/services/webservices";

IWebservice iw = (IWebservice) factory.create(service, url);

List list=iw.getTest();

本文标题:Java调用.NET webservice方法的几种方式,责任编辑:宏鹏,来源:武汉北大青鸟鲁广校区栏目,于2013-01-24 10:10:44发布于北大青鸟鲁广校区。Java调用.NET webservice方法的几种方式, 使用axis1.x调用webservice方法,利用xfire调用WebService。

专业老师指导

赵老师

赵老师

从事IT教育培训十年有余,致力于帮助广大学子找到适合自己的专业

立即在线咨询

培训咨询客服

陈老师

陈老师

IT培训专业客服,用自己的真诚解决了无数学子的困惑

立即在线咨询

本文地址:https://m.027hpedu.com/wenda/java/2222.html

文章标题:Java调用.NET webservice方法的几种方式

上一篇:JAVA批量转换文件编码

下一篇:Java程序语言通用组合算法的实现

热点关注

推荐Java开发

热门Java开发

预约你的精彩未来

预约将免费领取7天课程体验卡

-------请选择试预约课程-------

JAVA
WEB前端
PHP
UI设计
Python
电子商务
视频剪辑
大数据工程师
平面设计

83345人已领取

全国百余家校区

只为您方便就学

北大青鸟鲁广校区

北大青鸟鲁广校区

武汉市洪山区珞喻路724号(地铁二号线光谷广场站F口出)

预约到校
领取学习大礼包

首页

热门课程

视频网课

新闻资讯

关于学校

联系学校

预约选课申请

  • 预约时间

    请选择预约时间

  • 预约课程

    请选择预约课程

  • 姓   名
  • 手机号
  • QQ 号
  • 微信号

添加老师微信号

专业老师24小时1对1学习指导

定制专属于你的专属学习方案

微信号:17740513250

复制老师的微信号

复制成功啦

快去微信添加老师为好友吧~

北大青鸟小青

微信号:17740513250

北大青鸟小青

微信号:17740513250

设置备注
小主知道啦