【发布时间】:2015-08-24 16:09:51
【问题描述】:
最近,我开始为一个新项目考虑 Fuse Camel、Drools WB 和 Kie Execution Server Integration,但遇到以下问题。
我正在为 WB 和 Kie Server 使用 Fuse 6.2、Drool 6.2.Final。
这就是我所做的:
-
从 Drools-WB 中的 Fuse 示例创建 Person Drink drool 规则,并使用我自己的容器部署在 Kie 执行服务器上:myCheese。
-
在 Fuse Camel 中,我没有调用内部 Kie-Camel 服务器,而是使用一个 bean,在其中设置 Comel-jetty 的标头来触发规则:
public void populateRestHeader(交换交换) {
// hard code the message for time being because BatchExecutionHelperd doesn't work. please see below.String myMessage = "
" + " 约翰 " + "51 " + " ";// setup the login token exchange.getIn().setHeader("Authorization", basicToken); // POST so I can send XML. GET works fine ! exchange.getIn().setHeader(Exchange.HTTP_METHOD, "POST"); // the content exchange.getIn().setHeader(Exchange.ACCEPT_CONTENT_TYPE, "application/xml"); exchange.getIn().setBody(myMessage);}
-
使用 jetty 将命令发布到远程 Kie-Server :
码头:http://my-server/services/rest/server/containers/myCheese
-
在 Kie-Server 日志中,我得到:
15:19:33,140 WARN [org.jboss.resteasy.core.ExceptionHandler](默认任务 114)未能执行:javax.ws.rs.NotSupportedException:无法使用内容类型 在 org.jboss.resteasy.core.registry.SegmentNode.match(SegmentNode.java:380) [resteasy-jaxrs-3.0.10.Final.jar:] 在 org.jboss.resteasy.core.registry.SegmentNode.match(SegmentNode.java:114) [resteasy-jaxrs-3.0.10.Final.jar:]
“Content-Type”设置不正确或正文未发送?
- 我尝试使用相同的方法执行 GET,效果很好!
收到:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><response type="SUCCESS" msg="Info for container myCheese"><kie-container container-id="myCheese" status="STARTED"><release-id><artifact-id>mycheese</artifact-id><group-id>com.markit</group-id><version>1.0</version></release-id><resolved-release-id><artifact-id>mycheese</artifact-id><group-id>com.markit</group-id><version>1.0</version></resolved-release-id><scanner status="DISPOSED"/></kie-container></response>
- 使用 SoapUI 执行命令没有任何问题。
<response type="SUCCESS" msg="Container myCheese successfully called.">
<results><![CDATA[<execution-results>
<result identifier="person">
<org.drools.camel.example.Person>
<name>john</name>
<age>51</age>
<canDrink>true</canDrink>
<alive>false</alive>
<sex></sex>
<happy>false</happy>
</org.drools.camel.example.Person>
</result>
<fact-handle identifier="person" external-form="0:1:866416565:866416565:1:DEFAULT:NON_TRAIT"/>
</execution-results>]]></results>
</response>
问题:
a) 任何想法为什么会出错?将 Exchange.Body 设置为 POST 的 DATA 是否正确? b)不是使用 Came-Jetty 将命令发布到 Kie-Server,因为 Kie-Server 将其声明为 REST,我可以使用 CXFRS 来执行此操作吗?另外,我相信 Kie-Server 也支持 SOAP,但它的 WSDL 是什么?还有其他选择吗?
c) 对于 BatchExecutionCommands,我打算使用以下内容:
public String createCommand() {
BatchExecutionCommandImpl command = new BatchExecutionCommandImpl();
final List<GenericCommand<?>> commands = command.getCommands();
Person person = createTestPerson();
commands.add(new InsertObjectCommand(person, "myPerson"));
commands.add(new FireAllRulesCommand());
command.setLookup("ksession1");
String myXMLMessage = BatchExecutionHelper.newXStreamMarshaller().toXML(command);
return myXMLMessage;
}
但我在 Fuse 日志中收到异常:
Caused by: java.lang.ClassNotFoundException: org.drools.core.runtime.help.impl.BatchExecutionHelperProviderImpl not found by org.kie.internalapi [281]
at org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1556)
at org.apache.felix.framework.BundleWiringImpl.access$400(BundleWiringImpl.java:77)
at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:1993)
似乎 Kie-Internal Package 无法访问 Drools-Core 捆绑包?
【问题讨论】:
标签: jboss apache-camel jbossfuse kie