2013-05-22 8 views
1

Использование Drools 5.5.0.Final с Guvnor 5.5.0.Final с образцом пакета ипотечных кредитов.Drools REST CannotResolveClassException

При подаче запроса JSon REST с помощью следующей команды Batch Execution:

{ 
    "batch-execution": { 
    "lookup":"ksession1", 
    "commands":[ 
     { 
      "insert":{ 
      "out-identifier":"outApplicant", 
      "return-object":"true", 
      "object": { 
       "Applicant":{ 
       "age":17 
       } 
      } 
      } 
     }, 
     { 
      "fire-all-rules":"" 
     } 
    ] 
    } 
} 

возвращается: 500 Внутренняя ошибка сервера

com.thoughtworks.xstream.converters.ConversionException: Applicant : Applicant 
---- Debugging information ---- 
message    : Applicant 
cause-exception  : com.thoughtworks.xstream.mapper.CannotResolveClassException 
cause-message  : Applicant 
class    : org.drools.command.runtime.rule.InsertObjectCommand 
required-type  : org.drools.command.runtime.rule.InsertObjectCommand 
converter-type  : org.drools.runtime.help.impl.XStreamJson$JsonInsertConverter 
line number   : -1 
class[1]   : org.drools.command.runtime.BatchExecutionCommandImpl 
converter-type[1] : org.drools.runtime.help..XSt...$JsonBatchExecutionCommandConverter 
version    : null 

Класс Заявителем определяется в пакете ипотеки внутри XSD, как так :

age:Whole number (integer) 
applicationDate:Date 
creditRating:Text 
name:Text 
approved:True or False 

Как я могу сказать, слюни, где найти класс Заявителя? (который определен в ипотечном образце как XSD файл)

знаний services.xml в настоящее время выглядит следующим образом:

<drools:grid-node id="node1"/> 
<drools:kbase id="kbase1" node="node1"> 
    <drools:resources> 
      <drools:resource type="PKG" source="http://localhost:8080/drools-guvnor/org.drools.guvnor.Guvnor/packages/mortgages"/> 
    </drools:resources> 
</drools:kbase> 

Я подозреваю, что изменение запроса REST JSon полностью указать пакет имя класса кандидата может работать.

  ... 
      "object": { 
      "something.somethingelse.Applicant":{ 
      "age":17 
      } 
     } 
     ... 

Но, похоже, не может найти, где объявлено полное имя пакета для Заявителя?

Допустимый ответ должен показывать пример, который работает без необходимости писать код Java, так как вся точка интерфейса REST - доступ к слюни через интерфейс веб-службы.

Есть ли конфигурация пружины или какой-либо другой способ написать запрос json, который будет работать?

ответ

1

Поскольку никто не ответил, я отправляю ответ, который работал на меня вместе с основной причиной и пошаговой процедурой, которую я использовал для отладки проблемы. Пожалуйста, сделайте комментарий, если есть лучший способ.

Во-первых, здесь полный и правильный формат для запроса REST Json для вставки Претендент экземпляра в двигатель правил использования Drools-сервер, когда модель была определена в графическом интерфейсе Drools-дяденька и не закачано как POJO модель.

{ 
    "batch-execution": { 
    "lookup":"ksession1", 
    "commands":[ 
     { 
      "insert":{ 
      "out-identifier":"outApplicant", 
      "return-object":"true", 
      "object": { 
       "mortgages.Applicant":{ 
       "age":17 
       } 
      } 
      } 
     }, 
     { 
      "fire-all-rules":"" 
     } 
    ] 
    } 
} 

первопричины: $ TOMCAT_HOME/WebApps/Drools-сервер/WEB-INF/классы/знаний services.xml был неправильный ресурс.

Соответствующие части моих исправленных знаний services.xml:

<drools:grid-node id="node1"/> 
<drools:kbase id="kbase1" node="node1"> 
    <drools:resources> 
      <drools:resource 
        type="PKG" 
        source="http://localhost:8080/drools-guvnor/rest/packages/mortgages/binary" 
        basic-authentication="enabled" 
        username="admin" 
        password="admin" 

      /> 
    </drools:resources> 
</drools:kbase> 

Вторичный вопрос: Полномочие аутентификации не было указано в знаниях services.xml , что привело к ошибке:

Exception: java.io.IOException: Servier returned HTTP response code: 401 for URL: http://localhost:8080/drools-guvnor/rest/packages/mortgages/binary 

Третий номер: Пример ипотечного пакета не был построен как двоичный пакет в Гувноре.

ERROR: java.io.lang.RunTimeException: jav.io.StreamCorruptionException: Invalid Stream Header 

Чтобы исправить: В дяденька ... Пакеты .. mortgages..Edit..build пакет

Дополнительное примечание: регистрация уровень INFO не включена по умолчанию в Drools-сервере. Чтобы включить дополнительную регистрацию, так что вы можете увидеть подробные отладочные сообщения в $ TOMCAT_HOME/журналы/catalina.log выполните следующие действия:

  1. Перейти к $ TOMCAT_HOME/WebApps/Drools-сервер/WEB_INF/классы
  2. создайте файл logging.properties
  3. добавить эти строки:.

    org.apache.catalina.core.ContainerBase [Catalina] .level = INFO org.apache.catalina.core.ContainerBase [Catalina].. handlers = java.util.logging.ConsoleHandler

НТН

+0

Привет, Я хотел бы интегрировать Drools с моим джерси отдыха веб-служб. В покое все условия будут сгенерированы, а затем добавлены в двигатель спускающихся слюнов, чтобы получить согласованные правила. Как интегрироваться с веб-сервисом на основе трикотажа. Пожалуйста, дайте мне шаг за шагом. Я очень новичок в этом. Пожалуйста помоги. Благодарю. Кумар Шорав – Kumar