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;
    }
}
时间: 2024-10-12 12:08:28

CXF 调用 .net webservice的相关文章

cxf+spring发布webservice和调用

项目所需jar包:http://files.cnblogs.com/files/walk-the-Line/cxf-spirng.zip 首先写一个demo接口 package cn.cxf.demo; import javax.jws.WebService; @WebService public interface Demo { String sayHi(String text); } 然后就需要它的实现类 targetNamespace 是指向接口的包路径 package cn.cxf.de

CXF 调用C#.net的WebService

原文链接:http://hi.baidu.com/pengfeiiw/blog/item/3203e29065aa3a8aa977a4d0.html 1.编写C#.net的WebService Service.cs using System;using System.Web;using System.Web.Services;using System.Web.Services.Protocols; [WebService(Namespace = "http://localhost:9000/we

httpclient4.x调用cxf发布的webservice的某个方法(有参数,有返回值)(未整合spring)

原文:httpclient4.x调用cxf发布的webservice的某个方法(有参数,有返回值)(未整合spring) 源代码下载地址:httpclient4.x调用cxf发布的webservice的某个方法(有参数,有返回值)(未整合spring) 采用spring + cxf编写服务端 httpclient4编写客户端调用 如题,代码没有jar 完整包: 链接:http://pan.baidu.com/share/link?shareid=2162612373&uk=402880896 密

WebService CXF调用方式《三》

问题?WebService CXF调用方式<三>,CXF工作原理和调用方式 一.CXF是什么? Apache CXF是一个开源的,全功能的,容易使用的Web服务框架.CXF是两个项目的结合:由IONA技术公司(现在是Progress的一部分)开发的Celtix和由Codehaus主持的团队开发的XFire,合并是由人们在在Apache软件基金会共同完成的.CXF的名字来源于"Celtix"和"XFire"的首字母. 二.CXF有什么作用? Apache

Apache cxf暴露接口以及客户端调用之WebService初步理解

在我们真实的项目中,经常会调用别人提供给我们的接口,或者在自己的团队中, restful风格的前后端分离也经常会提供一个后端接口暴露出去供app,或者.net/C/C++程序员去调用,此时就需要使用到一个工具或者一套程序来调用暴露的接口. 而今天我要说的就是其中的一个方式,使用apache的cxf调用以及暴露接口,让我们直接开始代码 1.首先我们需要去下载cxf,cxf是apache的一个产品,下载链接附上:http://www.apache.org/dyn/closer.lua/cxf/3.2

webService总结(二)——使用CXF手动发布webService(不使用Spring)

上篇博客:webService总结(一)--使用CXF发布webService(不使用Spring) 介绍了不使用Spring自动发布webService,这篇博客介绍第二种方法--使用CXF手动发布webService(不使用Spring). CXF自动发布webService,我们使用的是Tomcat服务器.而使用CXF手动发布webService我们不再使用Tomcat,取而代之的是内嵌的jetty服务器.其实,jetty跟Tomcat并没有本质的区别,只是表现的形式不同,使用方法不同.既

CXF+Spring搭建WebService

WebService: WebService 是一套标准,而不是一种具体的技术.不同的平台,不同的语言,大都提供了对 WebService 的开发实现. 从表面上看,Webservice 就是一个应用程序,它向外界暴露出一个能够通过 Web 进行调用的 API .也就是说,可以利用编程的方法通过 Web 来调用这个应用程序. 对 Webservice 更精确的解释 : Webservice 是建立可互操作的分布式应用程序的新平台.Webservice 平台是一套标准,它定义了应用程序如何在 We

WebService系列二:使用JDK和CXF框架开发WebService

一.使用JDK开发WebService 服务端程序创建: 1.新建一个JDK开发webservice的服务端maven项目JDKWebServiceServer 2. 定义一个接口,使用@WebService注解标注接口,使用@WebMethod注解标注接口中定义的所有方法 1 package com.study.webservice.ws; 2 3 import javax.jws.WebMethod; 4 import javax.jws.WebService; 5 6 /** 7 * 定义

C#远程调用技术WebService葵花宝典

一.课程介绍 直接开门见山吧,在学习之前阿笨想问大家一句,关于WebService远程过程调用技术(RPC) 你真的会了吗?不要跟老夫扯什么WebService技术已经过时,如果你的内心有在偷偷告诉你其实我是真的不会WebService的话,那么恭喜你,因为你在这茫茫的IT编程世界里找到了这本<C#远程调用技术WebService葵花宝典>!曾经有一位不知名的讲师说过这么一句名言: 一门RPC技术不会,那么千万万门RPC技术将都不会! 本次阿笨的分享课包含以下知识点. 1.C# WebServ