Java HTTP方式请求ASP.NET(C#)WebService

2023-11-05

package com.ideamov.wap.util;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.StringWriter;
import java.net.ConnectException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.SocketTimeoutException;
import java.net.URL;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.apache.log4j.Logger;
import org.w3c.dom.Document;
import org.xml.sax.SAXException;

import com.sun.org.apache.xml.internal.serialize.OutputFormat;
import com.sun.org.apache.xml.internal.serialize.XMLSerializer;

/**
 * @date 2013-10-29
 * @category 远程访问WebService获取数据并转化返回为XML
 */
public class WSClient {

 public static final String SERVICE_HOST = "http://127.0.0.1:8090";//目标主机地址
 public static final String SERVICE_URL = "http://127.0.0.1:8090/TestService.asmx/";//WebService访问地址
 /**
  * 连接超时时间(单位:毫秒)
  */
 public static final int TIMEOUT = 20000;
 private static String serverURL;//调用WebService完整地址
 
 public static Logger log = Logger.getLogger(WSClient.class.getClass());//日志记录对象
 
 /**
  * 调用WebService服务
  * @param requestMethod:请求方式:GET 或 POST
  * @param getDataKeyStr:WebService中的方法名称
     * @param paramString: 过滤数据条件
  * @return Document DOM对象
  */
 public static Document callServiceForDoc(String requestMethod,String functionName,String paramString) {
  InputStream inputStream = null;
  Document document = null;
  URL url = null;
  HttpURLConnection urlConn=null;
  DocumentBuilderFactory documentBuilderFactory = null;
  DocumentBuilder documentBuilder = null;
  try {
   documentBuilderFactory = DocumentBuilderFactory.newInstance();
   documentBuilderFactory.setNamespaceAware(true);
   documentBuilder = documentBuilderFactory.newDocumentBuilder();
   if("GET".equalsIgnoreCase(requestMethod)){//GET方式
    serverURL = SERVICE_URL+functionName+"?"+paramString;
    log.error("【请求WebService地址:"+serverURL+",请求方式:"+requestMethod.toUpperCase()+",请求参数:"+paramString+"】");
    url = new URL(serverURL);
    urlConn = (HttpURLConnection)url.openConnection();
    urlConn.setRequestMethod("GET");
    urlConn.setRequestProperty("Host", SERVICE_HOST);
    urlConn.setConnectTimeout(TIMEOUT);//(单位:毫秒)
    urlConn.setReadTimeout(TIMEOUT);//(单位:毫秒)
    urlConn.connect();
    inputStream = urlConn.getInputStream();
    document = documentBuilder.parse(inputStream);
    inputStream.close();
    urlConn.disconnect();
   }else if("POST".equalsIgnoreCase(requestMethod)){//POST方式
    serverURL = SERVICE_URL+functionName;
    log.error("【请求WebService地址:"+serverURL+",请求方式:"+requestMethod.toUpperCase()+",请求参数:"+paramString+"】");
    url = new URL(serverURL);
    urlConn = (HttpURLConnection)url.openConnection();
    urlConn.setRequestMethod("POST");
    //urlConn.setRequestProperty("Content-type", "text/XML; charset=utf-8");
    
    urlConn.setConnectTimeout(TIMEOUT);//(单位:毫秒)
    urlConn.setReadTimeout(TIMEOUT);//(单位:毫秒)
    urlConn.setDoOutput(true);
    byte[] byteArray = paramString.getBytes();
    urlConn.getOutputStream().write(byteArray, 0, byteArray.length);
    urlConn.getOutputStream().flush();
    urlConn.getOutputStream().close();
    inputStream = urlConn.getInputStream();
    document = documentBuilder.parse(inputStream);
    inputStream.close();
    urlConn.disconnect();
   }else{
    log.error(">>>>WebService请求方式错误!");
   }
  } catch (ParserConfigurationException e) {
   log.error("请求Webservice异常:解析配置文件异常!"+e.getMessage());
   e.printStackTrace();
   document = null;
  } catch (MalformedURLException e) {
   log.error("请求Webservice异常:URL协议错误!"+e.getMessage());
   e.printStackTrace();
   document = null;
  } catch (ConnectException e){
   log.error("请求WebService连接超时!"+e.getMessage());
   e.printStackTrace();
   document = null;
  } catch(SocketTimeoutException e) {
   log.error("请求WebService连接超时!"+e.getMessage());
   e.printStackTrace();
   document = null;
  } catch (IOException e) {
   if(urlConn!=null){
    try {
     int errorCode = urlConn.getResponseCode();
     String errorMessage = "请求Webservice异常!服务器返回状态码:";
     switch(errorCode){
     case 400:
      log.error(errorMessage+"400,错误的请求!");
      break;
     case 403:
      log.error(errorMessage+"403,服务器拒绝访问!");
      break;
     case 404:
      log.error(errorMessage+"404,请求地址不存在!");
      break;
     case 500:
      log.error(errorMessage+"500,WebService服务器内部错误!");
      break;
     case 503:
      log.error(errorMessage+"503,WebService服务不可用!");
      break;
     default:
      log.error(errorMessage+errorCode);
         break;
     }
    } catch (IOException e1) {
     e1.printStackTrace();
    }
   }
   document = null;
  } catch (SAXException e) {
   log.error("请求Webservice异常:SAXException!"+e.getMessage());
   e.printStackTrace();
   document = null;
  }
  docToString(document);//输出返回的XML
  return document;
 }
  
 /**
  * org.w3c.dom.Document 转换为 String
  *
  * @param org.w3c.dom.Document对象
  * @return String
  */
 public static String docToString(Document doc) {
  String docStr = "";
  if(doc!=null){
   try{
    TransformerFactory transformerFactory = TransformerFactory.newInstance();               
    Transformer transformer = transformerFactory.newTransformer();               
    transformer.setOutputProperty("encoding", "UTF-8");               
    ByteArrayOutputStream outputStream = new ByteArrayOutputStream();               
    transformer.transform(new DOMSource(doc), new StreamResult(outputStream));               
    //docStr = outputStream.toString();
    docStr = outputStream.toString("UTF-8");
    log.error("\n**********************     【org.w3c.dom.Document对象转XML字符串内容:】       **********************\n"+docStr);
   }catch(Exception e){
    log.error("org.w3c.dom.Document对象转XML字符串发生异常!异常原因:"+e.getMessage());
    e.printStackTrace();
   }
  }
  return docStr;
 }
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java HTTP方式请求ASP.NET(C#)WebService 的相关文章

  • 如何将本机库链接到 IntelliJ 中的 jar?

    我正在尝试在 IntelliJ 中设置 OpenCV 但是我一直在弄清楚如何告诉 IntelliJ 在哪里可以找到本机库位置 在 Eclipse 中 添加 jar 后 您可以在 Build Config 屏幕中设置 Native 库的位置
  • Junit:如何测试从属性文件读取属性的方法

    嗨 我有课ReadProperty其中有一个方法ReadPropertyFile返回类型的Myclass从属性文件读取参数值并返回Myclass目的 我需要帮助来测试ReadPropertyFile方法与JUnit 如果可能的话使用模拟文件
  • 在内存中使用 byte[] 创建 zip 文件。 Zip 文件总是损坏

    我创建的 zip 文件有问题 我正在使用 Java 7 我尝试从字节数组创建一个 zip 文件 其中包含两个或多个 Excel 文件 应用程序始终完成 没有任何异常 所以 我以为一切都好 当我尝试打开 zip 文件后 Windows 7 出
  • .properties 中的通配符

    是否存在任何方法 我可以将通配符添加到属性文件中 并且具有所有含义 例如a b c d lalalala 或为所有以结尾的内容设置一个正则表达式a b c anything 普通的 Java 属性文件无法处理这个问题 不 请记住 它实际上是
  • 如何在java中将一个数组列表替换为另一个不同大小的数组列表

    我有两个大小不同的数组列表 如何从此替换 ArrayList
  • jQuery AJAX 调用 Java 方法

    使用 jQuery AJAX 我们可以调用特定的 JAVA 方法 例如从 Action 类 该 Java 方法返回的数据将用于填充一些 HTML 代码 请告诉我是否可以使用 jQuery 轻松完成此操作 就像在 DWR 中一样 此外 对于
  • 在 Jar 文件中运行 ANT build.xml 文件

    我需要使用存储在 jar 文件中的 build xml 文件运行 ANT 构建 该 jar 文件在类路径中可用 是否可以在不分解 jar 文件并将 build xml 保存到本地目录的情况下做到这一点 如果是的话我该怎么办呢 Update
  • 在接口中使用默认方法是否违反接口隔离原则?

    我正在学习 SOLID 原则 ISP 指出 客户端不应被迫依赖于他们所使用的接口 不使用 在接口中使用默认方法是否违反了这个原则 我见过类似的问题 但我在这里发布了一个示例 以便更清楚地了解我的示例是否违反了 ISP 假设我有这个例子 pu
  • java.lang.IllegalStateException:应用程序 PagerAdapter 更改了适配器的内容,而没有调用 PagerAdapter#notifyDataSetChanged android

    我正在尝试使用静态类将值传递给视图 而不是使用意图 因为我必须传递大量数据 有时我会收到此错误 但无法找出主要原因是什么 Error java lang IllegalStateException The application s Pag
  • Eclipse Maven Spring 项目 - 错误

    I need help with an error which make me crazy I started to study Java EE and I am going through tutorial on youtube Ever
  • jdbc mysql loginTimeout 不起作用

    有人可以解释一下为什么下面的程序在 3 秒后超时 因为我将其设置为在 3 秒后超时 12秒 我特意关闭了mysql服务器来测试mysql服务器无法访问的这种场景 import java sql Connection import java
  • volatile、final 和synchronized 安全发布的区别

    给定一个带有变量 x 的 A 类 变量 x 在类构造函数中设置 A x 77 我们想将 x 发布到其他线程 考虑以下 3 种变量 x 线程安全 发布的情况 1 x is final 2 x is volatile 3 x 设定为同步块 sy
  • 如何访问JAR文件中的Maven资源? [复制]

    这个问题在这里已经有答案了 我有一个使用 Maven 构建的 Java 应用程序 我有一个资源文件夹com pkg resources 我需要从中访问文件 例如directory txt 我一直在查看各种教程和其他答案 但似乎没有一个对我有
  • logcat 中 mSecurityInputMethodService 为 null

    我写了一点android应显示智能手机当前位置 最后已知位置 的应用程序 尽管我复制了示例代码 并尝试了其他几种解决方案 但似乎每次都有相同的错误 我的应用程序由一个按钮组成 按下按钮应该log经度和纬度 但仅对数 mSecurityInp
  • 不接受任何内容也不返回任何内容的函数接口[重复]

    这个问题在这里已经有答案了 JDK中是否有一个标准的函数式接口 不接受也不返回任何内容 我找不到一个 像下面这样 FunctionalInterface interface Action void execute 可运行怎么样 Functi
  • 如何使用 jUnit 将测试用例添加到套件中?

    我有 2 个测试类 都扩展了TestCase 每个类都包含一堆针对我的程序运行的单独测试 如何将这两个类 以及它们拥有的所有测试 作为同一套件的一部分执行 我正在使用 jUnit 4 8 在 jUnit4 中你有这样的东西 RunWith
  • 最新的 Hibernate 和 Derby:无法建立 JDBC 连接

    我正在尝试创建一个使用 Hibernate 连接到 Derby 数据库的准系统项目 我正在使用 Hibernate 和 Derby 的最新版本 但我得到的是通用的Unable to make JDBC Connection error 这是
  • 使用反射覆盖最终静态字段是否有限制?

    在我的一些单元测试中 我在最终静态字段上的反射中遇到了奇怪的行为 下面是说明我的问题的示例 我有一个基本的 Singleton 类 其中包含一个 Integer public class BasicHolder private static
  • 如何将双精度/浮点四舍五入为二进制精度?

    我正在编写对浮点数执行计算的代码的测试 不出所料 结果很少是准确的 我想在计算结果和预期结果之间设置一个容差 我已经证实 在实践中 使用双精度 在对最后两位有效小数进行四舍五入后 结果始终是正确的 但是usually四舍五入最后一位小数后
  • Spring Rest 和 Jsonp

    我正在尝试让我的 Spring Rest 控制器返回jsonp但我没有快乐 如果我想返回 json 但我有返回的要求 完全相同的代码可以正常工作jsonp我添加了一个转换器 我在网上找到了用于执行 jsonp 转换的源代码 我正在使用 Sp

随机推荐

  • 20 个常用的 CSS 技巧

    Sandy 推荐 高级工程师 游戏开发 下面这几个CSS技巧你可能不知道 1 彩色照片变黑白 2 所有元素垂直居中 3 禁用鼠标 4 模糊文字 小编学完能量满满的 觉得对CSS又充满了爱 你也来看看 原文链接 http caibaojian
  • sql 关联了2张表的 update 语句(转)

    转自 SQL Update 使用一个表的数据更新另一张表 update 关联两个表 基本上 select 能支持的关联和子查询操作 都能在 update 语句中使用 在 where 条件中使用子查询 update a set a age 1
  • Spark WARN cluster.ClusterScheduler: Initial job has not accepted any resources;check your cluster

    当我在Spark集群模式执行以下命令时 root debian master home hadoop spark 0 8 0 incubating bin hadoop1 run example org apache spark examp
  • DBA成长随笔---Oracle 11g,性能优化之等待事件

    目录 等待的定位方式 等待事件分类 观察等待事件的视图 常见等待事件 等待事件主要可以分为两类 即空闲 IDLE 等待事件和非空闲 NON IDLE 等待事件 空闲等待事件 是指Oracle正等待某种工作 比如用sqlplus登录之后 但没
  • 远程桌面连接出现了内部错误怎么解决?

    远程桌面连接是一种非常方便的工具 可以让用户从远程访问其他计算机的桌面界面 但是 有时候在连接远程桌面时会出现内部错误 导致无法连接或者连接后无法正常使用 在本文中 我们将会讨论远程桌面连接出现内部错误的原因和解决方法 1 确认网络连接 在
  • 2023牛客暑期多校第三场部分题解

    索引 A B D E G H I J A 直接输出两个数的差即可 再判一下无解的情况 B 其实思路还挺顺的 首先拿的牌肯定是一段增一段减一段增一段减 的序列 并且 gt n gt n gt n 的开头和 n
  • React中使用antd DatePicker限制日期选择

    场景 React中使用antd DatePicker限制日期选择 有下面一些场景 1 今天之前的日期不可选择 不包括今天 disabledDate current gt let current current format YYYY MM
  • 多标签学习之白话版

    简单的机器学习 就是把人类的学习方式教给机器 斯 cdot 沃索迪 1 任务的提出 单标签学习 假设你不知道河豚长什么样子 给你 1000 张照片 并标注哪些有河豚 再给你 100 张新的照片 你能判断哪些照片里面有河豚吗 本例中 从 10
  • charles介绍及代理设置

    一 介绍 你别说 这个真挺好看 有的叫花瓶 有的叫青花瓷 二 说明 安装charles后 如果不是正版 需要破解 破解码去百度查一个即可 否则试用期过后 使用半小时后就自动关闭了 需要重新打开呢 破解码输入路径 help register
  • ElasticSearch系列18:Mapping 设计指南

    点击上方 方才编程 即可关注我 本文导读 ElasticSearch 的 mapping 该如何设计 才能保证检索的高效 想要回答这个问题 就需要全面系统地掌握 mapping 各种参数的含义以及其适用的场景 ps 本文基于ElasticS
  • SQL 解析在 CloudQuery 中的应用

    hi 好久不见 今天将为大家带来一期干货满满的技术分享 作为一款数据库管控平台 大家通常认为 CloudQuery 的核心能力是对平台的管控 包括统一入口管理 权限体系 审计分析等 但实际上 CloudQuery 的核心技术点之一在于其独特
  • 二叉树-(将有序数组转换成二叉搜索树)

    coding utf 8 Author leadingme Mail leadingme qq com MyWebsite leadingme top 将有序数组转换成二叉搜索树 算法要求 将一个按照升序排序的有序数组转换为一颗高度平衡的二
  • 信号编程之signal函数

    作用1 站在应用程序的角度 注册一个信号处理函数 作用2 忽略信号 设置信号默认处理 信号的安装和恢复 相关宏定义 typedef void sighandler t int define SIG ERR sighandler t 1 de
  • 未找到与约束。。。匹配的导出

    问题截图 解决办法 就是微软官方的一个安装补丁KB2781514 来弥补这两个补丁的 http www microsoft com zh CN download details aspx id 36020 下载安装即可解决问题
  • 解决虚拟机创建快照后删除报错,重启该虚拟机后删除成功的问题

    问题描述 在ovirt中 创建快照后删除该快照失败 只有重启虚拟机后该快照才能删除 日志中均出现如下报错 2018 02 19 01 51 45 792 0800 ERROR jsonrpc 7 virt vm vmId a5935784
  • 构造函数析构函数为什么没有返回值?

    构造函数析构函数为什么没有返回值 Liupq 2008 5 10 构造函数和析构函数是两个非常特殊的函数 它们没有返回值 这与返回值为void的函数显然不同 后者虽然也不返回任何值 但还可以让它做点别的事情 而构造函数和析构函数则不允许 在
  • lstm原文_LSTM:《Long Short-Term Memory》的翻译并解读

    LSTM Long Short Term Memory 的翻译并解读 目录 Long Short Term Memory Abstract 1 INTRODUCTION 2 PREVIOUS WORK 3 CONSTANT ERROR BA
  • Vue + ElementUI集成pdf.js 文件,预览pdf 文件

    步骤总结 第一步 下载pdf js 资源在此下载 第二步 解压 打开Vue项目的config index js文件 查看资源目录是static文件夹 所以将解压后的文件夹放入项目的static目录下 如图 第三步 使用 在新建的vue文件中
  • JSP数据访问+(include指令+对象作用域)

    include指令 将需要重用的代码放在一个页面 再用上方法调用 application内置对象 application对象代表WEB应用 整个Web应用共享一个application对象 因此 application对象类似于系统的 全局
  • Java HTTP方式请求ASP.NET(C#)WebService

    package com ideamov wap util import java io ByteArrayOutputStream import java io IOException import java io InputStream