如何自定义 platformwebservices 资源?
How to customize a platformwebservices resource?
我正在使用 Hybris 6.2,我需要自定义一些从我的项目中生成的资源。
我已阅读 this link, and this link,但我无法使用我的自定义资源。
我的资源位于 myextension\custom\src\de\hybris\platform\yacceleratorcore\customresource 中,如上述 wiki 指南中所示,目前看起来是这样的:
package de.hybris.platform.yacceleratorcore.customresource;
import de.hybris.platform.webservices.AbstractYResource;
import de.hybris.platform.yacceleratorcore.model.SparepartsModel;
import org.apache.log4j.Logger;
@SuppressWarnings("PMD")
public class CustomSparepartsResource extends AbstractYResource<SparepartsModel>
{
private static final Logger LOG = Logger.getLogger(CustomSparepartsResource.class);
public CustomSparepartsResource()
{
super("CustomSpareparts");
}
@Override
protected SparepartsModel readResource(final String resourceId) throws Exception
{
final SparepartsModel model = new SparepartsModel();
model.setCode(resourceId);
LOG.debug("Custom resource");
return (SparepartsModel) readResourceInternal(model);
}
}
我只是尝试打印该日志消息作为开始,但未使用此资源而不是在每个 ant clean all 上生成的默认资源。
我在我的 web-spring.xml 中定义了这个资源 bean,如下所示:
<bean id="customSparepartsResource" class="de.hybris.platform.yacceleratorcore.customresource.CustomSparepartsResource" scope="prototype" parent="abstractResource"/>
但是当我启动服务器时,我收到以下错误消息:
[1;31mERROR [localhost-startStop-1] [ContextLoader] Context
initialization failed [m
org.springframework.beans.factory.CannotLoadBeanClassException: Cannot
find class
[de.hybris.platform.yacceleratorcore.customresource.CustomSparepartsResource]
for bean with name 'customSparepartsResource' defined in class path
resource [customplatformwebservices-web-spring.xml]; nested exception
is java.lang.ClassNotFoundException:
de.hybris.platform.yacceleratorcore.customresource.CustomSparepartsResource
我在实施过程中遗漏了什么?如何成功将生成的资源替换为自己自定义的资源?
使用 de.hybris.platform
作为自定义扩展的命名空间不是一个好主意。这在 wiki 中只是一个例子。使用您自己的名称空间,因为这样您可能会遇到很多其他 spring 错误。
此外,您在 /platform 文件夹、扩展名中更改的所有内容都会在 build/update/ 后重新生成。每次都要确保使用自己的命名空间创建自己的扩展,而不是使用默认的 hybris 扩展。
我终于找到了适用于我的 Hybris 6.2 版的方法,首先我需要将我的资源命名为与我要替换的资源相同的名称,这样就不会生成默认资源,而是生成我的资源自定义资源将放置在 web/gensrc.
下
对于我的版本,不需要将 bean 定义添加到 myextension-web-spring.xml.
有了这个,使用您自己的自定义资源应该没有任何问题。
附带说明一下,如果您需要在您的资源中使用服务和 dao 类,请不要将它们放在您的自定义扩展中,因为一旦您的自定义资源被复制到 platformwebservices,那么它们将无法看到这些 类 除非您在已经不需要 platformwebservices 的不同扩展中定义它们。
我正在使用 Hybris 6.2,我需要自定义一些从我的项目中生成的资源。
我已阅读 this link, and this link,但我无法使用我的自定义资源。
我的资源位于 myextension\custom\src\de\hybris\platform\yacceleratorcore\customresource 中,如上述 wiki 指南中所示,目前看起来是这样的:
package de.hybris.platform.yacceleratorcore.customresource;
import de.hybris.platform.webservices.AbstractYResource;
import de.hybris.platform.yacceleratorcore.model.SparepartsModel;
import org.apache.log4j.Logger;
@SuppressWarnings("PMD")
public class CustomSparepartsResource extends AbstractYResource<SparepartsModel>
{
private static final Logger LOG = Logger.getLogger(CustomSparepartsResource.class);
public CustomSparepartsResource()
{
super("CustomSpareparts");
}
@Override
protected SparepartsModel readResource(final String resourceId) throws Exception
{
final SparepartsModel model = new SparepartsModel();
model.setCode(resourceId);
LOG.debug("Custom resource");
return (SparepartsModel) readResourceInternal(model);
}
}
我只是尝试打印该日志消息作为开始,但未使用此资源而不是在每个 ant clean all 上生成的默认资源。
我在我的 web-spring.xml 中定义了这个资源 bean,如下所示:
<bean id="customSparepartsResource" class="de.hybris.platform.yacceleratorcore.customresource.CustomSparepartsResource" scope="prototype" parent="abstractResource"/>
但是当我启动服务器时,我收到以下错误消息:
[1;31mERROR [localhost-startStop-1] [ContextLoader] Context initialization failed [m org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [de.hybris.platform.yacceleratorcore.customresource.CustomSparepartsResource] for bean with name 'customSparepartsResource' defined in class path resource [customplatformwebservices-web-spring.xml]; nested exception is java.lang.ClassNotFoundException: de.hybris.platform.yacceleratorcore.customresource.CustomSparepartsResource
我在实施过程中遗漏了什么?如何成功将生成的资源替换为自己自定义的资源?
使用 de.hybris.platform
作为自定义扩展的命名空间不是一个好主意。这在 wiki 中只是一个例子。使用您自己的名称空间,因为这样您可能会遇到很多其他 spring 错误。
此外,您在 /platform 文件夹、扩展名中更改的所有内容都会在 build/update/ 后重新生成。每次都要确保使用自己的命名空间创建自己的扩展,而不是使用默认的 hybris 扩展。
我终于找到了适用于我的 Hybris 6.2 版的方法,首先我需要将我的资源命名为与我要替换的资源相同的名称,这样就不会生成默认资源,而是生成我的资源自定义资源将放置在 web/gensrc.
下对于我的版本,不需要将 bean 定义添加到 myextension-web-spring.xml.
有了这个,使用您自己的自定义资源应该没有任何问题。
附带说明一下,如果您需要在您的资源中使用服务和 dao 类,请不要将它们放在您的自定义扩展中,因为一旦您的自定义资源被复制到 platformwebservices,那么它们将无法看到这些 类 除非您在已经不需要 platformwebservices 的不同扩展中定义它们。