- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 azure 函数应用程序,它是一个 EventGridTrigger,并且我正在使用 gradle。我可以构建我的代码并且测试通过。但是,当运行任务来打包我的 azure 函数时,任务失败,并且我在终端中收到此异常:
Execution failed for task ':functionsPackage'.
> java.lang.NullPointerException (no error message)
与我一起工作的一位高级工程师告诉我,他以前看到过这个错误,这是一个错误。他说,这种情况通常发生在 java 8 Streams API lambda 中,我需要找到每个 lambda 并用一个讨厌的类替换,所以我就这样做了。我注释了所有 azure function apps 代码,并逐段重新引入每一行代码,直到找到哪一行破坏了 azureFunctionsPackage 任务,我发现它是这个方法:
private boolean isHandledSubject(SchedulerEventSubject schSubject)
{
// Handle our subscriber ID
//if(SubscriberIds.SWITCH_DMS_ID.equals(schSubject.getSubscriberId()))
//{
// return true;
// }
// If the subscriber ID is ALL and it's a switch or network element
// if(SubscriberIds.ALL_ID.equals(schSubject.getSubscriberId()))
// {
// return ElementType.SWITCH.equals(schSubject.getElementType()) ||
// ElementType.NETWORK.equals(schSubject.getElementType());
// }
//
return false;
}
正如您所看到的,即使我完全注释掉了所有方法主体,它也会破坏代码并导致 NullPointerException,我很困惑,因为我希望它至少是其中的方法之一?即使我使该方法无效或返回 true,它仍然会中断。此方法在名为
handleEvent 的主 EventGridTrigger 函数中被调用 1 次(我没有编写任何代码,因此我希望避免任何重大更改,以避免破坏某些内容)。我将粘贴下面的代码,但是以前有人见过这个吗?我有点困惑。我在自己的分支上对此代码库进行了更改,并且开发分支可以正常编译/构建。
@FunctionName("genericEventHandler")
public void handleEvent(@EventGridTrigger(name = "event") String content) {
try {
if (content == null)
return;
ObjectMapper objMap = new ObjectMapper();
objMap.registerModule(new JodaModule());
EventGridEvent event = SchedulerIcdKt.fromSchedulerEventJson(content);
log.info("EventObject {} ", event);
String schedulerTopic = keyProvider.get(
SCHEDULER_EVENT_GRID_TOPIC_FULL_PATH);
// Check for nulls
if (isBlank(schedulerTopic) || isBlank(event.topic())) {
log.error("Event Grid Topic was NULL! KeyVault:{} Event Topic:{}", schedulerTopic, event.topic());
return;
}
// First check if we even have an event from the Scheduler
if (!event.topic().equalsIgnoreCase(schedulerTopic))
return;
SchedulerEventSubject schSubject = new SchedulerEventSubject(event.subject());
@SuppressWarnings("unchecked")
List<SchedulerEvent> schedulerEventList = (List<SchedulerEvent>) event.data(); //unsafe cast
if (!isHandledSubject(schSubject))
return;
schedulerEventList.stream().forEach(new Consumer<SchedulerEvent>() {
@Override
public void accept(SchedulerEvent schedEvent) {
String networkId;
SnmpCred cred = new SnmpCred();
if (schedEvent.getActionType().equals(SchedulerEventActionType.NetworkCreate)) {
NetworkCreate network_create = (NetworkCreate) schedEvent;
networkId = network_create.getNetworkId();
} else if (schedEvent.getActionType().equals(SchedulerEventActionType.NetworkUpdate)) {
NetworkUpdate network_update = (NetworkUpdate) schedEvent;
networkId = network_update.getNetworkId();
} else {
log.info("Unhandled scheduler data: {}", schedEvent);
return;
}
try {
Optional<Network> network = DataGatewayFactory.getInstance().getNetworkCrud().get(networkId);
if (!network.isPresent()) {
log.error("Error trying to retreive Network with ID {} from the database.", networkId);
return;
}
boolean status;
// If Deployment Type is DEMO, ONLY call deployPtpConfigBlob (no switch config)
if (network.get().getDeploymentType().equals(DeploymentType.DEMO)) {
status = deployPtpConfigBlob(network.get());
} else {
createOrGetNetworkSnmpPassword(network.get(), cred);
if ((status = deploySwitchConfigBlob(network.get(), cred.getAuth(), cred.getPriv()))) {
status = deployPtpConfigBlob(network.get());
}
}
// Return the same scheduler subject with the subject Id set to switch dms
schSubject.setSubscriberId(SubscriberIds.SWITCH_DMS_ID);
EventGridFunctions.this.publishDmsStatus(schSubject, status, schedEvent);
} catch (Exception de) {
log.error("Exception while trying to retreive the network {}.", networkId, de);
}
}
});
} catch (Exception e) {
log.error("EventObject {} ", content, e);
}
}
最佳答案
好的,我可以通过注释 Azure 函数中的所有代码来“修复”此问题,而项目中的其他代码则未注释且能够运行。我构建了该项目并且成功了。这让我知道问题 100% 出在我的 Azure 函数上。
然后,我注释掉了 azure 函数中的所有代码,并逐行取消注释并重新构建,以查看它何时会中断。
当我点击一个方法时,比如我上面发布的“isHandledSubject”方法,构建将因 NullPointerException 而中断。即使使用空方法体和 void 作为返回类型。我在运行 azureFunctionsPackage 类时打印出 --scan 信息时看到 ClassPath = null,因此我决定将该方法移到该类之外(即,我创建了一个名为“HelperFunctions.java”的新类并将方法放在其中)。
您瞧,构建成功了。然后,我将所有其他方法放置在与 Azure 函数相同的 .java 文件中(EventGridTriggers、QueueTriggers、HttpTriggers 等),并将它们移到相关类之外,并将它们放入 HelperFunctions.java 中,一切都构建得很好。
我仍然不太明白这个错误的根源,但构建也在云(azure devops)上成功,所以我很高兴:D
关于java - Azure 函数、azureFunctionsPackage 任务因 java.lang.NullPointerException 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60857725/
我正在将我的模板代码移植到 XTend。在某些时候,我在测试用例中有这种类型的条件处理: @Test def xtendIfTest() { val obj = new FD if (
我是新来的 kotlin , 当我开始 Null Safety 时,我对下面的情况感到困惑. There's some data inconsistency with regard to initia
我的应用程序一直在各种Android版本中保持良好状态。我有用户在Android 4.3、5.0、5.1和6.0上正常运行。但是,具有S7 Edge的用户刚刚更新了Android 7.0,将文本粘贴到
我使用的是最新版本的 LWUIT (1.5)。我在资源编辑器中设计了我的表单,然后将代码生成到 netbeans。问题是如果我想访问除表单之外的任何对象,我会收到此错误: java.lang.Null
更新: 我在 Fedora 21 上运行它。 SonarQube - 5.0。 SonarQube Runner - 2.4 更新 2:Findbugs v3.1,Java 插件 v2.8 更新3:
RecupData 我的类仅在 web 中返回 NullPointerException。我连接到 pgsql db 8.3.7 - 该脚本在“控制台”syso 中运行良好 - 但引发了测试 Web
我在 mac 上使用 Processing 2.08。我正在尝试使用文档中给出的 createShape 函数创建 PShape。 PShape s; void setup(){ size(500
我在 mac 上使用 Processing 2.08。我正在尝试使用文档中给出的 createShape 函数创建 PShape。 PShape s; void setup(){ size(500
每次运行此 jsp 时,都会收到以下错误异常: org.apache.jasper.JasperException: java.lang.NullPointerException root cause
Kotlin 在编译时有一个出色的 null 检查,使用分离到“可空?”和“不可为空”的对象。它有一个 KAnnotator 来帮助确定来自 Java 的对象是否可以为空。但是,如果 not-null
我有一个布局将显示一个TextView,用于显示一个滴答时间。我遵循了此链接中的代码 How to Display current time that changes dynamically for
Elasticsearch 1.4.1版(“lucene_version”:“4.10.2”) 我有一个像这样的文件: $ curl 'http://localhost:9200/blog/artic
这是我从另一个类调用函数的方法Selenium 设置已定义。 public void Transfer() throws Exception { System.out.println("\nTrans
我试图在主类中使用我在此类中创建的函数,但它崩溃并显示“警告:无法在根 0 处打开/创建首选项根节点 Software\JavaSoft\Prefsx80000002。 Windows RegCrea
这个问题已经有答案了: What is a NullPointerException, and how do I fix it? (12 个回答) 已关闭 3 年前。 我有一个 Java 代码,它将
我声明了两张牌: Card card1 = new Card('3', Card.Suit.clubs); Card card2 = new Card('T', Card.Suit.diamonds)
我编写了一段代码来解码 Base64 图像并在 javafx 中表示该图像。在我的 url base64 代码中不断变化。这就是我在 javafx 代码中使用任务的原因。但我收到错误:java.lan
我正在尝试使用 arrayList 的 arrayList 在 Java 中实现图形。 每当调用 addEdge 函数时,我都会收到 NullPointerException 。我似乎无法弄清楚为什么
我是 Java/android 的新手,所以很多这些术语都是外国的,但我愿意学习。我不打算详细介绍该应用程序,因为我认为它不相关。我目前的问题是,我使用了博客中的教程和代码 fragment ,并使我
我正在开发一个 Android 应用程序来在 Android developer guide 的帮助下录制视频.我程序上的所有代码都与此页面相同。 我在 之外定义了权限标签。 当应
我是一名优秀的程序员,十分优秀!