首页 > 编程语言 >java动态调用webservice

java动态调用webservice

时间:2023-12-15 13:24:12浏览次数:26  
标签:调用 return webservice java param import HashMap public String

package com.smp.common;

import serverInfo.ServerInfo;

import javax.xml.soap.*;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamResult;
import java.io.StringWriter;
import java.net.URL;
import java.util.HashMap;

public class DynamicWebService {
    private String url = "http://xxxx:8080/SignalListenServer/SignalListenDelegate?WSDL";
    private String nameSpase = "http://webservice/";
    private String methodName = "getxxx";
    private HashMap<String,String> param;

    /**
     * 获取结果
     *
     * @param methadName 方法名 如getXXX
     * @param htParam
     */
    public DynamicWebService(String methadName, HashMap htParam) {
        this.methodName = methadName;
        this.param = htParam;
        url =  "http://" + ServerInfo.getWebServiceIP() + ":8080/ListenPort?wsdl";
        nameSpase = "http://webservice/";
    }


    public String GetServiceResult() {
        try {
            // Create SOAP Connection
            SOAPConnectionFactory soapConnectionFactory = SOAPConnectionFactory.newInstance();
            SOAPConnection soapConnection = soapConnectionFactory.createConnection();

            // Send SOAP Message to SOAP Server.
            SOAPMessage soapResponse = soapConnection.call(createSOAPRequest(), this.url);

            // Process the SOAP Response
            String s = printSOAPResponse2(soapResponse);
            soapConnection.close();

            return GetValueByTag(s, "return");


        } catch (Exception e) {
            System.err.println("Error occurred while sending SOAP Request to Server");
            e.printStackTrace();
            return "";
        }
    }


    public static String GetValueByTag(String xmlStr, String tag) {
        int iStart = xmlStr.indexOf("<" + tag + ">") + 8;
        int iEnd = xmlStr.indexOf("</" + tag + ">");
        return xmlStr.substring(iStart, iEnd);
    }

    /**
     * 入参
     * @return
     * @throws Exception
     */
    private SOAPMessage createSOAPRequest() throws Exception {

        MessageFactory messageFactory = MessageFactory.newInstance();
        SOAPMessage soapMessage = messageFactory.createMessage();
        SOAPPart soapPart = soapMessage.getSOAPPart();

        String serverURI = this.nameSpase;

        // SOAP Envelope
        SOAPEnvelope envelope = soapPart.getEnvelope();
        envelope.addNamespaceDeclaration("web", serverURI);

        SOAPBody soapBody = envelope.getBody();

        SOAPElement soapBodyElemt = soapBody.addChildElement("web:"+this.methodName);

        for (String key : this.param.keySet()) {
            soapBodyElemt.addChildElement(key).addTextNode(this.param.get(key));
        }

        MimeHeaders headers = soapMessage.getMimeHeaders();
        headers.addHeader(this.methodName, serverURI +this.methodName);

        soapMessage.saveChanges();

        return soapMessage;
    }


    private static String printSOAPResponse2(SOAPMessage soapResponse) throws Exception {
        try {
            TransformerFactory transformerFactory = TransformerFactory.newInstance();
            Transformer transformer = transformerFactory.newTransformer();
            Source sourceContent = soapResponse.getSOAPPart().getContent();
            StringWriter stringWriter = new StringWriter();
            StreamResult result = new StreamResult(stringWriter);
            transformer.transform(sourceContent, result);
            return stringWriter.toString();
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
}

示例:

 package com.smp.test;


 import com.smp.common.DynamicWebService;
 import java.util.HashMap;


 public class test  {

  public static void main(String args[]) {

    HashMap ht=new HashMap();
    ht.put("arg0","{\"Light\":1,\"ID\":29}");
    ht.put("arg1","192.168.1.106");
    String s = new DynamicWebService("getLight",ht).GetServiceResult();
    
    System.out.println(s);
  }
 }

jar包  saaj.api.jar

标签:调用,return,webservice,java,param,import,HashMap,public,String
From: https://www.cnblogs.com/SoftWareIe/p/17903180.html

相关文章

  • javascript怎么实现文件上传和下载功能
    在现代Web开发中,文件上传和下载是经常遇到的需求。JavaScript作为前端开发的语言之一,提供了许多强大的工具库和API来管理文件上传和下载的过程。本文将探讨如何使用JavaScript实现文件上传和下载的功能,首先介绍基于HTML5的FileAPI,然后使用jQuery和XMLHttpRequest......
  • Java-Jvm中GC类型及执行时机
    Java-Jvm中GC类型及执行时机堆的结构年轻代(YoungGeneration):Eden区:在年轻代中,对象首先被分配到Eden区。大多数对象很快就会被回收,所以它们被分配到Eden区以提高分配速度。Survivor区(S0和S1):Eden区中存活的对象会被移动到Survivor区。每次发生MinorGC时,存活的对象会被移......
  • Java-创建线程池的参数及工作原理
    Java-创建线程池的参数及工作原理常见的参数corePoolSize(核心线程数):线程池中保持的最小线程数,即使它们是空闲的。maximumPoolSize(最大线程数):线程池中允许的最大线程数。keepAliveTime(线程空闲时间):当线程池中的线程数超过核心线程数时,多余的空闲线程在被终止之前等待新......
  • Java-创建线程池的参数及工作原理
    Java-创建线程池的参数及工作原理常见的参数corePoolSize(核心线程数):线程池中保持的最小线程数,即使它们是空闲的。maximumPoolSize(最大线程数):线程池中允许的最大线程数。keepAliveTime(线程空闲时间):当线程池中的线程数超过核心线程数时,多余的空闲线程在被终止之前等待新......
  • Java-创建线程池的参数及工作原理
    Java-创建线程池的参数及工作原理常见的参数corePoolSize(核心线程数):线程池中保持的最小线程数,即使它们是空闲的。maximumPoolSize(最大线程数):线程池中允许的最大线程数。keepAliveTime(线程空闲时间):当线程池中的线程数超过核心线程数时,多余的空闲线程在被终止之前等待新......
  • java: 通过URL读取hadoop HDFS
    packagetju;importorg.apache.hadoop.fs.FsUrlStreamHandlerFactory;importorg.apache.hadoop.io.IOUtils;importjava.io.InputStream;importjava.net.MalformedURLException;importjava.net.URL;importjava.net.URLStreamHandlerFactory;publicclassReadF......
  • java: MappedByteBuffer的用法
    packagenio;importjava.io.RandomAccessFile;importjava.nio.MappedByteBuffer;importjava.nio.channels.FileChannel;publicclassMappedByteBufferTest{publicstaticvoidmain(String[]args)throwsException{RandomAccessFilerandomAccessF......
  • java之冒泡排序
    冒泡排序原理:从第一个数开始,和后面一个数比较大小,根据升序或者降序,看是否需要互换位置。每一轮会把1个数罗列到正确位置,经过数组长度-1轮比较,排序完成。比如:对数组{11,55,33,22,44}进行升序排列数组长度是5,需要经过5-1轮,每一轮需要比较5-当前轮次。publicc......
  • 【JAVA】Multiple markers at this line @Override的解决方法
    【未解决】我的是1.8,都显示的是1.8使用Eclipse进行项目开发,在实现类中的方法前面如果添加@Override就提示“Multiplemarkersatthisline”的错误,问题描述如下Multiplemarkersatthisline-ThemethodgetStudentByID(String)oftypeStudentBeanImplmustoverridea......
  • Java-Redis是如何保证高可用的?
    Java-Redis是如何保证高可用的?​​高性能基于内存的存储Redis是基于内存的存储系统,所有数据都保存在内存中,这使得Redis可以快速读取和写入数据。与传统的基于磁盘存储的系统相比,Redis的读写性能更高。单线程的设计是单线程的设计,所有的读写请求都由同一个线程处理,避免了多线......