java请求C# asmx接口[通俗易懂]

java请求C# asmx接口[通俗易懂]packagecom.example.demo.controller;importorg.apache.axis.client.Call;importorg.apache.axis.client.Service;importorg.springframework.stereotype.Controller;importorg.springframework.web.bind….

大家好,又见面了,我是你们的朋友全栈君。

package com.example.demo.controller;

import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import sun.misc.BASE64Encoder;

import javax.xml.namespace.QName;
import java.io.*;
import java.rmi.ConnectException;
import java.util.Random;
import java.util.UUID;

/**
 * Created with IDEA
 * author:QinWei
 * Date:2019/12/2   0002
 * Time:16:57
 */
@Controller
public class indexController {

    @RequestMapping("/index")
    @ResponseBody
    public Object index(){
        return WebService();
    }

    public  static  String WebService(){

        File file = new File("C:\\pdf.pdf");
        String str = PDFToBase64(file);
        // webService链接地址 正式环境请更换至配置文件中以防修改方便
        String url = "http://IP/XXX.asmx";
        String uuid = genUniqueKey();
        // server域名地址,为了统一规范,一般都是这个域名 固定地址不需要配置
        String soapaction = "http://tempuri.org/";
        // 方法名
        String methodName = "DocumentPush";
        // 用户提供测试的两个参数
        String action  = "Create";
        String ref = null;
        
        StringBuffer sb = new StringBuffer();
      //XML拼接
        sb.append("<REQUEST>");
        sb.append("<RESPONSEITEM>");
        sb.append("<PATIENTID>T001688785</PATIENTID>");
        sb.append("</RESPONSEITEM>");
        sb.append("</REQUEST>");
        System.out.println("=========打印============"+sb);
        Service service = new Service();
        try{
            Call call = (Call) service.createCall();
            call.setTargetEndpointAddress(url);
            // 设置要调用哪个方法
            call.setOperationName(new QName(soapaction,methodName));
            // 设置要传递的参数名
            call.addParameter(new QName(soapaction,"action"),org.apache.axis.encoding.XMLType.XSD_STRING,
                    javax.xml.rpc.ParameterMode.IN);
            call.addParameter(new QName(soapaction,"message"),org.apache.axis.encoding.XMLType.XSD_STRING,
                    javax.xml.rpc.ParameterMode.IN);
            // 提供标准类型
            call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);
            call.setUseSOAPAction(true);
            call.setSOAPActionURI(soapaction + methodName);
            // 调用方法并传递参数
             ref = (String)call.invoke(new Object[]{action,sb.toString()});
            System.out.println("=========打印============"+ref);
            return ref;
        }catch (ConnectException ex){
            ex.printStackTrace();
            System.err.println("=========连接超时=========");
        } catch (Exception e){
            e.printStackTrace();
        }
        ref = "链接失败";
        return ref;
    }

    public static void main(String []ages){
        //WebService();

        //System.out.println(str);
    }


    /*
    生成唯一主键
    格式:时间+随机数
     */
    public static synchronized String genUniqueKey() {
        Random random = new Random();
        Integer number = random.nextInt(900000) + 100000;
        return System.currentTimeMillis() + String.valueOf(number);
    }


    /**
     * Description: 将pdf文件转换为Base64编码
     * @param  file
     * @Author qinwei
     * Create Date: 2015年8月3日 下午9:52:30
     */
    public static String PDFToBase64(File file) {

        BASE64Encoder encoder = new BASE64Encoder();
        FileInputStream fin =null;
        BufferedInputStream bin =null;
        ByteArrayOutputStream baos = null;
        BufferedOutputStream bout =null;
        try {
            fin = new FileInputStream(file);
            bin = new BufferedInputStream(fin);
            baos = new ByteArrayOutputStream();
            bout = new BufferedOutputStream(baos);
            byte[] buffer = new byte[1024];
            int len = bin.read(buffer);
            while(len != -1){
                bout.write(buffer, 0, len);
                len = bin.read(buffer);
            }
            //刷新此输出流并强制写出所有缓冲的输出字节
            bout.flush();
            byte[] bytes = baos.toByteArray();
            return encoder.encodeBuffer(bytes).trim();

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally{
            try {
                fin.close();
                bin.close();
                bout.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return null;
    }


}

以下为需要的maven依赖

<!-- 以下均为webservice调用的maven依赖 -->
        <dependency>
            <groupId>org.apache.axis</groupId>
            <artifactId>axis</artifactId>
            <version>1.4</version>
        </dependency>

        <dependency>
            <groupId>axis</groupId>
            <artifactId>axis-jaxrpc</artifactId>
            <version>1.4</version>
        </dependency>

        <dependency>
            <groupId>javax.activation</groupId>
            <artifactId>activation</artifactId>
            <version>1.1.1</version>
        </dependency>

        <dependency>
            <groupId>commons-discovery</groupId>
            <artifactId>commons-discovery</artifactId>
            <version>0.5</version>
        </dependency>

        <dependency>
            <groupId>wsdl4j</groupId>
            <artifactId>wsdl4j</artifactId>
            <version>1.6.3</version>
        </dependency>

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/145055.html原文链接:https://javaforall.net

(0)
上一篇 2022年5月12日 下午8:40
下一篇 2022年5月12日 下午9:00


相关推荐

  • 单片机控制步进电机正反转c语言程序,单片机控制步进电机1步10步100步正反转…

    单片机控制步进电机正反转c语言程序,单片机控制步进电机1步10步100步正反转…原标题:单片机控制步进电机1步10步100步正反转一,程序设计方案的构想:1)的控制原理步进电机是将电脉冲信号转变为角位移或线位移的开环控制元件.在非超载的情况下,电机的转速,停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响.即给电机加一个信号,电机则转过一个步距角.这一线形关系的存在,加上步进电机只有周期性的误差而无积累误差等特点,使得在线速度,位置等控制领域用步进电机来控制变的…

    2022年5月8日
    96
  • <context-param>的contextConfigLocation以及DispatcherServlet的contextConfigLocation

    <context-param>的contextConfigLocation以及DispatcherServlet的contextConfigLocationcontextConfigLocation/WEB-INF/classes/applicationContext.xml,/WEB-INF/classes/module/*Context.xmlcontextConfigLocation/WEB-INF/spring/servlet-context.xml,/WEB-INF/classes

    2022年7月16日
    20
  • 手把手教你在 Mac 安装使用 OpenClaw

    手把手教你在 Mac 安装使用 OpenClaw

    2026年3月13日
    3
  • “双击Pycharm无响应”解决方案「建议收藏」

    “双击Pycharm无响应”解决方案「建议收藏」问题描述昨晚直接关机,导致pycharm强制关闭,今早打开时双击图标无响应解决方法第一步:找到该路径下的cmd.exe,右键管理员身份打开;第二步:在cmd窗口中,输入netshwinsockreset,回车;第三步:重启电脑,尝试重新打开pycharm关于指令winsock是Windows网络编程接口netsh是一个能够通过命令行操作几乎所有网络相关设置的接口netshwinsockreset命令,作用是重置Winsock目录这个命令可以重新初始化网

    2022年8月28日
    10
  • 《JavaScript 模式》读书笔记(5)— 对象创建模式3

    这一篇,我们主要来学习了解下沙箱模式以及静态成员的相关内容。五、沙箱模式沙箱模式(sandboxpattern)解决了命名空间模式的如下几个缺点:对单个全局变量的依赖变成了对应用程序的全局变量

    2022年3月25日
    40
  • 宫廷计动漫_动漫乱斗

    宫廷计动漫_动漫乱斗在移动互联网和资本的助力下,我国动漫市场近几年开始步入快速发展期。相关数据显示,我国动漫行业2017年的产值已达1536亿元人民币,占整个文娱产业总产值的24%,且预计我国动漫行业总产值在2020年将到达2212亿元。在看到动漫市场具备如此“钱景”之后,不少资本企业纷纷开始布局动漫领域,市场上出现了动漫之家、有妖气漫画、看漫画、腾讯动漫、快看漫画等平台,还有不久前B站推出的哔哩哔哩漫画APP等…

    2022年8月23日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号