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"/>

0 ответов

Другие вопросы по тегам