Skip to Content
1
May 31, 2018 at 10:14 AM

Why does RawItemTypeFacadeStrategy in datahubbackoffice steal all types containing "Raw" in 6.7

117 Views

1: We use the Celum DAM.
2: We use Datahub, and datahubbackoffice

Celum media have a reference to a raw asset, the name of which is something like RawToTempAssetxxx.

This causes errors in backoffice when trying to view a Media created by Celum. A stacktrace looks like this (edited for brevity).

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

The error comes from the logic in the RawItemTypeFacadeStrategy which answers the call to canHandle(String s) with StringUtils.contains(s, "Raw") || xxx

I am unsure of what the implementation should be for this strategy, but hogging everything containing the string "Raw" is not correct.

We have made a temporary fix for this issue:

 public class PyRawItemTypeFacadeStrategyAdapter implements TypeFacadeStrategy {
 
     @Autowired(required = false)
     @Qualifier("defaultRawItemTypeFacadeStrategy")
     private TypeFacadeStrategy rawItemTypeFacadeStrategy;
 
     @Override
     public boolean canHandle(final String s) {
         return rawItemTypeFacadeStrategy != null && !s.startsWith("RawToTempAsset") && rawItemTypeFacadeStrategy.canHandle(s);
     }
     
     // Rest of class just delegates to actual typefacade
 }