`
liyuandong
  • 浏览: 331728 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

阅读更多
   最近做项目,涉及到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();

4
0
分享到:
评论
2 楼 破牛仔裤 2012-05-08  
你好,知不知道传入对象和返回的样式对象怎么写哟,我现在是传入的参数是String就没得问题,传入对象就出错了   服务器无法处理请求。 ---> 未将对象引用设置到对象的实例。  可不可以帮忙解决一下
1 楼 282514781 2011-01-19  
如果可以的话
请把完整源代码发给我谢谢了282514781

相关推荐

    java处理.net webservice返回的对象

    在Java中调用.NET编写的ASMX WebService是一种常见的跨平台交互方式,允许Java应用程序利用.NET框架提供的服务。本文将详细介绍如何使用Apache Axis库来实现这一功能,以及处理.NET WebService返回的对象,特别是...

    asp.net调用java webservice实例

    ### ASP.NET 调用 Java WebService 实例详解 #### 背景介绍 随着互联网技术的发展,跨平台、跨语言的服务交互变得越来越重要。Web Service 技术为不同编程环境之间的服务通信提供了一种标准的方式。本文将详细介绍...

    Java调用.net webservices实例

    本教程将通过一个具体的实例,讲解如何使用Java调用.NET Webservices,帮助初学者理解和掌握这两种技术的结合使用。 首先,理解Web Services的基本概念至关重要。Web Services是一种基于网络的、标准化的模块化应用...

    Java调用WebService接口的方法

    本文将深入探讨如何使用Java调用WebService接口,以实例分析有参方法Add的使用技巧。 首先,我们需要了解WebService的基础知识。WebService是一种基于开放标准(如SOAP、WSDL和UDDI)的Web应用程序,它能够通过HTTP...

    PB调用JAVA WEBSERVICE实例

    标题中的“PB调用JAVA WEBSERVICE实例”指的是使用PowerBuilder(PB)应用程序调用由Java编写的Web服务。在企业级应用开发中,不同语言之间的互操作性是非常重要的,而Web服务提供了一种标准的方式来实现这一点。让...

    几种调用WebService的方法

    ### 几种调用WebService的方法 #### WebService简介与调用方法概述 WebService是一种通过标准的Web协议(如HTTP)来提供服务的应用程序接口(API),它允许在不同平台、不同语言开发的应用程序之间进行通信。...

    如何用.net调用java或net写的webservice

    在.NET中,调用基于WSDL的Java WebService主要分为以下几个步骤: 1. **生成客户端代理类**: 使用.NET SDK中的`wsdl.exe`工具,可以自动生成与Java WebService接口匹配的代理类。例如,打开命令行窗口,然后运行...

    java WebService调用的几种方式详细源代码

    本篇文章将详细介绍Java中调用WebService的几种常见方法,并提供相应的源代码示例。 1. **SOAP(Simple Object Access Protocol)调用**: SOAP是WebService的主要通信协议,基于XML格式的数据交换。在Java中,...

    WebService在.NET中的实战应用一

    总结来说,本主题深入浅出地探讨了在.NET环境下使用WebService进行实际开发的技术要点,包括WebService的基本原理、创建过程、服务调用以及具体的.NET实现方式。通过实例学习,开发者可以更好地理解和掌握WebService...

    Java调用webService应用.zip

    在Java中,有几种常用的方式来调用SOAP WebService: 1. **JAX-WS (Java API for XML Web Services)**:这是Java官方提供的标准API,用于创建和消费SOAP WebServices。JAX-WS包括了如`javax.jws.WebService`注解,...

    Spring.net结合Webservice

    7. **项目结构**:"SpringWebservicesSample"可能包括以下几个部分:服务接口、服务实现、配置文件(用于设置IoC和AOP规则)、客户端代码(用于调用Webservice)以及可能的测试用例。每个部分都有其特定的角色,共同...

    WSDl生成WebService接口及调用

    Web服务(WebService)是一种基于互联网的、平台独立的交互方式,允许不同的系统之间进行数据交换。WSDL(Web Services Description Language)是XML格式的规范,用于定义Web服务及其操作、消息格式、通信协议等,...

    Java使用SOAP获取webservice实例解析

    在这个示例中,我们使用了 Java 语言来调用 Webservice,需要引入相关的包,包括 java.io、java.net 和 java.util.Vector。首先,我们需要定义一个 URL 字符串,用于连接 Webservice 的服务器。然后,我们需要定义一...

    动态调取webservice返回json数据并处理

    调用WebService的过程通常分为以下几步: 1. 创建WebService客户端:根据WebService的WSDL(Web服务描述语言)文件,可以自动生成客户端代理类。对于.NET平台,可以使用`svcutil.exe`工具或在Visual Studio中添加...

    调用WEBService参数

    调用WebService的过程通常包括以下几个步骤: 1. **获取WSDL文档**:WSDL文档是WebService的接口定义,它描述了服务的地址、方法、输入输出参数等。客户端需要解析WSDL以了解如何与服务通信。 2. **创建客户端代理...

    DotNet调用SAP Rfc接口(Winform, Webservice, WebApp)

    接下来,将详细介绍如何通过.NET实现与SAP系统的集成,包括通过Winform、Webservice和WebApp三种不同的方式调用SAP Rfc接口。 ##### Winform 示例 1. **新建Winform项目并添加引用**: - 新建一个Winform项目,并...

    android平台调用webservice

    本主题将深入探讨如何在Android应用中调用Web服务,特别是基于SOAP协议的Web服务,即“Android与服务器端数据交互(基于SOAP协议整合android+webservice)”。 SOAP(Simple Object Access Protocol)是一种轻量级...

    C++调用webservice接口.docx

    而对于C++开发者来说,虽然C++本身并不像Java或.NET那样原生支持WebService,但通过一系列工具和技术的支持,同样可以实现对WebService的有效调用。本文档将详细介绍如何使用C++调用WebService提供的接口,并给出...

Global site tag (gtag.js) - Google Analytics