Avro 架构问题 - 抛出空指针异常但数据有效
Avro schema issue - throwing null pointer exception but data is valid
这是我正在发送的数据的示例,但由于某种原因,我遇到了一个空指针异常,我试图剥离一些代码以使其更小,但我想也许我需要保留很多显示格式的模式以及什么是嵌套字段。已编辑为仅显示相关部分,因为不想在线宣传我的架构
{
"eventType": "XXX",
"correlationId": "XXX",
"timestamp": XXX,
"policy": {
"policyNumber": "XXX",
"policyId": "XXX",
"customerNumber": "XXX",
......(lots more fields like this)
"insuredsAndDrivers": [{
......(lots more fields )
"driver": {
"relationshipToInsuredCd": "IN",
"driverTypeCd": "P",
"occupationCd": null,
"driverLicenses": [{
"licenseTypeCd": null,
"licenseDate": null,
"licenseStateProvCd": null,
"licensePermitNumber": null
}]
}
}, {
......(lots more fields like this)
},
"driver": null
}],
"vehicles": [{
.....(lots of single fields here)
"coverages": {
.....(lots of single fields here)
}
}],
"customer": {
"extensionFields": {
"nif": "XXX"
},
"individualDetails": {
......(lots more fields like this)
},
"phones": [{
"phoneNumber": "1234567890"
}],
"addresses": [{
......(lots more fields like this)
}]
},
"previous_policy": null
}
}
这是 Avro 架构,抱歉它太长了
{
"type": "record",
"namespace": "my.namespace",
"name": "MyEvent",
"fields": [
....lots of fields here
{
"name": "insuredsAndDrivers",
"default": [],
"type": {
"type": "array",
"items": {
"name": "InsuredsAndDrivers_Record",
"default": "",
"type": "record",
"fields": [
......(lots more fields here),
{
"name": "driver",
"type": {
"name": "Driver",
"default": "",
"type": "record",
"fields": [{
"name": "relationshipToInsuredCd",
"type": ["string", "null"],
"default": ""
},
{
"name": "driverTypeCd",
"type": ["string", "null"],
"default": ""
},
{
"name": "occupationCd",
"type": ["string", "null"],
"default": ""
},
{
"name": "driverLicenses",
"default": [],
"type": {
"type": "array",
"items": {
"name": "DiverLicenses_Record",
"default": "",
"type": "record",
"fields": [{
"name": "licenseTypeCd",
"type": ["string", "null"],
"default": ""
},
{
"name": "licenseDate",
"type": ["string", "null"],
"default": ""
},
{
"name": "licenseStateProvCd",
"type": ["string", "null"],
"default": ""
},
{
"name": "licensePermitNumber",
"type": ["string", "null"],
"default": ""
}
]
}
}
}
]
}
}
]
}
}
}
...rest of schema not relevant
我遇到错误 Caused by: java.lang.NullPointerException: null of com.lm.gde.eventing.avro.Driver of com.lm.gde.eventing.avro.InsuredsAndDrivers_Record of array of com.lm.gde.eventing.avro.Policy of com.lm.gde.eventing.avro.EnrichedPolicyEvent
数组的第二个 "InsuredsAndDrivers_Record" 元素 "insuredsAndDrivers":
{
"firstName": "XXX",
"middleName": "Driver secondLastName",
...... (lots more fields here)
"phones": [],
"emails": [],
"insured": {
"primaryInsuredInd": "false"
},
"driver": null <---- THIS
}
驱动程序字段为空,但架构将其定义为:
"name": "insuredsAndDrivers",
"default": [],
"type": {
"type": "array",
"items": { ... }
}
不可为空。您需要提供驱动程序或使数组的项目类型与 null 联合。
这是我正在发送的数据的示例,但由于某种原因,我遇到了一个空指针异常,我试图剥离一些代码以使其更小,但我想也许我需要保留很多显示格式的模式以及什么是嵌套字段。已编辑为仅显示相关部分,因为不想在线宣传我的架构
{
"eventType": "XXX",
"correlationId": "XXX",
"timestamp": XXX,
"policy": {
"policyNumber": "XXX",
"policyId": "XXX",
"customerNumber": "XXX",
......(lots more fields like this)
"insuredsAndDrivers": [{
......(lots more fields )
"driver": {
"relationshipToInsuredCd": "IN",
"driverTypeCd": "P",
"occupationCd": null,
"driverLicenses": [{
"licenseTypeCd": null,
"licenseDate": null,
"licenseStateProvCd": null,
"licensePermitNumber": null
}]
}
}, {
......(lots more fields like this)
},
"driver": null
}],
"vehicles": [{
.....(lots of single fields here)
"coverages": {
.....(lots of single fields here)
}
}],
"customer": {
"extensionFields": {
"nif": "XXX"
},
"individualDetails": {
......(lots more fields like this)
},
"phones": [{
"phoneNumber": "1234567890"
}],
"addresses": [{
......(lots more fields like this)
}]
},
"previous_policy": null
}
}
这是 Avro 架构,抱歉它太长了
{
"type": "record",
"namespace": "my.namespace",
"name": "MyEvent",
"fields": [
....lots of fields here
{
"name": "insuredsAndDrivers",
"default": [],
"type": {
"type": "array",
"items": {
"name": "InsuredsAndDrivers_Record",
"default": "",
"type": "record",
"fields": [
......(lots more fields here),
{
"name": "driver",
"type": {
"name": "Driver",
"default": "",
"type": "record",
"fields": [{
"name": "relationshipToInsuredCd",
"type": ["string", "null"],
"default": ""
},
{
"name": "driverTypeCd",
"type": ["string", "null"],
"default": ""
},
{
"name": "occupationCd",
"type": ["string", "null"],
"default": ""
},
{
"name": "driverLicenses",
"default": [],
"type": {
"type": "array",
"items": {
"name": "DiverLicenses_Record",
"default": "",
"type": "record",
"fields": [{
"name": "licenseTypeCd",
"type": ["string", "null"],
"default": ""
},
{
"name": "licenseDate",
"type": ["string", "null"],
"default": ""
},
{
"name": "licenseStateProvCd",
"type": ["string", "null"],
"default": ""
},
{
"name": "licensePermitNumber",
"type": ["string", "null"],
"default": ""
}
]
}
}
}
]
}
}
]
}
}
}
...rest of schema not relevant
我遇到错误 Caused by: java.lang.NullPointerException: null of com.lm.gde.eventing.avro.Driver of com.lm.gde.eventing.avro.InsuredsAndDrivers_Record of array of com.lm.gde.eventing.avro.Policy of com.lm.gde.eventing.avro.EnrichedPolicyEvent
数组的第二个 "InsuredsAndDrivers_Record" 元素 "insuredsAndDrivers":
{
"firstName": "XXX",
"middleName": "Driver secondLastName",
...... (lots more fields here)
"phones": [],
"emails": [],
"insured": {
"primaryInsuredInd": "false"
},
"driver": null <---- THIS
}
驱动程序字段为空,但架构将其定义为:
"name": "insuredsAndDrivers",
"default": [],
"type": {
"type": "array",
"items": { ... }
}
不可为空。您需要提供驱动程序或使数组的项目类型与 null 联合。