我有一個這樣的對象:與JAXB KieServicesClient創建XML失敗(KIE 6.5.0)
@XmlRootElement(name="com.Operation")
@XmlAccessorType(XmlAccessType.FIELD)
public class Operation implements java.io.Serializable
{
static final long serialVersionUID = 1L;
@org.kie.api.definition.type.Label("systemCode")
@XmlElement
private int systemCode;
[...]
當我馬歇爾這與以下似乎代碼手動它工作得很好:
[...]
JAXBContext jaxbContext =
DroolsJaxbHelperProviderImpl.createDroolsJaxbContext(classNames, null);
Marshaller marshaller = jaxbContext.createMarshaller();
StringWriter xml = new StringWriter();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(object, System.out);
因此,控制檯打印:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<com.Operation>
<systemCode>1</systemCode>
[...]
但是,當我使用鼓勵的KieServerClient代碼,我得到一個錯誤:
org.kie.server.client.KieServicesException: Error while serializing request data!
at org.kie.server.client.impl.AbstractKieServicesClientImpl.serialize(AbstractKieServicesClientImpl.java:514)
at org.kie.server.client.impl.AbstractKieServicesClientImpl.makeHttpPostRequestAndCreateServiceResponse(AbstractKieServicesClientImpl.java:234)
at org.kie.server.client.impl.RuleServicesClientImpl.executeCommandsWithResults(RuleServicesClientImpl.java:72)
[...]
Caused by: javax.xml.bind.MarshalException
- with linked exception:
[com.sun.istack.SAXException2: class com.Operation ni ninguna de sus superclases se conocen en este contexto.
(的是西班牙語,但我猜的錯誤是很容易的翻譯)
我的JAXB使用與KieServerClient的代碼片段:
KieCommands commandsFactory = KieServices.Factory.get().getCommands();
List<Command<?>> cmds = new ArrayList<Command<?>>();
BatchExecutionCommand command = commandsFactory.newBatchExecution(cmds, SESSION_STATEFUL);
Command<?> insertObjectCommand = null;
insertObjectCommand = commandsFactory.newInsert(operation, operation.getClass().getName(), false, null);
cmds.add(insertObjectCommand);
[...]
KieServicesConfiguration config = KieServicesFactory.newRestConfiguration(KieServer.urlKieServer,
KieServer.name,
KieServer.password);
config.setMarshallingFormat(MarshallingFormat.JAXB);
KieServicesClient client = KieServicesFactory.newKieServicesClient(config);
RuleServicesClient rulesClient = client.getServicesClient(RuleServicesClient.class);
ServiceResponse<ExecutionResults> response = rulesClient.executeCommandsWithResults("instances/"+containerName, command);
什麼任何想法我我做錯了,爲什麼一個編組工作,但另一個不工作?
除了POJO之外,我目前還沒有maven下的這個項目,因爲我想知道我實際需要什麼jar來讓這些項目工作,而且maven中有很多依賴關係會自動解決,我基本上不知道什麼是什麼我需要(我的.m2滿了下載的罐子,我不知道)。 解決之後,我會將該項目轉換爲maven。
受累庫是:
- droolsjbpm-integration-distribution-6.5.0.Final
- droolsjbpm-tools-distribution-6.5.0.Final
- HttpClient的-4.5.3
- 的HttpCore-4.4.6
- javax.ws.rs-API-2.0
- JAXB-XJC-2.3.0
- JMS-1。 1
- kie-remote-client-6.5.0.Final
- kie-remote-common-6.5.0.Final
- kie-remote-jaxb-6.5.0.Final
- 紀伊 - 服務器api-6.5.0.Final
- kie-server-client-6.5.0.Final
- optaplanner-core-6.5.0.Final
環境: - 的JBoss Developer Studio中10.4 - Wildfly 10.1PS:我已經能夠通過REST連接到KieServer,但它是與不鼓勵的代碼,可能是因爲(我猜,nobody has ever answered me)我沒有得到我想要的響應。
我在github上有一個示例項目[link](https://github.com/eggsandbutter/kieservices)。 – Ruurd
使用帶配置的KieServicesClient進行連接是最好的選擇。在版本7中都是一樣的,只是遠程庫中的一些代碼被移動到kie-server-client api,因爲Workbench沒有從版本7的內部服務器。 – zhrist
感謝您的評論和確認!我需要儘快切換到版本7.去年Drools發展非常迅速。 – Ruurd