webService调用浅谈(一)

本文主要讲述,使用java语言调用webservice的几种方法,和针对于获取的报文文件解析的一些看法。

再次之前先推荐一种工具,soapui这个工具可以很好的实现测试webservice的连通性,并且可以直接获取、

webservice服务上对应的值。

第一部分:调用方法

第一种方式采用soap的方式:下面是需要引用的包axis.jar

import javax.xml.*;

下面附上一部分的测试代码:

public String getwebservice() throws Exception {  
  String temp = "";//用来存放返回的报文内容
  try {

//实例化一个soap连接对象工厂
    SOAPConnectionFactory soapConnFactory = SOAPConnectionFactory.newInstance();

//实例化一个连接对象
    SOAPConnection connection = soapConnFactory.createConnection();

//实例化一个消息对象         
    MessageFactory messageFactory = MessageFactory.newInstance();

//实例化一个消息
    SOAPMessage message = messageFactory.createMessage();

//获取消息中soap消息部分的句柄 
    SOAPPart soapPart = message.getSOAPPart();

//获取soap消息部分中的信封句柄
    SOAPEnvelope envelope = soapPart.getEnvelope();

//获取信封中需要填写的请求报文部分的句柄
    SOAPBody body = envelope.getBody();

//以上内容均是实例化各个对象

//下面函数作用为构建请求头,一共三个参数,其中第一个参数为要访问webservice中的那个函数的函数名(注意大小写敏感)

第二个参数需要按照情况来拼接,可以先访问对方的webservice地址查看是否标签中有这个元素

第三个参数为访问空间,也就是对应于wsdl文档中的namespace内容。          
    SOAPElement bodyElement = body.addChildElement(envelope.createName(operationName , "web", targetNamespace));

//此访问距离假定我要访问的webservice函数有两个参数

//下面是第一个参数为参数名(大小写敏感)而第二个参数和第三个参数要视具体的webservice而定
    SOAPElement firstElemnt = bodyElement.addChildElement(envelope.createName("" , "", ""));
    Name firstName = envelope.createName("type");

//firstName为入参一的值,后面的是入参的类型
    firstElemnt.addAttribute(firstName, "String");
    firstElemnt.addTextNode();

//以上就是第一个参数的添加

//下面是第二个参数的添加和第一个没有任何区别
    SOAPElement secondElemnt = bodyElement.addChildElement(envelope.createName("" , "", ""));
    Name secondName = envelope.createName("type");
    secondElemnt.addAttribute(secondName, "String");
    secondElemnt.addTextNode();

//下面这句话的意思是保存消息的修改               
    message.saveChanges();

//下面的webServiceURL为webservice的访问地址
    String destination = webServiceURL;

//下面为调用
    SOAPMessage reply = connection.call(message, destination);

//如果返回的消息不为空需要进行处理
    if(reply!=null)
    {

//这部分的处理就是将返回的值转换为字符串的格式,也就是流和串之间的转换
        Source source = reply.getSOAPPart().getContent();
        Transformer transformer = TransformerFactory.newInstance().newTransformer();
        ByteArrayOutputStream myOutStr = new ByteArrayOutputStream();
        StreamResult res = new StreamResult();
        res.setOutputStream(myOutStr);
        transformer.transform(source,res);

//针对于汉子的编码格式,需要自己制定
        temp = myOutStr.toString("UTF-8"); 
    }

//注意!一定要关闭连接
    connection.close();
  }
  catch(Exception e)
  {
    System.out.println(e.getMessage());
  }  
  if(temp == null)
  {
   temp = "";
  }
  return temp;
 }

以上就是第一种使用java调用webservice的方法。

有兴趣的朋友可以尝试一下。

好了第一部分暂时到这里,下一篇将会介绍另外一种的调用方式。

时间: 2024-08-05 22:27:52

webService调用浅谈(一)的相关文章

webService调用浅谈(二)

第二种使用java语言调用webservice方法如下: 第二种方法使用的httpclient的方法,需要引入的包为apache的包 import org.apache.* 下面是测试代码: public String updateLeechdom() throws Exception { //首先定义访问的格式和头,这部分的由来最简单的办法就是直接将对方提供的webservice地址在浏览器中访问获取 //注意用转义符处理特殊符号 String xml = "<?xml version=

webservice安全性浅谈

原文地址:http://www.cnblogs.com/chhuic/archive/2009/11/19/1606109.html 做项目时,经常会用到WebService来通讯,但WebService发布后为了能调用,一般都通过发布到IIS后调用 的.在IIS里可以通过匿名访问,但这样大家都可能访问,不安全,因此可以提供操作系统分配一个帐号来登录到IIS .这只是对访问服务器上的文件进行了限制,以前我也是采用这种方式,上次看到另 一种方法来防止 别人调用WebService,就是对方面进行加

C# 方法 虚方法的调用浅谈 引用kdalan的博文

我们在面试中经常碰到有关多态的问题,之前我也一直被此类问题所困扰,闹不清到底执行哪个方法. 先给出一道简单的面试题,大家猜猜看,输出是? public class A    {        public void MethodF()         {             Console.WriteLine("A.F");         }        public virtual void MethodG()         {             Console.Wr

浅谈WebService的调用&lt;转&gt;

0.前言 前段时间,公司和电信有个合作,产品对接电信的某个平台,使用了WebService接口的调用,实现了业务受理以及单点登录.终于使用到了WebService,楼主还是比较兴奋的,目前功能已经上线,下面进行使用总结.WebService涉及到内容还是比较多的,涉及到发布和调用,有不少知识点,本文只是最简单的调用. 1.WebService简介 WebService是基于soap协议(简单对象访问协议全写为Simple Object Access Protocol)的,所有的webServic

浅谈WebService SOAP、Restful、HTTP(post/get)请求

HTTP-GET 和 HTTP-POST HTTP-GET和HTTP-POST是标准协议,他们使用HTTP(超文本传输协议)谓词(谓词是指条件表达式的求值返回真或假的过程.)对参数进行编码并将参数作为名称/值对传递,还使用关联的请求语义.每个协议都包含一系列HTTP请求标头,HTTP请求标头及其他一些信息定义客户端向服务器请求哪些内容,哪个服务器用一系列HTTP响应标头和所请求的数据进行响应. HTTP-GET 使用 MIME 类型 application/x-www-form-urlencod

Web Service进阶(七)浅谈SOAP Webservice和RESTful Webservice

浅谈SOAP Webservice和RESTful Webservice REST是一种架构风格,其核心是面向资源,REST专门针对网络应用设计和开发方式,以降低开发的复杂性,提高系统的可伸缩性.REST提出设计概念和准则为: 1.网络上的所有事物都可以被抽象为资源(resource) 2.每一个资源都有唯一的资源标识(resource identifier),对资源的操作不会改变这些标识 3.所有的操作都是无状态的 REST简化开发,其架构遵循CRUD原则,该原则告诉我们对于资源(包括网络资源

浅谈Windows平台下C++调用静态链接库的方式

浅谈Windows平台下C++调用静态链接库的方式 1. 什么是静态链接库?为什么要用静态链接库? 维基百科上关于静态库的解释是这样的:在计算机科学里,静态库(英语:Static library, Statically-linked library),或称静态库,是一个外部函数与变量的集合体.静态库的文件内容,通常包含一堆程序员自定的变量与函数,其内容不像动态链接库那么复杂,在编译期间由编译器与连接器将它集成至应用程序内,并制作成目标文件以及可以独立运作的可执行文件. 由上面的解释可以很清楚的看

浅谈REST API

浅谈REST API 说明: 本文部分内容根据其它网络文章编写,如有版权问题请及时通知. 背景 发迹于互联网的REST,在国内国外混得可谓是风生水起,如今又进入电信行业的视野,连TMF都将其作为战略项目Open Digital的一部分. 一种思维方式影响了软件行业的发展.REST软件架构是当今世界上最成功的互联网的超媒体分布式系统.它让人们真正理解我们的网络协议HTTP本来面貌.它正在成为网络服务的主流技术,同时也正在改变互联网的网络软件开发的全新思维方式. 引自:http://www.blog

浅谈中间件

浅谈中间件 1. 由来 因为工作的原因,我从金蝶集团调入金蝶中间件公司工作以来,经常遇到一个问题就是中间件公司是个什么公司,中间件是什么?,金蝶不是做ERP的吗?怎么也做中间件?.这是我以前在金蝶集团时无法想象的问题.因为金蝶,金蝶ERP的品牌以及大众对ERP的了解,是无需我解析什么是ERP,什么是财务软件一类的问题的. 毕竟,中间件在实际的应用过程中,是对应用软件起到支撑作用,最终用户并不直接使用中间件,中间件不是大众消费类软件产品.因此,除非是一个行业专业人士,一般不大可能与中间件打交道,不