Hybris 和 Orika 空指针
Hybris and Orika Nullpointer
我正在使用 Hybris 和 Orika。
将 WsDto 转换为数据时出现 NullpointerException。
这是一个例外:
Caused by: java.lang.NullPointerException
at ma.glasnost.orika.generated.Orika_OrderWsDTO_OrderData_Mapper153858392176009.mapBtoA(Orika_OrderWsDTO_OrderData_Mapper153858392176009.java)
at ma.glasnost.orika.impl.ReversedMapper.mapAtoB(ReversedMapper.java:65)
at ma.glasnost.orika.impl.mapping.strategy.UseCustomMapperStrategy.map(UseCustomMapperStrategy.java:77)
at ma.glasnost.orika.impl.DefaultBoundMapperFacade.mapReverse(DefaultBoundMapperFacade.java:152)
at ma.glasnost.orika.generated.Orika_ReturnRequestWsDTO_ReturnRequestData_Mapper15384183367700.mapBtoA(Orika_ReturnRequestWsDTO_ReturnRequestData_Mapper15384183367700.java)
at ma.glasnost.orika.impl.ReversedMapper.mapAtoB(ReversedMapper.java:65)
at ma.glasnost.orika.impl.mapping.strategy.UseCustomMapperStrategy.map(UseCustomMapperStrategy.java:77)
at ma.glasnost.orika.impl.MapperFacadeImpl.map(MapperFacadeImpl.java:671)
... 146 more
问题 - 它发生在生成的 class 中,因此很难调试。
我还尝试为 Orika 启用代码生成以检查 classes,但由于某种原因,该配置不适用。我是这样做的:
tomcat.debugjavaoptions= -Dma.glasnost.orika.writeSourceFiles=true -Dma.glasnost.orika.writeClassFiles=true
我的问题是:
- 你能帮我启用这个代码生成以便进一步调试吗?
- 你能指出为什么会发生这种异常吗,因为目前还不清楚?
调试模式下的异常没有向我提供数据。
更新
发现问题来自于字段映射,在 XML 中是这样完成的:
<bean parent="fieldMapper" id="cisOrderWsDTOFieldMapper">
<property name="sourceClass" value="Data" />
<property name="destClass" value="WsDto" />
<property name="fieldMapping">
<map>
<entry key="price.discount" value="discount"/>
</map>
</property>
当 Data 映射到 WsDto 时没有问题,但是当 WsDto 映射到 Data 时出现空指针异常。
你能帮我弄清楚如何为此更好地配置双向映射吗?
在使用 Intellij 的调试模式下,您可以按类型捕获任何异常,并轻松查看导致问题的字段。
问题是因为映射配置:
<bean parent="fieldMapper" id="cisOrderWsDTOFieldMapper">
<property name="sourceClass" value="Data" />
<property name="destClass" value="WsDto" />
<property name="fieldMapping">
<map>
<entry key="price.discount" value="discount"/>
</map>
</property>
为此创建了自定义映射器(扩展 de.hybris.platform.webservicescommons.mapping.mappers.AbstractCustomMapper)并解决了一个问题。
这个问题发生在 Hybris + Orika 中,因为干净的 Orika(在 Hybris 之外)无法重现这个问题。
我正在使用 Hybris 和 Orika。
将 WsDto 转换为数据时出现 NullpointerException。
这是一个例外:
Caused by: java.lang.NullPointerException
at ma.glasnost.orika.generated.Orika_OrderWsDTO_OrderData_Mapper153858392176009.mapBtoA(Orika_OrderWsDTO_OrderData_Mapper153858392176009.java)
at ma.glasnost.orika.impl.ReversedMapper.mapAtoB(ReversedMapper.java:65)
at ma.glasnost.orika.impl.mapping.strategy.UseCustomMapperStrategy.map(UseCustomMapperStrategy.java:77)
at ma.glasnost.orika.impl.DefaultBoundMapperFacade.mapReverse(DefaultBoundMapperFacade.java:152)
at ma.glasnost.orika.generated.Orika_ReturnRequestWsDTO_ReturnRequestData_Mapper15384183367700.mapBtoA(Orika_ReturnRequestWsDTO_ReturnRequestData_Mapper15384183367700.java)
at ma.glasnost.orika.impl.ReversedMapper.mapAtoB(ReversedMapper.java:65)
at ma.glasnost.orika.impl.mapping.strategy.UseCustomMapperStrategy.map(UseCustomMapperStrategy.java:77)
at ma.glasnost.orika.impl.MapperFacadeImpl.map(MapperFacadeImpl.java:671)
... 146 more
问题 - 它发生在生成的 class 中,因此很难调试。
我还尝试为 Orika 启用代码生成以检查 classes,但由于某种原因,该配置不适用。我是这样做的:
tomcat.debugjavaoptions= -Dma.glasnost.orika.writeSourceFiles=true -Dma.glasnost.orika.writeClassFiles=true
我的问题是:
- 你能帮我启用这个代码生成以便进一步调试吗?
- 你能指出为什么会发生这种异常吗,因为目前还不清楚?
调试模式下的异常没有向我提供数据。
更新
发现问题来自于字段映射,在 XML 中是这样完成的:
<bean parent="fieldMapper" id="cisOrderWsDTOFieldMapper">
<property name="sourceClass" value="Data" />
<property name="destClass" value="WsDto" />
<property name="fieldMapping">
<map>
<entry key="price.discount" value="discount"/>
</map>
</property>
当 Data 映射到 WsDto 时没有问题,但是当 WsDto 映射到 Data 时出现空指针异常。
你能帮我弄清楚如何为此更好地配置双向映射吗?
问题是因为映射配置:
<bean parent="fieldMapper" id="cisOrderWsDTOFieldMapper">
<property name="sourceClass" value="Data" />
<property name="destClass" value="WsDto" />
<property name="fieldMapping">
<map>
<entry key="price.discount" value="discount"/>
</map>
</property>
为此创建了自定义映射器(扩展 de.hybris.platform.webservicescommons.mapping.mappers.AbstractCustomMapper)并解决了一个问题。
这个问题发生在 Hybris + Orika 中,因为干净的 Orika(在 Hybris 之外)无法重现这个问题。