最近做项目,涉及到web-service调用,现学了一个星期,现简单的做一个小结。下面实现的是对传喜物流系统(
http://vip.cxcod.com/PodApi/GetPodStr.asmx?wsdl)的订单跟踪(web-service调用)功能。
一. 使用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();
分享到:
相关推荐
在Java中调用.NET编写的ASMX WebService是一种常见的跨平台交互方式,允许Java应用程序利用.NET框架提供的服务。本文将详细介绍如何使用Apache Axis库来实现这一功能,以及处理.NET WebService返回的对象,特别是...
### ASP.NET 调用 Java WebService 实例详解 #### 背景介绍 随着互联网技术的发展,跨平台、跨语言的服务交互变得越来越重要。Web Service 技术为不同编程环境之间的服务通信提供了一种标准的方式。本文将详细介绍...
本教程将通过一个具体的实例,讲解如何使用Java调用.NET Webservices,帮助初学者理解和掌握这两种技术的结合使用。 首先,理解Web Services的基本概念至关重要。Web Services是一种基于网络的、标准化的模块化应用...
本文将深入探讨如何使用Java调用WebService接口,以实例分析有参方法Add的使用技巧。 首先,我们需要了解WebService的基础知识。WebService是一种基于开放标准(如SOAP、WSDL和UDDI)的Web应用程序,它能够通过HTTP...
标题中的“PB调用JAVA WEBSERVICE实例”指的是使用PowerBuilder(PB)应用程序调用由Java编写的Web服务。在企业级应用开发中,不同语言之间的互操作性是非常重要的,而Web服务提供了一种标准的方式来实现这一点。让...
### 几种调用WebService的方法 #### WebService简介与调用方法概述 WebService是一种通过标准的Web协议(如HTTP)来提供服务的应用程序接口(API),它允许在不同平台、不同语言开发的应用程序之间进行通信。...
在.NET中,调用基于WSDL的Java WebService主要分为以下几个步骤: 1. **生成客户端代理类**: 使用.NET SDK中的`wsdl.exe`工具,可以自动生成与Java WebService接口匹配的代理类。例如,打开命令行窗口,然后运行...
本篇文章将详细介绍Java中调用WebService的几种常见方法,并提供相应的源代码示例。 1. **SOAP(Simple Object Access Protocol)调用**: SOAP是WebService的主要通信协议,基于XML格式的数据交换。在Java中,...
总结来说,本主题深入浅出地探讨了在.NET环境下使用WebService进行实际开发的技术要点,包括WebService的基本原理、创建过程、服务调用以及具体的.NET实现方式。通过实例学习,开发者可以更好地理解和掌握WebService...
在Java中,有几种常用的方式来调用SOAP WebService: 1. **JAX-WS (Java API for XML Web Services)**:这是Java官方提供的标准API,用于创建和消费SOAP WebServices。JAX-WS包括了如`javax.jws.WebService`注解,...
7. **项目结构**:"SpringWebservicesSample"可能包括以下几个部分:服务接口、服务实现、配置文件(用于设置IoC和AOP规则)、客户端代码(用于调用Webservice)以及可能的测试用例。每个部分都有其特定的角色,共同...
Web服务(WebService)是一种基于互联网的、平台独立的交互方式,允许不同的系统之间进行数据交换。WSDL(Web Services Description Language)是XML格式的规范,用于定义Web服务及其操作、消息格式、通信协议等,...
在这个示例中,我们使用了 Java 语言来调用 Webservice,需要引入相关的包,包括 java.io、java.net 和 java.util.Vector。首先,我们需要定义一个 URL 字符串,用于连接 Webservice 的服务器。然后,我们需要定义一...
调用WebService的过程通常分为以下几步: 1. 创建WebService客户端:根据WebService的WSDL(Web服务描述语言)文件,可以自动生成客户端代理类。对于.NET平台,可以使用`svcutil.exe`工具或在Visual Studio中添加...
调用WebService的过程通常包括以下几个步骤: 1. **获取WSDL文档**:WSDL文档是WebService的接口定义,它描述了服务的地址、方法、输入输出参数等。客户端需要解析WSDL以了解如何与服务通信。 2. **创建客户端代理...
接下来,将详细介绍如何通过.NET实现与SAP系统的集成,包括通过Winform、Webservice和WebApp三种不同的方式调用SAP Rfc接口。 ##### Winform 示例 1. **新建Winform项目并添加引用**: - 新建一个Winform项目,并...
本主题将深入探讨如何在Android应用中调用Web服务,特别是基于SOAP协议的Web服务,即“Android与服务器端数据交互(基于SOAP协议整合android+webservice)”。 SOAP(Simple Object Access Protocol)是一种轻量级...
而对于C++开发者来说,虽然C++本身并不像Java或.NET那样原生支持WebService,但通过一系列工具和技术的支持,同样可以实现对WebService的有效调用。本文档将详细介绍如何使用C++调用WebService提供的接口,并给出...