`

Java调用以WSDL形式发布的web service

阅读更多
webservice的 发布一般都是使用WSDL(web service descriptive language)文件的样式来发布的,在WSDL文件里面,包含这个webservice暴露在外面可供使用的接口。今天搜索到了非常好的 webservice provider列表

http://www.webservicex.net/WCF/default.aspx


这上面列出了70多个包括很多方面的free webservice provider,utilities->global weather就可以获取全球的天气预报。

下面我们来看Java如何通过WSDL文件来调用这些web service:

注意,以下的代码并没有经过真正的测试,只是说明这些情况,不同版本的Axis相差很大,大家最好以apache网站上的例子为准,这里仅仅用于说明其基本用法。

1,直接AXIS调用远程的web service

我觉得这种方法比较适合那些高手,他们能直接看懂XML格式的WSDL文件,我自己是看不懂的,尤其我不是专门搞这行的,即使一段时间看懂,后来也就忘记了。直接调用模式如下:

import java.util.Date;

import java.text.DateFormat;

import org.apache.axis.client.Call;

import org.apache.axis.client.Service;

import javax.xml.namespace.QName;

import java.lang.Integer;

import javax.xml.rpc.ParameterMode;

public class caClient {

           

       public static void main(String[] args) {

              try {

                     String endpoint = "http://localhost:8080/ca3/services/caSynrochnized?wsdl";

                     //直接引用远程的wsdl文件

                    //以下都是套路
                     Service service = new Service();

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

                     call.setTargetEndpointAddress(endpoint);

                     call.setOperationName("addUser");//WSDL里面描述的接口名称

                     call.addParameter("userName", org.apache.axis.encoding.XMLType.XSD_DATE,

                                   javax.xml.rpc.ParameterMode.IN);//接口的参数

                     call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);//设置返回类型


                     String temp = "测试人员";
                     String result = (String)call.invoke(new Object[]{temp});

                     //给方法传递参数,并且调用方法

                     System.out.println("result is "+result);

              }

              catch (Exception e) {

                     System.err.println(e.toString());

              }

       }

}

2,直接SOAP调用远程的webservice

这种模式我从来没有见过,也没有试过,但是网络上有人贴出来,我也转过来

import org.apache.soap.util.xml.*;

import org.apache.soap.*;

import org.apache.soap.rpc.*;

import java.io.*;

import java.net.*;

import java.util.Vector;

public class caService{

       public static String getService(String user) {

       URL url = null;

       try {

           url=new URL("http://192.168.0.100:8080/ca3/services/caSynrochnized");

       } catch (MalformedURLException mue) {

          return mue.getMessage();

         }

             // This is the main SOAP object

       Call soapCall = new Call();

       // Use SOAP encoding

       soapCall.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC);

       // This is the remote object we're asking for the price

       soapCall.setTargetObjectURI("urn:xmethods-caSynrochnized");

       // This is the name of the method on the above object

       soapCall.setMethodName("getUser");

       // We need to send the ISBN number as an input parameter to the method

       Vector soapParams = new Vector();

       // name, type, value, encoding style

       Parameter isbnParam = new Parameter("userName", String.class, user, null);

       soapParams.addElement(isbnParam);

       soapCall.setParams(soapParams);

       try {

          // Invoke the remote method on the object

          Response soapResponse = soapCall.invoke(url,"");

          // Check to see if there is an error, return "N/A"

          if (soapResponse.generatedFault()) {

              Fault fault = soapResponse.getFault();

             String f = fault.getFaultString();

             return f;

          } else {

             // read result

             Parameter soapResult = soapResponse.getReturnValue ();

             // get a string from the result

             return soapResult.getValue().toString();

          }

       } catch (SOAPException se) {

          return se.getMessage();

       }

    }

}

3,使用wsdl2java把WSDL文件转成本地类,然后像本地类一样使用,即可。

这是像我这种懒人最喜欢的方式,仍然以前面的global weather report为例。

首先   java org.apache.axis.wsdl.WSDL2Java http://www.webservicex.net/globalweather.asmx.WSDL

原本的网址是http://www.webservicex.net/globalweather.asmx?WSDL,中间个各问号,但是Linux下面它不能解析,所以去掉问号,改为点号。

那么就会出现4个文件:

GlobalWeather.java GlobalWeatherLocator.java GlobalWeatherSoap.java GlobalWeatherSoapStub.java
其中GlobalWeatherSoap.java是我们最为关心的接口文件,如果你对RMI等SOAP实现的具体细节不感兴趣,那么你只需要看接口文件即可,在使用的时候,引入这个接口即可,就好像使用本地类一样。

转载自:http://hi.baidu.com/lraly/blog/item/90b64cf1191f84a9a40f52ae.html
分享到:
评论

相关推荐

    Java调用以WSDL形式发布的web service.doc

    Java调用以WSDL形式发布的Web服务是一种常见的实践,特别是在集成不同系统或平台时。WSDL,即Web服务描述语言(Web Service Description Language),是一种XML格式的规范,它定义了Web服务的接口、消息结构、地址和...

    Java调用以WSDL形式发布的web_service.doc

    在Java编程中,调用以WSDL(Web Service Description Language)形式发布的Web服务是一项常见的任务。WSDL是一种XML格式的规范,它定义了服务的位置、服务提供的操作以及如何调用这些操作。本篇将深入讲解如何使用...

    教案Java调用以WSDL形式发布的webservice.pdf

    Java调用以WSDL(Web Service Description Language)形式发布的Web服务是Java开发中常见的任务,尤其是在集成不同系统或服务时。WSDL文件是一种XML格式,它定义了Web服务的接口,包括服务的位置、提供的操作以及...

    Java 调用wsdl例子

    Java 调用 WSDL 例子是指使用 Java 语言来调用远程的 Web 服务,该 Web 服务是通过 WSDL 文件发布的。在 WSDL 文件中,包含了该 Web 服务暴露在外面的接口信息。 WSDL 文件是 Web 服务描述语言的缩写,用于描述 Web...

    java的wsdl语言实现web service的服务创建和调用实例

    在本实例中,我们将探讨如何使用Java和WSDL来创建和调用Web Service。 一、创建Web Service 1. 定义WSDL文件:首先,你需要创建一个WSDL文件来描述你的服务。WSDL文件定义了服务的端点(也称为SOAP地址),服务的...

    使用CXF: Java 2 WSDL

    总结,"使用CXF:Java 2 WSDL"涉及到使用Apache CXF框架从Java接口生成WSDL文档,这一过程对于构建Web服务尤其有用。通过理解CXF的工作原理和相关工具的使用,开发者可以更高效地开发和管理Web服务项目。

    把wsdl文件转换成java类 使用wsdl2Java工具

    为了在Java环境中与这些Web服务交互,我们需要将WSDL文件转换为Java类,这就是`wsdl2java`工具的作用。 `wsdl2java`是Apache Axis项目的一部分,它是一个强大的工具,可以自动生成Java客户端和服务端代码,这些代码...

    通过本地java代码访问wsdl接口

    标题中的“通过本地Java代码访问WSDL接口”指的是在Java编程环境中,利用WSDL(Web Service Description Language)文件来创建客户端代理类,从而调用远程Web服务。WSDL是一种XML格式,它定义了Web服务的接口,包括...

    java调用webservice wsdl源码

    Java调用WebService是Web应用程序间交互的一种常见方式,特别是当需要跨语言、跨平台通信时。WSDL(Web服务描述语言)是定义这些服务接口的标准,它提供了服务的元数据,包括服务的位置、操作方法以及如何与服务进行...

    WSDL生成Web Service java客户端

    本教程将围绕“WSDL生成Web Service java客户端”这一主题,详细介绍如何利用WSDL文件创建Java客户端来调用Web服务。 首先,WSDL文件是一种XML格式的文档,它描述了一个Web服务的接口,包括服务提供的操作、消息...

    Java6开发的web service,发布https的wsdl地址

    Web服务是一种基于网络的、平台无关的接口,它通过SOAP(Simple Object Access Protocol)协议传输数据,并使用WSDL描述服务接口。WSDL是XML格式的文档,用于定义服务的端点、消息结构和操作。 对于Java开发者来说...

    Java解析wsdl文档获取具体的方法与参数

    总结,Java解析WSDL文档获取具体的方法与参数涉及的主要知识点包括:XML解析(DOM)、JAX-WS框架、`javax.xml.ws.Service`类的使用,以及如何基于WSDL生成服务客户端代码。理解这些概念,将有助于开发和消费Web服务...

    Web Service 解读天气预报WSDL获取天气程序

    在这个特定的项目中,我们关注的是如何使用Web Service来获取天气预报信息,特别是通过解析WSDL(Web Services Description Language)文件。WSDL是一种XML格式,用于定义服务的位置、接口以及如何调用这些服务。 ...

    Java调用.NET web service

    在.NET中,我们可以使用C#编写Web Service,它通常是以ASMX(ASP.NET Web Service)或WCF(Windows Communication Foundation)的形式存在。而在Java环境中,我们则可以使用JAX-WS(Java API for XML Web Services)...

    wsdl2java命令使用

    在Web服务开发中,WSDL(Web Service Description Language)是一种XML格式,用于定义服务接口、操作、消息结构等。它使得服务提供者和服务消费者可以进行互操作。Apache Axis是Java平台上的一个开源Web服务框架,...

    Java调用WSDL

    "Java 调用 WSDL" Java 调用 WSDL 是一种常见的技术,它允许 Java 应用程序调用远程... Java 调用 WSDL 文件是通过解析 WSDL 文件来获取服务的接口和操作信息,然后使用 AXIS 库或 SOAP 库等来调用远程的 Web 服务。

    wsdl first开发web service(maven插件自动生成代码)

    综上所述,这篇博文或教程将详细阐述如何利用Maven插件在WSDL First的开发模式下,高效地生成Web Service的Java代码,并进行集成和测试。这对于理解和实践Web Service开发,尤其是对于自动化流程的掌握,具有很高的...

    java 调用https webservice实例及axis包

    2. **生成客户端代理类**:使用Axis的`wsdl2java`工具,从Web Service的WSDL(Web Service描述语言)文件生成Java客户端代理类。这一步可以通过命令行或者Ant脚本完成。 3. **配置HTTPS**:在生成的客户端代码中,...

    Java6 开发的Web Service, 发布https的wsdl地址,服务端打包程序

    本话题主要聚焦于如何使用Java6开发Web Service,并将其部署为支持HTTPS的WSDL(Web Service Description Language)地址,以及如何将整个服务打包成可执行的JAR程序。 首先,我们需要理解Java6中的JAX-WS(Java ...

    java转wsdl方法

    Java到WSDL(Web Service Definition Language)的转换是将Java接口或类转化为可供Web服务使用的规范定义的过程。Axis2是一个流行的开源Java Web服务框架,它提供了这种转换功能。本篇文章将详细探讨Java转WSDL以及...

Global site tag (gtag.js) - Google Analytics