- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我在仅在 Docker 容器中运行的应用程序中使用 AkkaStream 中的 XmlDecoder 时遇到了问题。
错误描述
java.lang.ClassNotFoundException: com/example/xmldecoder/FileDto
Continuing ...
java.lang.ClassNotFoundException: com/example/xmldecoder/FileDto
Continuing ...
java.lang.NoSuchMethodException: <unbound>=XMLDecoder.new();
Continuing ...
java.lang.NoSuchMethodException: <unbound>=XMLDecoder.new();
Continuing ...
java.lang.IllegalStateException: The outer element does not return value
Continuing ...
java.lang.IllegalStateException: The outer element does not return value
Continuing ...
java.lang.IllegalStateException: The outer element does not return value
Continuing ...
java.lang.IllegalStateException: The outer element does not return value
Continuing ...
2019-05-22 09:42:29.145 ERROR 1 --- [onPool-worker-5] com.example.xmldecoder.FileReader : Unexpected exception in load file, {}
java.lang.ArrayIndexOutOfBoundsException: Index 0 out of bounds for length 0
at java.desktop/java.beans.XMLDecoder.readObject(XMLDecoder.java:251) ~[na:na]
at com.example.xmldecoder.FileReader.lambda$loadFile$0(XmlDecoderApplication.java:66) ~[classes!/:0.0.1-SNAPSHOT]
at java.base/java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1700) ~[na:na]
at java.base/java.util.concurrent.CompletableFuture$AsyncSupply.exec(CompletableFuture.java:1692) ~[na:na]
at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:290) ~[na:na]
at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1020) ~[na:na]
at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1656) ~[na:na]
at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1594) ~[na:na]
at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:177) ~[na:na]
需要满足几个条件:
UseContainerSupport
、ActiveProcessorCount
),但没有帮助代码
可用的可运行示例 here
下面有问题的代码:
@Slf4j
@RequiredArgsConstructor
class FileReader {
private final ActorSystem system;
private final ReadJob readJob;
public NotUsed loadFiles() {
List<String> paths = listFiles(readJob);
return Source.from(paths)
.via(Flow.of(String.class).mapAsync(5, p -> loadFile(p)))
.to(Sink.foreach(System.out::println)).run(ActorMaterializer.create(system));
}
private CompletionStage<String> loadFile(String filePath) {
return CompletableFuture.supplyAsync(() -> {
try {
FileInputStream fis2 = new FileInputStream(filePath);
BufferedInputStream bis2 = new BufferedInputStream(fis2);
XMLDecoder xmlDecoder = new XMLDecoder(bis2);
FileDto mb = (FileDto) xmlDecoder.readObject();
log.info("Decoder: {}", mb);
return mb.toString();
} catch (Exception e) {
log.error("Unexpected exception in load file, {}", e);
throw new RuntimeException("Unexpected exception in load file", e);
}
});
}
private List<String> listFiles(ReadJob readJob) {
File folder = new File(readJob.getHolderDirPath().toString());
File[] listOfFiles = folder.listFiles();
log.info(listOfFiles.toString());
return Stream.of(listOfFiles).map(File::getAbsolutePath).collect(Collectors.toList());
}
可以这样运行,例如:
@SpringBootApplication
@EnableScheduling
@Slf4j
public class XmlDecoderApplication {
private Path holderPath = Paths.get("opt", "files_to_load");
public static void main(String[] args) {
SpringApplication.run(XmlDecoderApplication.class, args);
}
@Scheduled(fixedDelay = 30000, initialDelay = 1000)
public void readFiles() {
FileReader reader = new FileReader(ActorSystem.create(), new ReadJob(holderPath));
reader.loadFiles();
}
}
我想根本原因在 host <-> docker <-> java
之间在此先感谢您对此的任何帮助
最佳答案
示例代码通过以下修改对我有用:替换行
XMLDecoder xmlDecoder = new XMLDecoder(bis2);
与
XMLDecoder xmlDecoder = new XMLDecoder(bis2, null, null, FileDto.class.getClassLoader());
即有效地强制 XMLDecoder
使用用于加载相关类的精确类加载器。但至于为什么只出现
--cpus
设置为大于 1 的某个值– 我只有一些(大部分)没有根据的猜测。
关于java - 仅在 Docker 容器内的 XmlDecoder 和 Akka Stream 存在问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56254337/
我的应用程序是客户端服务器应用程序。 A 类类型的对象在客户端使用 java.beans.XMLEncoder 进行编码并保存在数据库中。 A类位于客户端。我需要在服务器端解码该对象。当我尝试使用 j
我有一个使用插件的小程序。我正在使用Java内置的X MLDecoder/Encoder系统保存该程序的数据文件。我遇到的问题是,当我使用 XMLDecoder 加载这些文件时,我收到一条消息,指出
这是在生产现场向我报告的。我们有一个消息数据库表,其中的对象使用标准 Java XMLEncoder 以 XML 形式存储。当我们处理消息时,我们从数据库中的字段中解码对象。 有时客户端会记录此错误。
使用 XMLEncoder 将 Java Bean 序列化为 XML和 XMLDecoder似乎是一种非常巧妙的方法:来自许多来源的许多类都可以可靠地序列化,只需使用它们的公共(public)接口(i
我正在尝试使用 XMLDecoder 从 XML 文件中读取对象。构造似乎没问题,但是当我调用 readObject() 方法时,我得到的是 null 而不是我期望的对象。 文件存在并且创建的 Buf
Java 有一个 transient 关键字,它与默认序列化一起使用以指示不应序列化的值。但是,如果我将 XML 序列化与 XMLDecoder 结合使用,则与该字段关联的属性仍会被序列化。我在 JS
.NET 中是否有编码 和解码 XML 的方法?我似乎找不到它们,并且想知道为什么它们不存在以及应该使用什么来代替? 我需要对 XML 文档进行编码并将其传递给 Web 服务上的字符串参数。然后需要在
出现此错误 java.lang.IllegalArgumentException: Unsupported element: net 来自此示例 xml 文件
抱歉,这是一个非常新的 Java 问题! 如何将一个字符串输入到 XMLEncoder 并从 XMLDecoder 输出一个字符串? 字符串包含有关 JavaBeans 对象的信息。 最佳答案 这是一
我正在编写一个应用程序,以下列格式读取大量基本用户详细信息;阅读后允许用户使用他们的电子邮件搜索用户的详细信息: NAME ROLE EMAIL ------
我在仅在 Docker 容器中运行的应用程序中使用 AkkaStream 中的 XmlDecoder 时遇到了问题。 错误描述 java.lang.ClassNotFoundException: co
有人可以解释为什么 FLEX 4.5 XMLDecoder 对我的 XML 数据这样做吗? var decoder:XMLDecoder = new XMLDecoder; var $object:O
我是一名优秀的程序员,十分优秀!