`
xm_koma
  • 浏览: 384378 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

基于soap形式封装xml请求编写webservie客户端

阅读更多

记录一个作为客户端,以Soap协议方式访问webservice接口服务端的工具类,也作为大家的一个参考。

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.URL;
import java.net.URLConnection;
import java.util.Map;

public class SOAPUtils {

	private static String getSoapRequest(String xmlPath,
			Map<String, String> params) {
		try {
			InputStreamReader isr = new InputStreamReader(new FileInputStream(
					new File(xmlPath)), "UTF-8");
			BufferedReader reader = new BufferedReader(isr);
			String soap = "";
			String tmp;
			while ((tmp = reader.readLine()) != null) {
				soap += tmp;
			}
			reader.close();
			isr.close();

			for (String paramName : params.keySet()) {
				String paramValue = params.get(paramName);
				soap = soap.replace(":" + paramName, paramValue);
			}

			return soap;
		} catch (Exception ex) {
			ex.printStackTrace();
			return null;
		}
	}

	/**
	 * 
	 * @param urlString
	 *            :webservice的url
	 * @param SOAPAction
	 *            :调用的接口中的方法名
	 * @param xmlPath
	 *            :传入参数的xml文件路径
	 * @param params
	 *            :需要传入的动态配置的参数
	 * @return:返回一个可指定编码的IO
	 * @throws Exception
	 */
	public static InputStreamReader getSoapInputStream(String urlString,
			String SOAPAction, String xmlPath, Map<String, String> params)
			throws Exception {
		try {
			String soap = getSoapRequest(xmlPath, params);
			if (soap == null) {
				return null;
			}
			URL url = new URL(urlString);
			URLConnection conn = url.openConnection();
			conn.setUseCaches(false);
			conn.setDoInput(true);
			conn.setDoOutput(true);

			conn.setRequestProperty("Content-Length", Integer.toString(soap
					.length()));
			conn.setRequestProperty("Content-Type", "text/xml; charset=utf-8");
			conn.setRequestProperty("SOAPAction", urlString + "/" + SOAPAction);

			OutputStream os = conn.getOutputStream();
			OutputStreamWriter osw = new OutputStreamWriter(os, "utf-8");
			osw.write(soap);
			osw.flush();
			osw.close();

			InputStream is = conn.getInputStream();
			// 指定返回编码
			InputStreamReader isr = new InputStreamReader(is, "UTF-8");

			return isr;
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}

	/**
	 * 将返回的IO转化为一个String返回
	 * 
	 * @param urlString
	 * @param SOAPAction
	 * @param xmlPath
	 * @param params
	 * @return
	 * @throws Exception
	 */
	public static String getSoapResponse(String urlString, String SOAPAction,
			String xmlPath, Map<String, String> params) throws Exception {
		InputStreamReader isr = getSoapInputStream(urlString, SOAPAction,
				xmlPath, params);
		StringBuffer result = new StringBuffer();
		int b = -1;
		while ((b = isr.read()) != -1) {
			result.append((char) b);
		}
		isr.close();
		return result.toString();
	}

	/**
	 * xml文件中是一个soap协议形式的内容
	 * 
	 * @param xmlPath
	 * @return
	 */
	public static String getDemoResponse(String xmlPath) {
		try {
			InputStreamReader isr = new InputStreamReader(new FileInputStream(
					new File(xmlPath)), "UTF-8");
			BufferedReader reader = new BufferedReader(isr);
			String soap = "";
			String tmp;
			while ((tmp = reader.readLine()) != null) {
				soap += tmp;
			}
			reader.close();
			isr.close();

			return soap;
		} catch (Exception ex) {
			ex.printStackTrace();
			return null;
		}
	}
}

  在上述类中,getSoapInputStream方法中,请求参数(即传入的xml文件以及内容)需要指定编码格式(要与服务器要求的编码一致)。由于有时候作为访问客户端的机器默认编码有可能和接口服务器机器上的指定编码不一致,而导致结果文件或者结果IO都是默认采用客户端访问机的编码,从而产生乱码,所以返回xml结果的时候,最好也指定编码。

0
0
分享到:
评论

相关推荐

    WebServie 加减乘除

    Web服务(WebService)是一种基于互联网的标准方式,允许应用程序之间进行交互和数据交换。它使用XML(可扩展标记语言)作为数据格式,并通过HTTP(超文本传输协议)进行通信,确保了跨平台和跨语言的互操作性。本...

    WebService客户端调用WebService服务示例代码——java

    WebService客户端调用WebService服务示例代码,java代码,纯手工,包括直接httpClient直接发送Saop报文调用和利用wsimport -keep 生成客户端代码后调用两种方式的示例。因涉及商务账户密码隐私,因此代码中的有些账号...

    webservie开发技术

    2. 工作流程通常为:客户端发送一个SOAP请求到WebService服务器,服务器解析请求,执行相应的业务逻辑,然后返回一个SOAP响应给客户端。 二、主要技术组件 1. SOAP:作为数据交换的协议,SOAP定义了消息结构,使得...

    WebServie创建部署调用

    2. **生成客户端代理**:大多数开发环境提供了工具自动生成客户端代理类,这些类封装了与服务交互的所有细节。例如,Java的wsimport命令,C#的Add Service Reference功能。 3. **编写调用代码**:通过客户端代理类...

    Eclipese中一个简单的WebService(有客户端)

    - **SOAP(Simple Object Access Protocol)**: WebService主要基于SOAP协议,它是一种轻量级的XML消息格式,用于在Web上交换结构化和类型化的信息。 - **WSDL(Web Services Description Language)**: 描述Web服务...

    测试调用webservice接口客户端所开发的接口示例

    服务器端实现处理来自客户端的请求,而客户端代理类则负责调用远程服务。 4. 开发Web服务客户端: - 创建服务代理:首先,我们需要获取服务的WSDL(Web Service Description Language)文件,该文件描述了服务的...

    JAVA WebServie Client.docx

    - 在Eclipse中,可以通过右键点击项目 -&gt; New -&gt; Other -&gt; Web -&gt; Web Service Client Project 来引导生成基于WSDL的客户端代码。 3. **具体步骤**: - 选择“Add Web Service Reference”或类似的选项。 - 输入...

    webservice入门学习代码笔记

    - 使用SOAP消息:客户端根据WSDL生成SOAP请求,发送给服务端,服务端解析请求,执行相应操作,然后返回SOAP响应。 - 使用RESTful风格:虽然不是传统的Web服务模型,但REST(Representational State Transfer)风格...

    WebService 最简单搭建 Demo

    WebService是一种基于XML(Extensible Markup Language)的网络服务标准,它允许不同系统、平台之间的应用程序进行交互和数据共享。这个“WebService最简单搭建Demo”旨在为初学者提供一个快速上手的教程,帮助理解...

    axis1.4 部署解析webservie

    1.TOMCAT+AXIS的安装配置 首先机子上应该安装JDK1.5版本以上(带有XML解析包)。我这里是1.5.0.6 从APACHE的官方网站(www.apache.org)下载TOMCAT安装软件。下载版本要在4.0以上。这里用的是5.0版本。安装完后,...

    webservice实例 CXF的JAXWS和JAXRS实现 及JAXB标准接口实现带jar包

    CXF集成了JAXB,使得在处理XML消息时,无需编写大量的转换代码。 在提供的压缩包“ws_test”中,很可能包含了使用CXF实现的Web服务示例,包括JAX-WS和JAX-RS的服务端点,以及使用JAXB进行数据交换的类。这个实例...

    webservice的完整示例demo

    SOAP(简单对象访问协议)是基于XML的协议,常用于构建Web服务,用于在应用程序之间交换结构化信息。 【SpringBoot与CXF框架】 SpringBoot是Java领域一个极简的起步框架,它简化了创建独立的、生产级别的基于...

    这是链接SOAP的所需要的jar包

    使用webservie所用到的jar包,方便使用webservice类

    基于spring注解的cxf实现webservice

    提供的"webservie.cxf需要用的jar包"通常包含CXF的核心库、Spring的整合库以及相关的依赖。这些jar包确保了CXF和Spring能够正常工作,提供Web服务功能。在项目中,应将这些jar包添加到类路径中。 总结,基于Spring...

    MyEclipse开发WebService教程

    总结来说,MyEclipse开发Web Service的过程包括创建Web Service工程、编写服务类、设置服务注解、部署服务、创建客户端项目、生成客户端代理类以及编写测试类进行调用。这个过程涵盖了Java Web Service的基本原理,...

    maximo6-JAVA调用WEBSERVICE

    总结来说,调用MAXIMO6中的JAVA调用WEBSERVICE主要涉及获取WSDL,生成客户端代码,以及编写调用代码这三个步骤。理解这些步骤和相关工具的使用,对于进行系统集成和数据交互至关重要。在实际开发中,还需注意错误...

    webServiceDemo.zip

    工作中应用的webservice服务,一直以来做webservie的客户端比较多,这次领导让做webservice的服务端,网上找了很多的方案,如axis,jws和cxf,比较了一下,觉得cxf的webservice的服务是最好的,所以搞了个demo,以供...

    mvn+spring+mybatis+java6ws

    在这个项目中,使用Java 6标准来实现WebService,这是一种基于WSDL(Web Service Description Language)和SOAP(Simple Object Access Protocol)协议的远程调用方式。WebService允许不同的系统之间通过HTTP协议...

    动态调用webservice

    winfrom 程序调用 webServie 中方法,有两种方法 WebServCaller.cs /* *调用示例: * Hashtable ht = new Hashtable(); * ht.Add("str", "test"); * ht.Add("b", "true"); * XmlDocument xx = WebSvcCaller....

Global site tag (gtag.js) - Google Analytics