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 的相关文章

  • Emacs 打字骨架对插入也许

    在 Eclipse 中 编辑 Java 代码时 如果我输入一个左括号 我会得到一对括号 如果我然后 输入 第二个括号 它不会插入额外的括号 我如何在 emacs 中得到它 Eclipse 编辑器足够聪明 当我输入闭括号时 它知道我刚刚完成了
  • Jackson反序列化SNS消息错误MismatchedInputException

    我正在编写一个通过 SNS HTTP 请求处理来自 Amazon Simple Email Service 的回调的功能 我想将亚马逊提供的消息解析为本地对象结构 问题是 SNS 将 JSON 消息包装成字符串 并且 Jackson 无法解
  • 什么是“非阻塞”并发?它与普通并发有何不同?

    什么是 非阻塞 并发 它与使用线程的普通并发有何不同 为什么不在所有需要并发的场景中都使用非阻塞并发呢 使用非阻塞并发有开销吗 我听说Java中可以实现非阻塞并发 我们是否应该在特定场景下使用此功能 将这些方法之一与集合一起使用是否有区别或
  • 确定列表编号是否连续

    我在 Java 工作 我有一个无序列表 包含 5 个数字 范围从 0 100 没有重复 我想检测其中 3 个数字是否连续且没有间隙 例子 9 12 13 11 10 true 17 1 2 3 5 true 19 22 23 27 55 f
  • Java OR 运算符优先级

    如何在 Java 中以 if 的方式链接条件语句b是假的 不如不检查c If a and c是假的 并且b是真的 确实c会被检查吗 if a b c 我正在寻找 PHP 所拥有的类似功能 但两者之间存在差异OR and 爪哇 如果左操作数是
  • 堆内存与对象内存

    根据一篇关于Java内存和特性的论文 内存分数分为两种类型 堆内存 即应用程序在运行时消耗的内存 对象内存 即程序中使用的各种对象分配的内存 例如整数和字符串等 他们的意思是stack当他们说时的记忆object记忆 或者它们是什么意思 很
  • 注释处理器可以用于代码生成吗?

    假设我定义了一个名为 MyAnnotation 有一个班级X其声明为 MyAnnotation class X 现在在编译时我想检查所有带有注释的类 MyAnnotation并对更多需要在同一进程中编译的 java 源文件进行一些代码生成
  • Java 中内存高效的稀疏数组

    关于时间高效的稀疏数组存在一些问题 但我正在寻找内存效率 我需要相当于List
  • 在类路径中使用通配符调用 java 失败

    我当前目录中有一些 jar 它们都需要位于类路径中 因此我想对类路径使用通配符约定 命令行是 java exe classpath org python util jython args 但是我收到这个错误 Exception in thr
  • 一起使用 String 和 int 时的 System.out.println 行为 [重复]

    这个问题在这里已经有答案了 考虑下面的代码片段 public class Student public static void main String args int a 3 int b 4 System out println a b
  • Java文本输出中的UTF-8编码问题

    我一直致力于测试高棉语 Unicode Wordbreaker 的各种解决方案 高棉语单词之间没有空格 这使得拼写检查和语法检查变得困难 以及从旧高棉语转换为高棉语 Unicode 我得到了一些源代码 现在在线 http www white
  • 如何将空字符串序列化为单个空标签?

    我使用 Simple XML 框架序列化此类 Root public class HowToRenderEmptyTag Element required false private String nullString 我想得到
  • 使用 java 中的准备好的语句插入自定义 SQL 类型

    我有一些自定义类型 它们基本上都是枚举 以下是它们的外观示例 CREATE TYPE card suit AS ENUM spades clubs hearts diamonds 我在 Java 中有一些准备好的语句 看起来像这样 Setu
  • Jackson 中没有注释的多态反序列化

    我有一个CloudEvent
  • 如何在 Struts 2 中访问 OGNL 跟踪评估?

    有人告诉我要优化网络应用程序 为此 我使用JProfiler https www ej technologies com products jprofiler overview html 我注意到很大一部分响应时间都花在了表示层上 特别是当
  • 使用 JPA 存储库保留 Spring Batch ItemWriter 的问题

    我对春季批次有疑问ItemWriter它依赖于 JPA 存储库来更新数据 这里是 Component public class MessagesDigestMailerItemWriter implements ItemWriter
  • 在 Struts 2 中使用单个文件标签上传多个文件

    我想使用单个 Struts 2 文件标签上传多个文件 就像在 Gmail 中一样 我们使用 CTRL 键来选择多个文件来附加多个文件 我知道如何上传多个文件 但我想使用单个文件标签 我在一个小画廊应用程序中上传多个文件 如果您的操作已设置为
  • 在大画布上滚动

    我需要一些帮助来了解滚动绘制到 Android 画布上的项目的基础知识 假设我想创建一个时间线 其中 0 处的时间是可视化的顶部 并且随着时间的增加 时间线继续呈现在上一个点下方 如果我想在 Android 上渲染它 我知道我可以通过重写
  • 如何组织课程、课程包[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 您如何决定包名称应该是什么以及什么类应该放入哪个包中 我正在开发一个项目 在该项目中 我不断添加 删除类 并且不确定我是否需要一个新包 或者应该将其添
  • 当键位于父类中时,如何将一对多集合映射到连接的子类

    我想将一对多集合映射到子类 但集合的键是父类的属性 目前我正在映射 AbstractFoo Foo 和 Bar 类 如下所示

随机推荐

  • 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