OfBiz не находит Java сервис
Я использую OfBiz 16.11.03 и пытаюсь реализовать некоторые новые сервисы. Каждый сервис, настроенный с engine="entity-auto", работает просто отлично. Однако, когда я пытаюсь создать сервис с engine="java" во время выполнения, он не может найти реализующий класс. Вот что я сделал: в папке hot-deploy у меня есть спецификация ofbiz-component.xml
<service-resource type="model" loader="main" location="servicedef/services.xml"/>
В этом services.xml в папке servicedef я создал новый сервис
<service name="getSomething" engine="java"
location="com.mycompany.myapp.services.SomeServices"
invoke="getSomething">
... attributes and description
</service>
Теперь, чтобы реализовать сервис, я создаю реализующий класс в src/main/java/com/mycompany/myapp/services/SomeServices.java, где я реализую
public static Map<String, Object> getSomething(DispatchContext dctx,
Map<String, ? extends Object> context) {
....
}
Чтобы протестировать сервис, я открываю WebTools -> ServiceEngine -> запускает сервис и вводу "getSomething" в качестве имени сервиса, пул остается пустым. Я дохожу до формы, где я могу ввести свои параметры IN и пытаюсь запустить службу. Исключение выбрасывается как
org.apache.ofbiz.service.GenericServiceException:
Cannot find service [getSomething] location class (com.mycompany.myapp.services.SomeServices)
Конечно, плагин был создан с помощью gradlew createPlugin -PpluginId=myplugin, перемещен в hot-deploy и соответствующая запись была удалена из component-load.xml в specialpurpose, поэтому диспетчер существует.
Чего-то не хватает?
ОБНОВЛЕНИЕ: Оказалось, что библиотека ofbiz не была установлена в classpath моего приложения соответственно. Я исправил это, добавив <classpath type="jar" location="build/libs/*"/>
к нему (полный ofbiz-component.xml см. ниже). Теперь SomeServices.class помещается в корень ofbiz.jar вместо com/mycompany/myapp/services/SomeServices.class. Я могу получить доступ к сервису, найдя его в "SomeServices" в определении сервиса в services.xml, но я думаю, что не хватает какой-то части, которая помещает SomeServices в нужную папку...
Обновление № 2: в среде IDE класс SomeServices.java не помещен в нужный пакет. Добавление package com.mycompany.myapp.services;
чтобы класс исправил проблему.
Вот мой ofbiz-component.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!-- place the config directory on the classpath to access configuration files -->
<classpath type="dir" location="config"/>
<classpath type="dir" location="dtd"/>
<classpath type="jar" location="build/libs/*"/>
<!-- entity resources: model(s), eca(s), group, and data definitions -->
<entity-resource type="model" reader-name="main" loader="main" location="entitydef/entitymodel.xml"/>
<!-- <entity-resource type="eca" reader-name="main" loader="main" location="entitydef/eecas.xml"/> -->
<entity-resource type="data" reader-name="seed" loader="main" location="data/MyappTypeData.xml"/>
<entity-resource type="data" reader-name="seed" loader="main" location="data/MyappSecurityPermissionSeedData.xml"/>
<entity-resource type="data" reader-name="demo" loader="main" location="data/MyappSecurityGroupDemoData.xml"/>
<entity-resource type="data" reader-name="demo" loader="main" location="data/MyappDemoData.xml"/>
<!-- service resources: model(s), eca(s) and group definitions -->
<service-resource type="model" loader="main" location="servicedef/services.xml"/>
<!--
<service-resource type="eca" loader="main" location="servicedef/secas.xml"/>
<service-resource type="group" loader="main" location="servicedef/groups.xml"/>
-->
<test-suite loader="main" location="testdef/MyappTests.xml"/>
<!-- web applications; will be mounted when using the embedded container -->
<webapp name="myapp"
title="Myapp"
server="default-server"
location="webapp/myapp"
base-permission="OFBTOOLS,MYAPP"
mount-point="/myapp"/>