我一直在努力让这个测试工作一段时间,相关代码在生产中执行得很好我的假设是它有一些额外的配置,很多搜索似乎与电子邮件处理和其他库特别相关,我不想要要包括其他任何内容,我缺少什么将 DataHandler 链接到处理“文本/纯文本”的相关方式?
预期结果:DataHandler 允许我将输入“值”流回结果中。
重现此代码的问题:
import java.io.IOException;
import java.io.InputStream;
import javax.activation.CommandInfo;
import javax.activation.CommandMap;
import javax.activation.DataHandler;
import org.apache.commons.io.IOUtils;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
public class DataHandlerTest {
@Before
public void setUp() throws Exception {
}
@After
public void tearDown() throws Exception {
}
@Test
public void test() throws IOException {
printDefaultCommandMap();
DataHandler dh = new DataHandler("Value", "text/plain");
System.out.println("DataHandler commands:");
printDataHandlerCommands(dh);
dh.setCommandMap(CommandMap.getDefaultCommandMap());
System.out.println("DataHandler commands:");
printDataHandlerCommands(dh);
final InputStream in = dh.getInputStream();
String result = new String(IOUtils.toByteArray(in));
System.out.println("Returned String: " + result);
}
private void printDataHandlerCommands(DataHandler dh) {
CommandInfo[] infos = dh.getAllCommands();
printCommands(infos);
}
private void printDefaultCommandMap() {
CommandMap currentMap = CommandMap.getDefaultCommandMap();
String[] mimeTypes = currentMap.getMimeTypes();
System.out.println("Found " + mimeTypes.length + " MIME types.");
for (String mimeType : mimeTypes) {
System.out.println("Commands for: " + mimeType);
printCommands(currentMap.getAllCommands(mimeType));
}
}
private void printCommands(CommandInfo[] infos) {
for (CommandInfo info : infos) {
System.out.println(" Command Class: " +info.getCommandClass());
System.out.println(" Command Name: " + info.getCommandName());
}
}
}
例外:
javax.activation.UnsupportedDataTypeException:在 javax.activation.DataHandler.getInputStream(DataHandler.java:249) 处没有 MIME 类型文本/纯文本的对象 DCH
非常感谢您的帮助,我希望这是一个格式良好的问题!
=========================
2月25日更新
我发现如果我知道我在 DataHandler 中存储了一个字符串,那么我可以将结果转换为字符串并返回存储的对象,例如:
@Test
public void testGetWithoutStream() throws IOException {
String inputString = "Value";
DataHandler dh = new DataHandler(inputString, "text/plain");
String rawResult = (String) dh.getContent();
assertEquals(inputString, rawResult);
}
但是被测代码使用 InputStream,所以我的“真实”测试在本地执行时仍然失败。继续我的调查,仍然希望有人对此提供帮助/指导......