代码之家  ›  专栏  ›  技术社区  ›  Shawn

如何设置JAX-MTOM附件的文件名?

  •  0
  • Shawn  · 技术社区  · 9 年前

    我将在早上用一个代码示例更新这个示例,但我有一个基本的JAX-WS实现,用于通过MTOM下载生成的文件,并且当我在SOAPUI中测试它时,附带的文件有一个随机文件名,即使我通过DataSource实现上的getName()方法传递给DataHandler的DataSource具有正确的文件名。只是想弄清楚我缺少什么。

    这是我的端点

    import javax.activation.DataHandler;
    import javax.jws.WebMethod;
    import javax.jws.WebService;
    import javax.xml.ws.soap.MTOM;
    import org.apache.log4j.Logger;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.context.support.SpringBeanAutowiringSupport;
    
    @Controller
    @WebService
    @MTOM(enabled = true, threshold = 1024)
    public class DataExtractsEndpoint extends SpringBeanAutowiringSupport{
    
        private final Logger LOGGER = Logger.getLogger(this.getClass());
    
        @Autowired
        private DataExtractDao dataExtractDao;
    
        @WebMethod
        public DataHandler getDownload() {
            LOGGER.debug(dataExtractDao.getDataSource().getName());
            LOGGER.debug(dataExtractDao.getDataSource().getContentType());
            DataHandler dh = new DataHandler(dataExtractDao.getDataSource());     
            return dh;
        }
    }
    

    以及我的自定义DataSource类

    import java.io.ByteArrayInputStream;
    import java.io.ByteArrayOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import javax.activation.DataSource;
    import org.springframework.stereotype.Service;
    
    @Service
    public class ZipFileDataSource implements DataSource{
    
        private byte[] fileData;
        private final String fileContentType = "application/zip";
        private String fileName;
        private ByteArrayOutputStream baos;
        private ByteArrayInputStream bais;
    
        @Override
        public InputStream getInputStream() throws IOException {
            bais = new ByteArrayInputStream(fileData);
            return bais;
        }
    
        @Override
        public OutputStream getOutputStream() throws IOException {
            baos = new ByteArrayOutputStream();
            return baos;
        }
    
        public void saveOutputStream(){
            fileData = baos.toByteArray();
        }
    
        @Override
        public String getContentType() {
            return fileContentType;
        }
    
        @Override
        public String getName() {
            return fileName;
        }
    
        public void setName(String fileName){
            this.fileName = fileName;
        }
    
    }
    

    示例文件名“attachment-2da67c29-c8de-455a-968c-a310eb470f8eexamplejaxwssuncom7224513233547289534.zip”

    1 回复  |  直到 9 年前
        1
  •  1
  •   artbristol    9 年前

    MTOM中未使用文件名。如果要发送文件名,请在XML中添加另一个元素。