packagecom.jr.entity.web;importjava.io.BufferedInputStream;importjava.io.File;importjava.io.FileInputStream;importjava.io.FileNotFoundException;importjava.io.IOException;importjava.io.InputStream;importjava.lang.reflect.Method;importjava.math.BigInteger;importjava.nio.MappedByteBuffer;importjava.nio.channels.FileChannel;importjava.security.MessageDigest;importjavax.xml.bind.JAXBElement;importjavax.xml.namespace.QName;importorg.apache.cxf.endpoint.Client;importorg.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;importorg.apache.cxf.transport.http.HTTPConduit;importorg.apache.cxf.transports.http.configuration.HTTPClientPolicy;public classcxfTest {public static voidmain(String[] args) {
routeServer();
}/***
* cxf 动态调用WebService
*
*@return
*/
public static voidrouteServer() {//测试值开始
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=newFile(path);
String fileName=file.getName();//文件名
String suffix = "."+fileName.substring(fileName.lastIndexOf(".") + 1);//文件后缀//获取文件流。
InputStream fis = new BufferedInputStream(newFileInputStream(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(_FileUploadMessageID_QNAME, String.class, id));
m2.invoke(FileUploadMessage,new JAXBElement(_FileUploadMessageUSERID_QNAME, String.class, USERID));
m3.invoke(FileUploadMessage,new JAXBElement(_FileUploadMessageKEY_QNAME, String.class, KEY));
m4.invoke(FileUploadMessage,new JAXBElement(_FileUploadMessageAttachmentSetCode_QNAME, String.class, attachmentSetCode));
m5.invoke(FileUploadMessage,1);
m6.invoke(FileUploadMessage,new JAXBElement(_FileUploadMessageAttachmentCode_QNAME, String.class, attachmentCode));
m7.invoke(FileUploadMessage,new JAXBElement(_FileUploadMessageAttachmentName_QNAME, String.class, fileName));
m8.invoke(FileUploadMessage,new JAXBElement(_FileUploadMessageAttachmentType_QNAME, String.class, suffix));
m9.invoke(FileUploadMessage,new JAXBElement(_FileUploadMessageMD5_QNAME, String.class, MD5));
m10.invoke(FileUploadMessage,new JAXBElement(_FileUploadMessageAttachmentFileName_QNAME, String.class, fileName));
m11.invoke(FileUploadMessage,new JAXBElement(_FileUploadMessageSerialNumber_QNAME, String.class, serialNumber));
m12.invoke(FileUploadMessage,new JAXBElement(_FileUploadMessageFileStream_QNAME, byte[].class, fileStream));
m13.invoke(FileUploadMessage,new JAXBElement(_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 SN=(JAXBElement) getSN.invoke(UpFileResult, null);
JAXBElement Message=(JAXBElement) 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值
*@paramfile
*@return*@throwsFileNotFoundException*/
public static String getMd5ByFile(File file) throwsFileNotFoundException {
String value= null;
FileInputStream in= newFileInputStream(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();
}
}
}returnvalue;
}
}