Java 无法将lambda表达式强制转换为事件处理程序
我在WildFly 10.0.0.CR5容器中运行了一个servlet。我正在向servlet发送一个包含Java 无法将lambda表达式强制转换为事件处理程序,java,lambda,wildfly,Java,Lambda,Wildfly,我在WildFly 10.0.0.CR5容器中运行了一个servlet。我正在向servlet发送一个包含SOAPMessage的POST请求,该请求在servlet中得到验证: private void unmarshalXmlMsg(final Node node, final JAXBContext jaxbContext, final URL resourceUrl) { try { SchemaFactory schemaFactory = SchemaFact
SOAPMessage
的POST请求,该请求在servlet中得到验证:
private void unmarshalXmlMsg(final Node node, final JAXBContext jaxbContext, final URL resourceUrl) {
try {
SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Schema schema = schemaFactory.newSchema(resourceUrl);
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
unmarshaller.setSchema(schema);
unmarshaller.setEventHandler(e -> false);
Object unmarshalledObj;
String localName = node.getLocalName();
String classpath = CLASS_MAP.get(localName);
if (classpath == null) {
unmarshalledObj = unmarshaller.unmarshal(node);
} else {
unmarshalledObj = unmarshaller.unmarshal(node, Class.forName(classpath));
}
if (unmarshalledObj instanceof JAXBElement<?>) {
routeMessage((JAXBElement<?>) unmarshalledObj);
}
} catch (JAXBException | SAXException | ClassNotFoundException e) {
logger.error("Error unmarshalling xml from body of soapMessage", e);
}
}
将其更改为以下可修复错误,其他所有操作都会正常执行:
unmarshaller.setEventHandler(new ValidationEventHandler() {
@Override
public boolean handleEvent(ValidationEvent arg0) {
return false;
}
});
我知道在这种情况下,e->false
是有效的,但我不确定为什么它在WildFly容器中不起作用。提前感谢您的帮助
编辑:我还应注意,上述异常是由以下原因引起的:
java.lang.BootstrapMethodError: call site initialization exception
编辑:我还检查了java-version
和javac-version
,两者都是1.8.0。我尝试创建一个解组器
,并在将事件处理程序发送到servlet之前,在客户端代码中以相同的方式设置事件处理程序,效果很好。这让我相信这是WildFly内部的一个问题……但我不知道从这里该怎么办。请帮忙 您好,我认为ValidationEventHandler和Unmarshaller无法接受函数接口\λ表达式。我试图了解一下jar api和具体实现。jaxb-2.2.x为什么不接受lambda表达式?该方法接受一个验证venthandler
,这是一个功能接口,对吗?你能链接到一些能说明你为什么不这么想的东西吗?
java.lang.BootstrapMethodError: call site initialization exception