Я некоторое время пытался заставить этот тест работать, соответствующий код отлично работает в производстве, я предполагаю, что он имеет некоторую дополнительную конфигурацию, похоже, что много поиска связано конкретно с обработкой электронной почты и дополнительными библиотеками, я не хочу чтобы включить что-нибудь еще, что мне не хватает, чтобы связать 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: нет объекта DCH для типа MIME text/plain в javax.activation.DataHandler.getInputStream(DataHandler.java:249)
Помощь высоко ценится, я надеюсь, что это правильно сформулированный вопрос!
========================
Обновление от 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, поэтому мои «настоящие» тесты по-прежнему не работают при локальном выполнении. Продолжаю свое расследование и все еще надеюсь на чью-то помощь / руководство по этому вопросу...