为什么datahubbackoffice中的RawItemTypeFacadeStrategy会窃取6.7中所有包含" Raw"的类型

2020-09-19 07:32发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中) 1:我们使用Celum DAM...

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


1:我们使用Celum DAM。
2:我们使用Datahub和datahubbackoffice

Celum媒体引用了原始资产,其名称类似于RawToTempAssetxxx。

当尝试查看由Celum创建的媒体时,这会在后台产生错误。 堆栈跟踪如下所示(为简便起见进行了编辑。)

  2018-05-30T15:02:19,441错误DefaultWidgetInstanceManager-发送输出期间出错
  javax.ws.rs.ProcessingException:URI不是绝对的
      在org.glassfish.jersey.client.ClientRuntime.invoke(ClientRuntime.java:261)〜[jersey-client-2.25.1.jar :?]
      ...
      在org.glassfish.jersey.client.JerseyInvocation $ Builder.get(JerseyInvocation.java:321)〜[jersey-client-2.25.1.jar :?]
      ...
      在com.hybris.datahub.client.RawItemClassClient.getItemTypes(RawItemClassClient.java:65)〜[datahub-rest-client-6.6.0.0-RC3.jar:6.6.0.0-RC3]
      在de.hybris.platform.datahubbackoffice.dataaccess.rawdata.RawItemTypeFacadeStrategy.load(RawItemTypeFacadeStrategy.java:65)〜[?:?]
      在com.hybris.cockpitng.dataaccess.facades.type.impl.DefaultTypeFacade.load(DefaultTypeFacade.java:46)〜[cockpit-data-integration-6.7.0.0-RC8.jar :?]
      在com.hybris.cockpitng.dataaccess.facades.type.impl.DefaultTypeFacade.load(DefaultTypeFacade.java:53)〜[cockpit-data-integration-6.7.0.0-RC8.jar :?]
      在com.hybris.cockpitng.labels.impl.TypeQualifierStringObjectHandler.getTypeLabel(TypeQualifierStringObjectHandler.java:121)〜[cockpit-data-integration-6.7.0.0-RC8.jar :?]
      ...
      在com.hybris.backoffice.labels.impl.BackofficeLabelService.getObjectLabel(BackofficeLabelService.java:59)〜[classes/:?]
      在com.hybris.cockpitng.common.EditorConfigurator.getAttributeLabel(EditorConfigurator.java:262)〜[backoffice-widgets-6.7.0.0-RC8.jar :?]
      ...
      在com.hybris.cockpitng.common.EditorBuilder.configure(EditorBuilder.java:293)〜[backoffice-widgets-6.7.0.0-RC8.jar :?]
      在com.hybris.cockpitng.widgets.editorarea.renderer.impl.AbstractEditorAreaComponentRenderer.createEditor(AbstractEditorAreaComponentRenderer.java:294)〜[backoffice-widgets-6.7.0.0-RC8.jar :?]
      ...
      在de.hybris.platform.platformbackoffice.renderers.BackofficeEditorAreaRenderer.render(BackofficeEditorAreaRenderer.java:77)〜[?:?]
      在com.hybris.cockpitng.widgets.editorarea.renderer.impl.DefaultEditorAreaRenderer.render(DefaultEditorAreaRenderer.java:54)〜[backoffice-widgets-6.7.0.0-RC8.jar :?]
      在com.hybris.cockpitng.widgets.baseeditorarea.DefaultEditorAreaController.renderAttributes(DefaultEditorAreaController.java:1091)〜[backoffice-widgets-6.7.0.0-RC8.jar :?]
      在com.hybris.cockpitng.widgets.baseeditorarea.DefaultEditorAreaController.showAllAttributes(DefaultEditorAreaController.java:1060)〜[backoffice-widgets-6.7.0.0-RC8.jar :?]
      在com.hybris.cockpitng.widgets.baseeditorarea.DefaultEditorAreaController.updateView(DefaultEditorAreaController.java:883)〜[backoffice-widgets-6.7.0.0-RC8.jar :?]
      在com.hybris.cockpitng.widgets.baseeditorarea.DefaultEditorAreaController.setObject(DefaultEditorAreaController.java:410)〜[backoffice-widgets-6.7.0.0-RC8.jar :?]
      ...
      在com.hybris.cockpitng.widgets.collectionbrowser.mold.impl.DefaultSelectAndFocusDelegateController.sendItemFocusedNotification(DefaultSelectAndFocusDelegateController.java:197)〜[backoffice-widgets-6.7.0.0-RC8.jar :?]
      ...
      在org.zkoss.zk.ui.AbstractComponent.onEvent(AbstractComponent.java:3162)[zk-8.5.0.jar:3.6.4]
      ...
      在javax.servlet.http.HttpServlet.service(HttpServlet.java:661)[servlet-api.jar :?]
      ...
      在java.lang.Thread.run(Thread.java:748)[?:1.8.0_161]
  造成原因:java.lang.IllegalArgumentException:URI不是绝对的
      在java.net.URI.toURL(URI.java:1088)〜[?:1.8.0_161]
      ...
      在org.glassfish.jersey.client.ClientRuntime.invoke(ClientRuntime.java:252)〜[jersey-client-2.25.1.jar :?]
      ...更多180

  

错误来自,该错误来自RawItemTypeFacadeStrategy中的逻辑,该逻辑使用StringUtils.contains(s," Raw")||应答对canHandle(String s)的调用。 xxx

我不确定该策略的实现方式,但是将包含字符串" Raw"的所有内容都包含在内是不正确的。

我们已针对此问题进行了临时修复

 公共类PyRawItemTypeFacadeStrategyAdapter实现TypeFacadeStrategy {
 
      @Autowired(必填=假)
      @Qualifier(" defaultRawItemTypeFacadeStrategy")
      私有TypeFacadeStrategy rawItemTypeFacadeStrategy;
 
      @Override
      public boolean canHandle(final String s){
          return rawItemTypeFacadeStrategy!= null &&!s.startsWith(" RawToTempAsset")&& rawItemTypeFacadeStrategy.canHandle(s);
      }
     
     //其余的类仅委托给实际的typefacade
  }
  
2条回答
闻人可可
2020-09-19 07:49 .采纳回答

嗨,

您提到的实现似乎是错误的:

  @Override
      public boolean canHandle(final String s)
      {
          返回StringUtils.contains(s," Raw")||  StringUtils.equalsIgnoreCase(s,ItemData.class.getName());
      }

  

我将报告给负责的团队。

干杯, Wojtek

一周热门 更多>