如何设置 JAXWS MTOM 附件的文件名?
How do you set the filename for a JAXWS MTOM Attachment?
早上我会用一个代码示例来更新这个,但我有一个基本的 JAX-WS 实现,用于通过 MTOM 下载生成的文件,当我在 SOAPUI 中测试它时,附加的文件有一个随机的filename 即使我传递给 DataHandler 的 DataSource 通过 DataSource 实现上的 getName() 方法具有正确的文件名。只是想弄清楚我错过了什么。
这是我的端点
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;
}
}
还有我的自定义数据源Class
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"
文件名未在 MTOM 中使用。如果要发送文件名,请在 XML.
中添加另一个元素
早上我会用一个代码示例来更新这个,但我有一个基本的 JAX-WS 实现,用于通过 MTOM 下载生成的文件,当我在 SOAPUI 中测试它时,附加的文件有一个随机的filename 即使我传递给 DataHandler 的 DataSource 通过 DataSource 实现上的 getName() 方法具有正确的文件名。只是想弄清楚我错过了什么。
这是我的端点
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;
}
}
还有我的自定义数据源Class
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"
文件名未在 MTOM 中使用。如果要发送文件名,请在 XML.
中添加另一个元素