zoukankan      html  css  js  c++  java
  • CXF 调用 .net webservice

    1、webservice 接口调用可参考jdk安装bin 下wsimport.exe。

    2、本实例是CXF调用 .net webservice,且.net webservice接口参数是一个对象。

    3、本实例调用的是文件上传,具体参数可忽略

    package com.jr.entity.web;
    
    import java.io.BufferedInputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.io.InputStream;
    import java.lang.reflect.Method;
    import java.math.BigInteger;
    import java.nio.MappedByteBuffer;
    import java.nio.channels.FileChannel;
    import java.security.MessageDigest;
    
    import javax.xml.bind.JAXBElement;
    import javax.xml.namespace.QName;
    
    import org.apache.cxf.endpoint.Client;
    import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;
    import org.apache.cxf.transport.http.HTTPConduit;
    import org.apache.cxf.transports.http.configuration.HTTPClientPolicy;  
    
    public class cxfTest {
    
        public static void main(String[] args) {
            routeServer();
        }
        /**
         * 
         * cxf 动态调用WebService 
         * 
         * @return
         */
        public static void routeServer() {
            //测试值开始
            String id="id";
            String USERID="1400000000";
            String KEY="VOWPEP7MBP0ZFQF";
            String attachmentSetCode="10000";
            int attachmentCount=1;
            String attachmentCode="10001";
            String serialNumber="10002";
            String uploadWebHost="http://192.168.0.53";
            // url为调用webService的wsdl地址
            String url = "http://192.168.0.53:5280/Services/UnS/UnStructuredService?wsdl";
            String path="E://lc//website-master.rar";//上传的文件路径
            
            //cxf 调用 webservice
            JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
            HTTPClientPolicy httpClientPolicy = new HTTPClientPolicy();    // 策略
            httpClientPolicy.setConnectionTimeout( 360000 );    //连接超时 
            httpClientPolicy.setAllowChunking( false );   
            httpClientPolicy.setReceiveTimeout( 100000 );       //接收超时
            Client client = dcf.createClient(url);
            HTTPConduit http = (HTTPConduit) client.getConduit();  
            http.setClient(httpClientPolicy);
            
            
            try {
                
                
                File file=new File(path);
                String fileName=file.getName();//文件名
                String suffix = "."+fileName.substring(fileName.lastIndexOf(".") + 1);//文件后缀  
                // 获取文件流。
                InputStream fis = new BufferedInputStream(new FileInputStream(path));
                
                byte[] fileStream=new byte[fis.available()]; 
                fis.read(fileStream);
                fis.close();
                //System.out.println("字节大小:"+fileStream.length);
                String MD5=getMd5ByFile(file); //文件的md5
                
                
                //调用的方法
                QName name = new QName("http://www.xxx.com", "ReceiveFile_GCJS");
                //反射具体的类
                Object FileUploadMessage = Thread.currentThread().getContextClassLoader().loadClass("com.tlbxygw.FileUploadMessage").newInstance();     
                //Method[] methods= FileUploadMessage.getClass().getMethods(); // 反射所有方法
                
                Method m1 = FileUploadMessage.getClass().getMethod("setID", javax.xml.bind.JAXBElement.class);  
                Method m2 = FileUploadMessage.getClass().getMethod("setUSERID", javax.xml.bind.JAXBElement.class);  
                Method m3 = FileUploadMessage.getClass().getMethod("setKEY", javax.xml.bind.JAXBElement.class);  
                Method m4 = FileUploadMessage.getClass().getMethod("setAttachmentSetCode", javax.xml.bind.JAXBElement.class);  
                Method m5 = FileUploadMessage.getClass().getMethod("setAttachmentCount", java.lang.Integer.class);  
                Method m6 = FileUploadMessage.getClass().getMethod("setAttachmentCode", javax.xml.bind.JAXBElement.class);  
                Method m7 = FileUploadMessage.getClass().getMethod("setAttachmentName", javax.xml.bind.JAXBElement.class);  
                Method m8 = FileUploadMessage.getClass().getMethod("setAttachmentType", javax.xml.bind.JAXBElement.class);  
                Method m9 = FileUploadMessage.getClass().getMethod("setMD5", javax.xml.bind.JAXBElement.class);  
                Method m10 = FileUploadMessage.getClass().getMethod("setAttachmentFileName", javax.xml.bind.JAXBElement.class);  
                Method m11 = FileUploadMessage.getClass().getMethod("setSerialNumber", javax.xml.bind.JAXBElement.class);  
                Method m12 = FileUploadMessage.getClass().getMethod("setFileStream", javax.xml.bind.JAXBElement.class); 
                Method m13 = FileUploadMessage.getClass().getMethod("setUploadWebHost", javax.xml.bind.JAXBElement.class); 
               
             
                QName _FileUploadMessageAttachmentFileName_QNAME = new QName("http://www.xxx.com", "attachmentFileName");//http://www.xxx.com接口的命名空间
                QName _FileUploadMessageSerialNumber_QNAME = new QName("http://www.xxx.com", "serialNumber");
                QName _FileUploadMessageAttachmentSetCode_QNAME = new QName("http://www.xxx.com", "attachmentSetCode");
                QName _FileUploadMessageAttachmentCode_QNAME = new QName("http://www.xxx.com", "attachmentCode");
                QName _FileUploadMessageAttachmentType_QNAME = new QName("http://www.xxx.com", "attachmentType");
                QName _FileUploadMessageID_QNAME = new QName("http://www.xxx.com", "ID");
                QName _FileUploadMessageUploadWebHost_QNAME = new QName("http://www.xxx.com", "uploadWebHost");
                QName _FileUploadMessageAttachmentName_QNAME = new QName("http://www.xxx.com", "attachmentName");
                QName _FileUploadMessageUSERID_QNAME = new QName("http://www.xxx.com", "USERID");
                QName _FileUploadMessageMD5_QNAME = new QName("http://www.xxx.com", "MD5");
                QName _FileUploadMessageFileStream_QNAME = new QName("http://www.xxx.com", "fileStream");
                QName _FileUploadMessageKEY_QNAME = new QName("http://www.xxx.com", "KEY");
               
                m1.invoke(FileUploadMessage,new JAXBElement<String>(_FileUploadMessageID_QNAME, String.class, id));
                m2.invoke(FileUploadMessage, new JAXBElement<String>(_FileUploadMessageUSERID_QNAME, String.class, USERID));
                m3.invoke(FileUploadMessage, new JAXBElement<String>(_FileUploadMessageKEY_QNAME, String.class, KEY));
                m4.invoke(FileUploadMessage, new JAXBElement<String>(_FileUploadMessageAttachmentSetCode_QNAME, String.class, attachmentSetCode));
                m5.invoke(FileUploadMessage, 1);
                m6.invoke(FileUploadMessage, new JAXBElement<String>(_FileUploadMessageAttachmentCode_QNAME, String.class, attachmentCode));
                m7.invoke(FileUploadMessage, new JAXBElement<String>(_FileUploadMessageAttachmentName_QNAME, String.class, fileName));
                m8.invoke(FileUploadMessage, new JAXBElement<String>(_FileUploadMessageAttachmentType_QNAME, String.class, suffix));
                m9.invoke(FileUploadMessage, new JAXBElement<String>(_FileUploadMessageMD5_QNAME, String.class, MD5));
                m10.invoke(FileUploadMessage, new JAXBElement<String>(_FileUploadMessageAttachmentFileName_QNAME, String.class, fileName));
                m11.invoke(FileUploadMessage, new JAXBElement<String>(_FileUploadMessageSerialNumber_QNAME, String.class, serialNumber));
                m12.invoke(FileUploadMessage, new JAXBElement<byte[]>(_FileUploadMessageFileStream_QNAME, byte[].class, fileStream));
                m13.invoke(FileUploadMessage, new JAXBElement<String>(_FileUploadMessageUploadWebHost_QNAME, String.class, uploadWebHost));
                //调用方法
                Object[] objects= client.invoke(name, FileUploadMessage);
               
                if (objects!=null && objects.length>0) {
                    //获取返回值
                    Object UpFileResult=objects[0]; //com.tlbxygw.UpFileResult
                    Method[] arrMethod=UpFileResult.getClass().getMethods(); 
                    Method getSN=UpFileResult.getClass().getMethod("getSN");
                    Method getMessage=UpFileResult.getClass().getMethod("getMessage");
                    Method isIsSuccess=UpFileResult.getClass().getMethod("isIsSuccess");
                    
                    JAXBElement<String> SN=(JAXBElement<String>) getSN.invoke(UpFileResult, null);
                    JAXBElement<String> Message=(JAXBElement<String>) getMessage.invoke(UpFileResult, null);
                    
                    String snValue=SN.getValue();                
                    String messageValue=Message.getValue();
                    //返回的具体值
                    System.out.println(snValue+"***"+messageValue+"****"+isIsSuccess.invoke(UpFileResult, null));
                    
                }
                
                
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
    
        }
        /**
         * 获取文件的md5值
         * @param file
         * @return
         * @throws FileNotFoundException
         */
        public static String getMd5ByFile(File file) throws FileNotFoundException {
            String value = null;
            FileInputStream in = new FileInputStream(file);
            try {
                MappedByteBuffer byteBuffer = in.getChannel().map(FileChannel.MapMode.READ_ONLY, 0, file.length());
                MessageDigest md5 = MessageDigest.getInstance("MD5");
                md5.update(byteBuffer);
                BigInteger bi = new BigInteger(1, md5.digest());
                value = bi.toString(16);
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                if (null != in) {
                    try {
                        in.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
            return value;
        }
    }
  • 相关阅读:
    你可见过一种基于状压的二进制筛法?
    dp
    tricks
    csp2020 游记
    洛谷P2982 [USACO10FEB]慢下来Slowing down
    NOIP 2018 大翻车记
    2019 ICPC 南京网络赛
    POJ2778 AC自动机 + 快速矩阵幂
    2019 CCPC网络赛
    2018ICPC 北京
  • 原文地址:https://www.cnblogs.com/tlbxygw/p/6763856.html
Copyright © 2011-2022 走看看