利用webservice发布接口,上传到服务器压缩zip文件并将该文件作为入参掉其他接口

需求:

网上投诉建议接口,将投诉内容封装成xml格式生成xml文件到服务器,并读取该文件调用其他接口实现投诉建议功能

技术:

1.webservice方式

2.流的应用

3.独立获取request对象,使用ThreadLocal获取

4.xml与实体时间的转换

代码:

实体的拼装:



import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

@XmlAccessorType(value=XmlAccessType.FIELD) //访问类型改为字段
public class PROPERTIES {
	@XmlElement
    private String DOCID; 
	@XmlElement
    private String DOCVERSION; 
	@XmlElement
    private String DOCTYPE; 
	@XmlElement
    private String DOCPUBTIME; 
	@XmlElement
    private String CRUSER; 
	@XmlElement
    private String CRTIME; 
	@XmlElement
    private String DOCFLAG; 
	@XmlElement
    private String ATTRIBUTE; 
	@XmlElement
    private String ATTACHPIC; 
	@XmlElement
    private String DOCLINK; 
	@XmlElement
    private String DOCFILENAME; 
	@XmlElement
    private String DOCCHANNEL; 
	@XmlElement
    private String DOCTITLE; 
	@XmlElement
    private String DOCPEOPLE; 
	@XmlElement
    private String DOCSOURCENAME; 
	@XmlElement
    private String DOCSTATUS; 
	@XmlElement
    private String DOCCONTENT; 
	@XmlElement
    private String DOCHTMLCON; 
	@XmlElement
    private String DOCWORDSCOUNT; 
	@XmlElement
    private String DOCABSTRACT; 
	@XmlElement
    private String DOCKEYWORDS; 
	@XmlElement
    private String DOCAUTHOR; 
	@XmlElement
    private String DOCRELTIME;
	@XmlElement
    private String TITLECOLOR;
	@XmlElement
    private String SUBDOCTITLE;
	@XmlElement
    private String EDITOR;
	@XmlElement
    private String CHNLNAME;
	public String getDOCID() {
		return DOCID;
	}
	public void setDOCID(String dOCID) {
		DOCID = dOCID;
	}
	public String getDOCVERSION() {
		return DOCVERSION;
	}
	public void setDOCVERSION(String dOCVERSION) {
		DOCVERSION = dOCVERSION;
	}
	public String getDOCTYPE() {
		return DOCTYPE;
	}
	public void setDOCTYPE(String dOCTYPE) {
		DOCTYPE = dOCTYPE;
	}
	public String getDOCPUBTIME() {
		return DOCPUBTIME;
	}
	public void setDOCPUBTIME(String dOCPUBTIME) {
		DOCPUBTIME = dOCPUBTIME;
	}
	public String getCRUSER() {
		return CRUSER;
	}
	public void setCRUSER(String cRUSER) {
		CRUSER = cRUSER;
	}
	public String getCRTIME() {
		return CRTIME;
	}
	public void setCRTIME(String cRTIME) {
		CRTIME = cRTIME;
	}
	public String getDOCFLAG() {
		return DOCFLAG;
	}
	public void setDOCFLAG(String dOCFLAG) {
		DOCFLAG = dOCFLAG;
	}
	public String getATTRIBUTE() {
		return ATTRIBUTE;
	}
	public void setATTRIBUTE(String aTTRIBUTE) {
		ATTRIBUTE = aTTRIBUTE;
	}
	public String getATTACHPIC() {
		return ATTACHPIC;
	}
	public void setATTACHPIC(String aTTACHPIC) {
		ATTACHPIC = aTTACHPIC;
	}
	public String getDOCLINK() {
		return DOCLINK;
	}
	public void setDOCLINK(String dOCLINK) {
		DOCLINK = dOCLINK;
	}
	public String getDOCFILENAME() {
		return DOCFILENAME;
	}
	public void setDOCFILENAME(String dOCFILENAME) {
		DOCFILENAME = dOCFILENAME;
	}
	public String getDOCCHANNEL() {
		return DOCCHANNEL;
	}
	public void setDOCCHANNEL(String dOCCHANNEL) {
		DOCCHANNEL = dOCCHANNEL;
	}
	public String getDOCTITLE() {
		return DOCTITLE;
	}
	public void setDOCTITLE(String dOCTITLE) {
		DOCTITLE = dOCTITLE;
	}
	public String getDOCPEOPLE() {
		return DOCPEOPLE;
	}
	public void setDOCPEOPLE(String dOCPEOPLE) {
		DOCPEOPLE = dOCPEOPLE;
	}
	public String getDOCSOURCENAME() {
		return DOCSOURCENAME;
	}
	public void setDOCSOURCENAME(String dOCSOURCENAME) {
		DOCSOURCENAME = dOCSOURCENAME;
	}
	public String getDOCSTATUS() {
		return DOCSTATUS;
	}
	public void setDOCSTATUS(String dOCSTATUS) {
		DOCSTATUS = dOCSTATUS;
	}
	public String getDOCCONTENT() {
		return DOCCONTENT;
	}
	public void setDOCCONTENT(String dOCCONTENT) {
		DOCCONTENT = dOCCONTENT;
	}
	public String getDOCHTMLCON() {
		return DOCHTMLCON;
	}
	public void setDOCHTMLCON(String dOCHTMLCON) {
		DOCHTMLCON = dOCHTMLCON;
	}
	public String getDOCWORDSCOUNT() {
		return DOCWORDSCOUNT;
	}
	public void setDOCWORDSCOUNT(String dOCWORDSCOUNT) {
		DOCWORDSCOUNT = dOCWORDSCOUNT;
	}
	public String getDOCABSTRACT() {
		return DOCABSTRACT;
	}
	public void setDOCABSTRACT(String dOCABSTRACT) {
		DOCABSTRACT = dOCABSTRACT;
	}
	public String getDOCKEYWORDS() {
		return DOCKEYWORDS;
	}
	public void setDOCKEYWORDS(String dOCKEYWORDS) {
		DOCKEYWORDS = dOCKEYWORDS;
	}
	public String getDOCAUTHOR() {
		return DOCAUTHOR;
	}
	public void setDOCAUTHOR(String dOCAUTHOR) {
		DOCAUTHOR = dOCAUTHOR;
	}
	public String getDOCRELTIME() {
		return DOCRELTIME;
	}
	public void setDOCRELTIME(String dOCRELTIME) {
		DOCRELTIME = dOCRELTIME;
	}
	public String getTITLECOLOR() {
		return TITLECOLOR;
	}
	public void setTITLECOLOR(String tITLECOLOR) {
		TITLECOLOR = tITLECOLOR;
	}
	public String getSUBDOCTITLE() {
		return SUBDOCTITLE;
	}
	public void setSUBDOCTITLE(String sUBDOCTITLE) {
		SUBDOCTITLE = sUBDOCTITLE;
	}
	public String getEDITOR() {
		return EDITOR;
	}
	public void setEDITOR(String eDITOR) {
		EDITOR = eDITOR;
	}
	public String getCHNLNAME() {
		return CHNLNAME;
	}
	public void setCHNLNAME(String cHNLNAME) {
		CHNLNAME = cHNLNAME;
	}
	
}



package com.ylzinfo.psBusiness.checkAuthor.dto;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

@XmlAccessorType(value=XmlAccessType.FIELD) //访问类型改为字段
public class WCMDOCUMENT {
	
	@XmlElement
	private PROPERTIES PROPERTIES;
	@XmlAttribute(name="Version")
	private String Version;// 本子集属性
	public PROPERTIES getPROPERTIES() {
		return PROPERTIES;
	}
	public void setPROPERTIES(PROPERTIES pROPERTIES) {
		PROPERTIES = pROPERTIES;
	}
	public String getVersion() {
		return Version;
	}
	public void setVersion(String version) {
		Version = version;
	}
}




import java.util.List;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name = "WCMDOCUMENTS")  // XML文件中的根标识 
@XmlAccessorType(value=XmlAccessType.FIELD) //访问类型改为字段
public class WCMDOCUMENTS {
	@XmlElement
	private List<WCMDOCUMENT> WCMDOCUMENT;

	public List<WCMDOCUMENT> getWCMDOCUMENT() {
		return WCMDOCUMENT;
	}

	public void setWCMDOCUMENT(List<WCMDOCUMENT> wCMDOCUMENT) {
		WCMDOCUMENT = wCMDOCUMENT;
	}
	
}

工具类的应用:



import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;

import com.ylzinfo.util.HttpRequest;

public class SingtonRequest implements ServletRequestListener{
	 private static ThreadLocal<HttpServletRequest> httpServletRequestHolder = 
         new ThreadLocal<HttpServletRequest>();
    @Override
	public void requestInitialized(ServletRequestEvent requestEvent) {
		HttpServletRequest request = (HttpServletRequest) requestEvent.getServletRequest();
        httpServletRequestHolder.set(request); // 绑定到当前线程
	}
	 @Override
	public void requestDestroyed(ServletRequestEvent requestEvent) {
		 httpServletRequestHolder.remove(); // 清理资源引用
	}
    public static HttpServletRequest getHttpServletRequest() {
	        return httpServletRequestHolder.get();
	}
}



/** 
     * 将对象直接转换成String类型的 XML输出 
     *  
     * @param obj 
     * @return 
     */  
    public static String objToXml(Object obj) {  
        // 创建输出流  
        StringWriter sw = new StringWriter();  
        try {  
            // 利用jdk中自带的转换类实现  
            JAXBContext context = JAXBContext.newInstance(obj.getClass());  
  
            Marshaller marshaller = context.createMarshaller();  
            // 格式化xml输出的格式  
            marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,  
                    Boolean.TRUE);  
            // 将对象转换成输出流形式的xml  
            marshaller.marshal(obj, sw);  
        } catch (JAXBException e) {  
            e.printStackTrace();  
        }  
        return sw.toString();  
    }  



/** 
     * 将String类型的xml转换成对象 
     */  
    public static Object XmlStrToObject(Class clazz, String xmlStr) {  
        Object xmlObject = null;  
        try {  
            JAXBContext context = JAXBContext.newInstance(clazz);  
            // 进行将Xml转成对象的核心接口  
            Unmarshaller unmarshaller = context.createUnmarshaller();  
            StringReader sr = new StringReader(xmlStr);  
            xmlObject = unmarshaller.unmarshal(sr);  
        } catch (JAXBException e) {  
            e.printStackTrace();  
        }  
        return xmlObject;  
    }  



package com.ylzinfo.util;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

public class CMyFile {
	public static byte[] readBytesFromFile(String filePath) {

        FileInputStream fileInputStream = null;
        byte[] bytesArray = null;

        try {

            File file = new File(filePath);
            bytesArray = new byte[(int) file.length()];

            //read file into bytes[]
            fileInputStream = new FileInputStream(file);
            fileInputStream.read(bytesArray);

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (fileInputStream != null) {
                try {
                    fileInputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

        }

        return bytesArray;

    }
}

正式的接口调用类:


public class MhwebAdviceService extends AbstractService{
	 public  String importDoc(String sZipFile){
     String sTargetEndpointAddress = "http://ip:port/。。";

		 ResponseEntity resEntity = new ResponseEntity();
			resEntity.setParaName(new String[]{"showtype"});
			resEntity.setParaValue(new String[]{"1"});
			// 记录集
			ResultSet resultSet = new ResultSet();
			// 设置数据集的属性
			resultSet.setName("list01");// 数据集名称
			resultSet.setView(false);// 数据集是否有对应的数据库表
			resultSet.setTableName("");// 数据集对应的数据库表的名称
			String columnName = "返回结果:result";
			resultSet.setColumns(columnName);
			resultSet.setTotalNum(2);// 符合查询条件的记录有1条。(分页查询使用)
			List<HashMap<String, String>> result = new ArrayList<HashMap<String,String>>();
			HashMap<String, String> hm = new HashMap<String, String>();
			String msg="";
	        Service service = new Service();
	        Call call = null;
	        try {
	            call = (Call) service.createCall();
	            call.setTargetEndpointAddress(new java.net.URL(sTargetEndpointAddress)); 
	            call.setOperationName(new QName("http://www.sx.hrss.gov.cn/wcm/services/trswcm:ImportService","importDocuments"));  
	            call.invoke(new Object[] {CMyFile.readBytesFromFile(sZipFile), "zip"});
	        } catch (Exception e) {
	            e.printStackTrace();
	            hm.put("result",e.toString());
				result.add(hm);
				resultSet.setResultSet(result);
				resEntity.setResultSet(resultSet);
				msg = ReaderSoapXmlOut.readerSoapXMLOut(resEntity);
				System.out.println("msg------"+msg);
				return msg;
	        }
	        hm.put("result","操作成功");
			result.add(hm);
			resultSet.setResultSet(result);
			resEntity.setResultSet(resultSet);
			msg = ReaderSoapXmlOut.readerSoapXMLOut(resEntity);
			System.out.println("msg------"+msg);
			return msg;
	    }
	 
	 public   String createRequestFile(String CRTIME,String DOCCHANNEL
			 ,String CHNLNAME,String username,String sex,String phonenumber,
			 String email,String address,String realdate,String content,
			 String fenlei,String department,String title) throws Exception  {
		     
		     WCMDOCUMENTS wcdocuments=new WCMDOCUMENTS();
		     List<WCMDOCUMENT> listDucument=new ArrayList<WCMDOCUMENT>();
		     WCMDOCUMENT wcdocument=new WCMDOCUMENT();
		     wcdocument.setVersion("6.0");
		     
			PROPERTIES properties=new PROPERTIES();
			properties.setDOCID("0");
			properties.setDOCVERSION("0");
			properties.setDOCTYPE("10");
			properties.setDOCPUBTIME("");
			properties.setCRUSER("CDATA[system]");
			properties.setCRTIME(CRTIME);
			properties.setDOCFLAG("1");
			properties.setATTRIBUTE("[CDATA[IP=提交ip&RandomSerial=查询编码]");
			properties.setATTACHPIC("0");
			properties.setDOCLINK("");
			properties.setDOCFILENAME("");
			properties.setDOCCHANNEL(DOCCHANNEL);
			properties.setDOCTITLE("<CDATA[标题]");
			properties.setDOCPEOPLE("");
			properties.setDOCSOURCENAME("");
			properties.setDOCSTATUS("1");
			String contentXML="";
			DocContent doc=new DocContent();
			doc.setUsername(username);
			doc.setSex(sex);
			doc.setRealdate(realdate);
			doc.setAddress(address);
			doc.setDepartment(department);
			doc.setContent(content);
			doc.setEmail(email);
			doc.setTitle(title);
			doc.setPhonenumber(phonenumber);
			doc.setFenlei(fenlei);
			String docToXml = RXMLUtil.objToXml(doc);
			System.out.println("docToXml="+docToXml);
			docToXml = docToXml.replaceAll("encoding=\"UTF-8\" standalone=\"yes\"?", "encoding=\"UTF-8\"")
			.replaceAll("<DocContent>", "").replaceAll("</DocContent>", "");
			System.out.println("docToXml处理后=\n"+docToXml);
			
			properties.setDOCCONTENT(docToXml);
			properties.setDOCHTMLCON("");
			properties.setDOCWORDSCOUNT("");
			properties.setDOCABSTRACT("");
			properties.setDOCKEYWORDS("");
			properties.setDOCAUTHOR("");
			properties.setDOCRELTIME(CRTIME);
			properties.setTITLECOLOR("");
			properties.setSUBDOCTITLE("");
			properties.setEDITOR("");
			properties.setCHNLNAME(CHNLNAME);
			wcdocument.setPROPERTIES(properties);
			listDucument.add(wcdocument);
			wcdocuments.setWCMDOCUMENT(listDucument);
			String wcdocumentsToXml = RXMLUtil.objToXml(wcdocuments);
			System.out.println("wcdocumentsToXml="+wcdocumentsToXml);
			wcdocumentsToXml = wcdocumentsToXml.replaceAll("encoding=\"UTF-8\" standalone=\"yes\"?", "encoding=\"UTF-8\"")
			.replaceAll("&lt;", "<").replaceAll("&gt;", ">");
			byte[] bytes=null;
			DataOutputStream dataOs =null;
			ZipOutputStream zipOut =null;
			ByteArrayInputStream bin =null;
			ByteArrayOutputStream baos =null;
			String filepath="";
			try {
				bytes = wcdocumentsToXml.getBytes("utf-8");
				System.out.println("wcdocumentsToXml处理后=\n"+wcdocumentsToXml);
				HttpServletRequest request = SingtonRequest.getHttpServletRequest();
				filepath= request.getSession().getServletContext().getRealPath("/");
				Date date = new Date();
				SimpleDateFormat sdf=new SimpleDateFormat("yyyyMMddHHmmss-S");
				String formatime = sdf.format(date);
				filepath=filepath+"advicefile\\"+formatime+".zip";
//				filepath="D://advicefile//"+formatime+".zip";
				bin = new ByteArrayInputStream(bytes); 
				baos = new ByteArrayOutputStream();//字符串输出流
				int len = 0;
				while ((len = bin.read(bytes)) != -1) {
					baos.write(bytes, 0, len); 
				}
				//声明ZipOutputStream,用来输出zip文件。  
				zipOut = new ZipOutputStream(new FileOutputStream(filepath));  //zip流包装
				ZipEntry zipEntry = new ZipEntry(formatime+"wcdocumentsToXml.xml");
				//将entry加入到zipOut中。  
				zipOut.putNextEntry(zipEntry);
				//利用DataOutputStream对ZipOutputStream进行包装。  
				dataOs = new DataOutputStream(zipOut);
				//输出zip文件。
				dataOs.write(bytes); 
//				importDoc(filepath);
				System.out.println("filepath="+filepath);
			} catch (Exception e) {
				e.printStackTrace();
	            throw new Exception(e);
			}finally{
				if (dataOs!=null) {
					try {
						dataOs.close();
					} catch (IOException e) {
						e.printStackTrace();
					}
				}
				if (zipOut!=null) {
					try {
						zipOut.close();
					} catch (IOException e) {
						e.printStackTrace();
					}
				}
				if (baos!=null) {
					try {
						baos.close();
					} catch (IOException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					} 
				}
				if (bin!=null) {
					try {
						bin.close();
					} catch (IOException e) {
						e.printStackTrace();
					}
				}
			}
			return filepath;
		}


}

猜你喜欢

转载自blog.csdn.net/qq_35008624/article/details/83744954