[jboss-svn-commits] JBL Code SVN: r31832 - in labs/jbossrules/branches/drools_server_camel_lucaz_baunax: drools-server and 10 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Wed Feb 24 11:32:51 EST 2010
Author: lucazamador
Date: 2010-02-24 11:32:49 -0500 (Wed, 24 Feb 2010)
New Revision: 31832
Added:
labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/main/java/org/drools/server/rest/
labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/main/java/org/drools/server/rest/KnowledgeServerApplication.java
labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/main/java/org/drools/server/rest/KnowledgeServiceRest.java
labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/test/java/org/drools/server/KnowledgeServiceBaseTest.java
labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/test/java/org/drools/server/rest/
labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/test/java/org/drools/server/rest/KnowledgeServiceRestTest.java
labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/test/resources/model/
labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/test/resources/model/person.xsd
labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/test/resources/rules/person2.drl
Modified:
labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-pipeline/drools-camel/src/test/java/org/drools/camel/component/CamelEndpointWithJaxbTest.java
labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/pom.xml
labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/main/java/org/drools/server/KnowledgeService.java
labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/main/java/org/drools/server/KnowledgeServiceServlet.java
labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/main/java/org/drools/server/profile/KnowledgeContextProfile.java
labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/main/java/org/drools/server/profile/StartupCommand.java
labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/main/webapp/WEB-INF/web.xml
labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/test/java/org/drools/server/KnowledgeServiceServletTest.java
labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/test/java/org/drools/server/MockHTTPResponse.java
labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/test/java/org/drools/server/MockHttpRequest.java
labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/test/resources/changesets/change-set-2.xml
labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/test/resources/profiles.xml
labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/test/resources/rules/person.drl
Log:
RestWS integration
Modified: labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-pipeline/drools-camel/src/test/java/org/drools/camel/component/CamelEndpointWithJaxbTest.java
===================================================================
--- labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-pipeline/drools-camel/src/test/java/org/drools/camel/component/CamelEndpointWithJaxbTest.java 2010-02-24 15:18:32 UTC (rev 31831)
+++ labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-pipeline/drools-camel/src/test/java/org/drools/camel/component/CamelEndpointWithJaxbTest.java 2010-02-24 16:32:49 UTC (rev 31832)
@@ -89,6 +89,8 @@
marshaller.setProperty("jaxb.formatted.output", true);
marshaller.marshal(cmd, xmlReq);
+ System.out.println(xmlReq.toString());
+
byte[] xmlResp = (byte[]) template.requestBodyAndHeader("direct:test-with-session", xmlReq.toString(), "jaxb-context", jaxbContext);
ExecutionResults resp = (ExecutionResults) jaxbContext.createUnmarshaller().unmarshal(new ByteArrayInputStream(xmlResp));
Modified: labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/pom.xml
===================================================================
--- labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/pom.xml 2010-02-24 15:18:32 UTC (rev 31831)
+++ labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/pom.xml 2010-02-24 16:32:49 UTC (rev 31832)
@@ -23,6 +23,8 @@
<build>
<finalName>drools-server</finalName>
</build>
+ <repositories>
+ </repositories>
<dependencies>
<dependency>
<groupId>org.drools</groupId>
@@ -59,5 +61,30 @@
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
</dependency>
+ <!-- Resteasy deps -->
+ <dependency>
+ <groupId>org.jboss.resteasy</groupId>
+ <artifactId>resteasy-jaxrs</artifactId>
+ <version>1.2.1.GA</version>
+ </dependency>
+ <dependency>
+ <groupId>tjws</groupId>
+ <artifactId>webserver</artifactId>
+ <version>1.3.3</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>javax.servlet</groupId>
+ <artifactId>servlet-api</artifactId>
+ <version>2.5</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>commons-httpclient</groupId>
+ <artifactId>commons-httpclient</artifactId>
+ <version>3.1</version>
+ <scope>test</scope>
+ </dependency>
</dependencies>
+
</project>
Modified: labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/main/java/org/drools/server/KnowledgeService.java
===================================================================
--- labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/main/java/org/drools/server/KnowledgeService.java 2010-02-24 15:18:32 UTC (rev 31831)
+++ labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/main/java/org/drools/server/KnowledgeService.java 2010-02-24 16:32:49 UTC (rev 31832)
@@ -1,28 +1,30 @@
package org.drools.server;
-import java.io.BufferedInputStream;
-import java.io.ByteArrayOutputStream;
+import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
+import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
+import javax.naming.Context;
import javax.xml.bind.JAXBContext;
import org.apache.camel.CamelContext;
import org.apache.camel.ProducerTemplate;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.impl.DefaultCamelContext;
+import org.apache.camel.util.jndi.JndiContext;
import org.drools.KnowledgeBase;
-import org.drools.agent.KnowledgeAgent;
-import org.drools.agent.KnowledgeAgentProvider;
import org.drools.builder.KnowledgeBuilder;
+import org.drools.builder.ResourceType;
import org.drools.builder.help.KnowledgeBuilderHelper;
import org.drools.camel.component.DroolsComponent;
import org.drools.io.ResourceFactory;
import org.drools.runtime.StatefulKnowledgeSession;
+import org.drools.runtime.StatelessKnowledgeSession;
import org.drools.server.profile.KnowledgeContextProfile;
import org.drools.server.profile.KnowledgeServerProfile;
import org.drools.server.profile.ProfileFile;
@@ -43,50 +45,54 @@
*
*/
public class KnowledgeService {
-
+
private static final String PROFILE_FILENAME = "/profiles.xml";
private static KnowledgeService instance;
-
- private Map<String, KnowledgeAgent> cachedAgents = new ConcurrentHashMap<String, KnowledgeAgent>();
+
+ private Map<String, KnowledgeBase> kbases = new ConcurrentHashMap<String, KnowledgeBase>();
private Map<String, JAXBContext> cachedJaxbContexts = new ConcurrentHashMap<String, JAXBContext>();
private CamelContext camelContext;
private KnowledgeServerProfile profiles;
private ServiceManager serviceManager;
private ProducerTemplate template;
-
+
public KnowledgeService() throws Exception {
serviceManager = new ServiceManagerLocalClient();
- camelContext = new DefaultCamelContext();
- camelContext.addComponent("drools", new DroolsComponent(camelContext));
+ Context context = new JndiContext();
+ context.bind("sm", serviceManager);
+ camelContext = new DefaultCamelContext(context);
camelContext.addRoutes(createRouteBuilder());
+ camelContext.start();
template = camelContext.createProducerTemplate();
readKnowledgeContextProfiles();
}
-
+
public static KnowledgeService getInstance() throws Exception {
if (instance==null) {
- instance = new KnowledgeService();
+ synchronized(KnowledgeService.class) {
+ if (instance==null) {
+ instance = new KnowledgeService();
+ }
+ }
}
return instance;
}
-
+
public KnowledgeContextProfile getContextProfile(String profileName) {
return profiles.getProfile(profileName);
}
-
+
public void checkContextStatus(KnowledgeContextProfile contextProfile) throws Exception {
- if (!cachedAgents.containsKey(contextProfile.getId())) {
- KnowledgeAgentProvider knowledgeAgentFactory = serviceManager.getKnowledgeAgentFactory();
+ if (!kbases.containsKey(contextProfile.getId())) {
KnowledgeBase kbase = serviceManager.getKnowledgeBaseFactoryService().newKnowledgeBase();
+ KnowledgeBuilder kbuilder = serviceManager.getKnowledgeBuilderFactoryService().newKnowledgeBuilder();
List<String> allClassNames = new ArrayList<String>();
-
if (contextProfile.hasJaxbModels()) {
for (ProfileFile modelFile : contextProfile.getJaxbModels()) {
// Create model from xsd definition and add to kbase classloader
- KnowledgeBuilder kbuilder = serviceManager.getKnowledgeBuilderFactoryService().newKnowledgeBuilder();
Options xjcOpts = new Options();
xjcOpts.setSchemaLanguage( Language.XMLSCHEMA );
@@ -99,48 +105,64 @@
for (int i = 0; i < classNames.length; i++) {
allClassNames.add(classNames[i]);
}
+ kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());
} catch (IOException e) {
throw new Exception("Error creating XSD model", e);
}
}
-
- if (allClassNames.size() > 0) {
- JAXBContext jaxbContext = KnowledgeBuilderHelper.newJAXBContext( allClassNames.toArray(new String[allClassNames.size()]), kbase );
- cachedJaxbContexts.put(contextProfile.getId(), jaxbContext);
- }
}
- KnowledgeAgent kagent = knowledgeAgentFactory.newKnowledgeAgent(contextProfile.getId(), kbase);
for (ProfileFile changeSet : contextProfile.getChangeSetFiles()) {
- kagent.applyChangeSet(ResourceFactory.newClassPathResource(changeSet.getFileName()));
+ kbuilder.add(ResourceFactory.newClassPathResource(changeSet.getFileName()), ResourceType.CHANGE_SET);
}
- StatefulKnowledgeSession session = kbase.newStatefulKnowledgeSession();
- serviceManager.register(contextProfile.getId(), session);
- cachedAgents.put(contextProfile.getId(), kagent);
+ kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());
+ if (allClassNames.size() > 0) {
+ JAXBContext jaxbContext = KnowledgeBuilderHelper.newJAXBContext( allClassNames.toArray(new String[allClassNames.size()]), kbase );
+ cachedJaxbContexts.put(contextProfile.getId(), jaxbContext);
+ }
+
+ if ("stateful".equalsIgnoreCase(contextProfile.getSessionType())) {
+ StatefulKnowledgeSession session = kbase.newStatefulKnowledgeSession();
+ serviceManager.register(contextProfile.getId(), session);
+ }
+ else if ("stateless".equalsIgnoreCase(contextProfile.getSessionType())) {
+ StatelessKnowledgeSession session = kbase.newStatelessKnowledgeSession();
+ serviceManager.register(contextProfile.getId(), session);
+ }
+ else
+ throw new Exception("Bad session type. Expected stateless or stateful");
+
+ kbases.put(contextProfile.getId(), kbase);
+
// Execute the startups commands
- for (StartupCommand command : contextProfile.getStartupCommands()) {
- executeCommand(contextProfile, command.getContent());
+ if (contextProfile.hasStartupCommands()) {
+ for (StartupCommand command : contextProfile.getStartupCommands()) {
+ executeCommand(contextProfile, command.getContent());
+ }
}
}
}
-
+
public String executeService(InputStream inputStream, KnowledgeContextProfile contextProfile) throws Exception {
- BufferedInputStream bis = new BufferedInputStream(inputStream);
- ByteArrayOutputStream cmd = new ByteArrayOutputStream();
- byte[] buffer = new byte[2048];
- int count;
+ StringBuilder sb = new StringBuilder();
+ String line;
try {
- while ((count = bis.read()) != -1) {
- cmd.write(buffer, 0, count);
- }
- return executeCommand(contextProfile, cmd.toString());
+ BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));
+ while ((line = reader.readLine()) != null) {
+ sb.append(line).append("\n");
+ }
+ return executeCommand(contextProfile, sb.toString());
} catch (IOException e) {
throw new Exception("Unable to read the xml command", e);
}
+ finally {
+ inputStream.close();
+ }
+
}
-
+
private String executeCommand(KnowledgeContextProfile contextProfile, String cmd) throws Exception {
if (contextProfile.hasJaxbModels()) {
JAXBContext jaxbContext = getJaxbContext(contextProfile.getId());
@@ -155,7 +177,7 @@
}
else {
if ("stateless".equalsIgnoreCase(contextProfile.getSessionType())) {
- return new String((byte[])template.requestBody("direct:no-session-xstream", cmd));
+ return new String((byte[])template.requestBodyAndHeader("direct:no-session-xstream", cmd, DroolsComponent.DROOLS_LOOKUP, contextProfile.getId()));
}
else if ("stateful".equalsIgnoreCase(contextProfile.getSessionType())) {
return new String((byte[])template.requestBody("direct:with-session-xstream", cmd));
@@ -163,8 +185,15 @@
else
throw new Exception("Bad session type. Expected stateless or stateful");
}
+// if (contextProfile.hasJaxbModels()) {
+// JAXBContext jaxbContext = getJaxbContext(contextProfile.getId());
+// return new String((byte[])template.requestBodyAndHeader("direct:with-session-jaxb", cmd, "jaxb-context", jaxbContext));
+// }
+// else {
+// return new String((byte[])template.requestBody("direct:with-session-xstream", cmd));
+// }
}
-
+
private static RouteBuilder createRouteBuilder() throws Exception {
return new RouteBuilder() {
public void configure() throws Exception {
@@ -196,7 +225,7 @@
throw new Exception("Error reading profiles configurations", e);
}
}
-
+
private JAXBContext getJaxbContext(String profileId) {
if (cachedJaxbContexts.containsKey(profileId)) {
return cachedJaxbContexts.get(profileId);
@@ -204,6 +233,6 @@
// TODO: work on this possible error. Trying to execute jaxb command on xstream session?
return null;
}
-
+
}
Modified: labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/main/java/org/drools/server/KnowledgeServiceServlet.java
===================================================================
--- labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/main/java/org/drools/server/KnowledgeServiceServlet.java 2010-02-24 15:18:32 UTC (rev 31831)
+++ labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/main/java/org/drools/server/KnowledgeServiceServlet.java 2010-02-24 16:32:49 UTC (rev 31832)
@@ -25,7 +25,7 @@
private static final long serialVersionUID = 1L;
- public static Pattern urlPattern = Pattern.compile(".*/(.*)/");
+ public static Pattern urlPattern = Pattern.compile(".*/servlet/(.*)");
private static KnowledgeService service;
Modified: labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/main/java/org/drools/server/profile/KnowledgeContextProfile.java
===================================================================
--- labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/main/java/org/drools/server/profile/KnowledgeContextProfile.java 2010-02-24 15:18:32 UTC (rev 31831)
+++ labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/main/java/org/drools/server/profile/KnowledgeContextProfile.java 2010-02-24 16:32:49 UTC (rev 31832)
@@ -88,6 +88,10 @@
}
this.startupCommands.add(new StartupCommand(content));
}
+
+ public boolean hasStartupCommands() {
+ return this.startupCommands!=null && this.startupCommands.size() > 0;
+ }
public boolean isValid() {
return id!=null && sessionType!=null && changeSetFiles.size()>0 && sessionType!=null &&
Modified: labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/main/java/org/drools/server/profile/StartupCommand.java
===================================================================
--- labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/main/java/org/drools/server/profile/StartupCommand.java 2010-02-24 15:18:32 UTC (rev 31831)
+++ labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/main/java/org/drools/server/profile/StartupCommand.java 2010-02-24 16:32:49 UTC (rev 31832)
@@ -16,7 +16,7 @@
}
public String getContent() {
- return content;
+ return content.trim();
}
}
\ No newline at end of file
Added: labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/main/java/org/drools/server/rest/KnowledgeServerApplication.java
===================================================================
--- labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/main/java/org/drools/server/rest/KnowledgeServerApplication.java (rev 0)
+++ labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/main/java/org/drools/server/rest/KnowledgeServerApplication.java 2010-02-24 16:32:49 UTC (rev 31832)
@@ -0,0 +1,27 @@
+package org.drools.server.rest;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import javax.ws.rs.core.Application;
+
+public class KnowledgeServerApplication extends Application {
+
+ private Set<Object> singletons = new HashSet<Object>();
+ private Set<Class<?>> classes = new HashSet<Class<?>>();
+
+ public KnowledgeServerApplication() {
+ singletons.add(new KnowledgeServiceRest());
+ }
+
+ @Override
+ public Set<Class<?>> getClasses() {
+ return classes;
+ }
+
+ @Override
+ public Set<Object> getSingletons() {
+ return singletons;
+ }
+
+}
Property changes on: labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/main/java/org/drools/server/rest/KnowledgeServerApplication.java
___________________________________________________________________
Name: svn:eol-style
+ native
Added: labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/main/java/org/drools/server/rest/KnowledgeServiceRest.java
===================================================================
--- labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/main/java/org/drools/server/rest/KnowledgeServiceRest.java (rev 0)
+++ labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/main/java/org/drools/server/rest/KnowledgeServiceRest.java 2010-02-24 16:32:49 UTC (rev 31832)
@@ -0,0 +1,68 @@
+package org.drools.server.rest;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+
+import javax.ws.rs.FormParam;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.Response.ResponseBuilder;
+import javax.ws.rs.core.Response.Status;
+
+import org.drools.RuntimeDroolsException;
+import org.drools.server.KnowledgeService;
+import org.drools.server.profile.KnowledgeContextProfile;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * RestWS interface to execute commands
+ * @author lucas
+ *
+ */
+ at Path("/commands")
+public class KnowledgeServiceRest {
+
+ private static Logger logger = LoggerFactory.getLogger(KnowledgeServiceRest.class);
+ private static KnowledgeService service;
+
+ static {
+ try {
+ service = KnowledgeService.getInstance();
+ } catch (Exception e) {
+ throw new RuntimeDroolsException(e);
+ }
+ }
+
+ @POST()
+ @Path("/execute")
+ public Response execute(@FormParam("profile") String profile, @FormParam("command") String command) {
+ if (profile==null || profile.length()==0 || command==null || command.length()==0) {
+ logger.error("Bad parameters:\nprofile: " + profile + "\ncommand: " + command + "\n");
+ return Response.status(Status.BAD_REQUEST).build();
+ }
+ String response;
+ logger.info("profile: " + profile);
+ try {
+ KnowledgeContextProfile contextProfile = service.getContextProfile(profile);
+ if (contextProfile==null) {
+ logger.error("Context profile don't exists");
+ return Response.status(Status.FORBIDDEN).build();
+ }
+ service.checkContextStatus(contextProfile);
+ InputStream input = new ByteArrayInputStream(command.getBytes());
+ response = service.executeService(input, contextProfile);
+ } catch (IOException e) {
+ logger.error(e.getMessage());
+ return Response.status(Status.BAD_REQUEST).build();
+ } catch (Exception e) {
+ logger.error(e.getMessage());
+ return Response.status(Status.CONFLICT).build();
+ }
+ ResponseBuilder builder = Response.ok(response, "application/xml");
+ return builder.build();
+ }
+
+}
Property changes on: labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/main/java/org/drools/server/rest/KnowledgeServiceRest.java
___________________________________________________________________
Name: svn:eol-style
+ native
Modified: labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/main/webapp/WEB-INF/web.xml
===================================================================
--- labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/main/webapp/WEB-INF/web.xml 2010-02-24 15:18:32 UTC (rev 31831)
+++ labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/main/webapp/WEB-INF/web.xml 2010-02-24 16:32:49 UTC (rev 31832)
@@ -4,20 +4,42 @@
<display-name>JBoss Drools Execution Server</display-name>
+ <context-param>
+ <param-name>javax.ws.rs.Application</param-name>
+ <param-value>org.drools.server.rest.KnowledgeServerApplication</param-value>
+ </context-param>
+
+ <context-param>
+ <param-name>resteasy.servlet.mapping.prefix</param-name>
+ <param-value>/rest</param-value>
+ </context-param>
+
+ <listener>
+ <listener-class>org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap</listener-class>
+ </listener>
+
<servlet>
- <servlet-name>statelessService</servlet-name>
- <servlet-class>org.drools.server.KnowledgeStatelessServlet</servlet-class>
+ <servlet-name>knowledgeService</servlet-name>
+ <servlet-class>org.drools.server.KnowledgeServiceServlet</servlet-class>
</servlet>
+
+ <servlet>
+ <servlet-name>Resteasy</servlet-name>
+ <servlet-class>org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher</servlet-class>
+ </servlet>
-
<servlet-mapping>
- <servlet-name>statelessService</servlet-name>
- <url-pattern>/knowledgebase/*</url-pattern>
+ <servlet-name>knowledgeService</servlet-name>
+ <url-pattern>/servlet/*</url-pattern>
</servlet-mapping>
+
+ <servlet-mapping>
+ <servlet-name>Resteasy</servlet-name>
+ <url-pattern>/rest/*</url-pattern>
+ </servlet-mapping>
<session-config>
<session-timeout>10</session-timeout>
</session-config>
-
</web-app>
Added: labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/test/java/org/drools/server/KnowledgeServiceBaseTest.java
===================================================================
--- labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/test/java/org/drools/server/KnowledgeServiceBaseTest.java (rev 0)
+++ labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/test/java/org/drools/server/KnowledgeServiceBaseTest.java 2010-02-24 16:32:49 UTC (rev 31832)
@@ -0,0 +1,48 @@
+package org.drools.server;
+
+import junit.framework.TestCase;
+
+public abstract class KnowledgeServiceBaseTest extends TestCase {
+
+ public String getJaxbCommand() throws Exception {
+ String cmd = "";
+ cmd += "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n";
+ cmd += "<batch-execution lookup='ksession1' xmlns:ns2='http://drools.org/model'>\n";
+ cmd += " <insert out-identifier='lucaz'>\n";
+ cmd += " <object xsi:type='ns2:person' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>\n";
+ cmd += " <ns2:name>lucaz</ns2:name>\n";
+ cmd += " <ns2:age>25</ns2:age>\n";
+ cmd += " </object>\n";
+ cmd += " </insert>\n";
+ cmd += " <insert out-identifier='baunax'>\n";
+ cmd += " <object xsi:type='ns2:person' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>\n";
+ cmd += " <ns2:name>baunax</ns2:name>\n";
+ cmd += " <ns2:age>21</ns2:age>\n";
+ cmd += " </object>\n";
+ cmd += " </insert>\n";
+ cmd += " <query name='persons' out-identifier='persons'/>\n";
+ cmd += " <fire-all-rules max='-1'/>\n";
+ cmd += "</batch-execution>\n";
+ return cmd;
+ }
+
+ public String getXStreamCommand() {
+ String cmd = "";
+ cmd += "<batch-execution lookup='ksession2'>\n";
+ cmd += " <insert out-identifier='baunax'>\n";
+ cmd += " <org.drools.pipeline.camel.Person>\n";
+ cmd += " <name>baunax</name>\n";
+ cmd += " </org.drools.pipeline.camel.Person>\n";
+ cmd += " </insert>\n";
+ cmd += " <insert out-identifier='lucaz'>\n";
+ cmd += " <org.drools.pipeline.camel.Person>\n";
+ cmd += " <name>lucaz</name>\n";
+ cmd += " </org.drools.pipeline.camel.Person>\n";
+ cmd += " </insert>\n";
+ cmd += " <query name='persons' out-identifier='persons'/>\n";
+ cmd += " <fire-all-rules/>\n";
+ cmd += "</batch-execution>\n";
+ return cmd;
+ }
+
+}
Property changes on: labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/test/java/org/drools/server/KnowledgeServiceBaseTest.java
___________________________________________________________________
Name: svn:eol-style
+ native
Modified: labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/test/java/org/drools/server/KnowledgeServiceServletTest.java
===================================================================
--- labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/test/java/org/drools/server/KnowledgeServiceServletTest.java 2010-02-24 15:18:32 UTC (rev 31831)
+++ labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/test/java/org/drools/server/KnowledgeServiceServletTest.java 2010-02-24 16:32:49 UTC (rev 31832)
@@ -1,139 +1,90 @@
package org.drools.server;
+import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.util.regex.Matcher;
import javax.servlet.http.HttpServletResponse;
-import junit.framework.TestCase;
+import org.drools.runtime.ExecutionResults;
+import org.drools.runtime.help.BatchExecutionHelper;
+import org.drools.runtime.rule.impl.FlatQueryResults;
-import org.apache.camel.CamelContext;
-import org.apache.camel.ProducerTemplate;
-import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.impl.DefaultCamelContext;
-import org.drools.camel.component.DroolsComponent;
+public class KnowledgeServiceServletTest extends KnowledgeServiceBaseTest {
-public class KnowledgeServiceServletTest extends TestCase {
-
public void testURLPattern() {
- Matcher matcher = KnowledgeServiceServlet.urlPattern.matcher("hostname/xstreamSession/");
+ Matcher matcher = KnowledgeServiceServlet.urlPattern.matcher("hostname/servlet/xstreamProfile");
assertTrue(matcher.matches());
- assertEquals("xstreamSession", matcher.group(1));
- matcher = KnowledgeServiceServlet.urlPattern.matcher("hostname/xstreamSession");
+ assertEquals("xstreamProfile", matcher.group(1));
+ matcher = KnowledgeServiceServlet.urlPattern.matcher("hostname/unknow/xstreamProfile");
assertFalse(matcher.matches());
}
-
- public void testCreateCamelContext() throws Exception {
- CamelContext camelContext = new DefaultCamelContext();
- camelContext.addComponent("drools", new DroolsComponent(camelContext));
- camelContext.addRoutes(new RouteBuilder() {
- public void configure() throws Exception {
- from("direct:no-session-jaxb").to("drools:sm?dataFormat=drools-jaxb");
- from("direct:no-session-xstream").to("drools:sm?dataFormat=drools-xstream");
- from("direct:with-session-jaxb").to("drools:sm/ksession1?dataFormat=drools-jaxb");
- from("direct:with-session-xstream").to("drools:sm/ksession1?dataFormat=drools-xstream");
- }
- });
- ProducerTemplate template = camelContext.createProducerTemplate();
- System.out.println(template);
+
+ public void testUnknowProfile() throws Exception {
+ StubbedServlet stubbedServlet = new StubbedServlet();
+ MockHTTPResponse resp = new MockHTTPResponse();
+ stubbedServlet.doPost(new MockHttpRequest("hostname/servlet/ksession3", "application/xml"), resp);
+ assertEquals(HttpServletResponse.SC_BAD_REQUEST, resp.errorCode);
}
- public void testEndToEndIntegration() throws Exception {
+ public void testBadCommand() throws Exception {
+ String cmd = "bad command";
+
StubbedServlet stubbedServlet = new StubbedServlet();
- InputStream inXML = getClass().getResourceAsStream("samples/command1.xml");
+ InputStream inXML = new ByteArrayInputStream(cmd.getBytes());
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
stubbedServlet.setInputStream(inXML);
stubbedServlet.setOutputStream(outStream);
- // Execution
MockHTTPResponse resp = new MockHTTPResponse();
- stubbedServlet.doPost(new MockHttpRequest("something/xstreamProfile/", "application/xml"), resp);
+ stubbedServlet.doPost(new MockHttpRequest("hostname/servlet/ksession1", "application/xml"), resp);
- String resultXML = new String(outStream.toByteArray());
- assertTrue(resultXML.indexOf("<value>42</value>") > -1);
- assertEquals("application/xml", resp.contentType);
+ assertEquals(HttpServletResponse.SC_NOT_ACCEPTABLE, resp.errorCode);
+ }
- // Bad URL Request
- resp = new MockHTTPResponse();
- stubbedServlet.setInputStream(getClass().getResourceAsStream("samples/command1.xml"));
- outStream = new ByteArrayOutputStream();
+ public void testJaxbInsertCommand() throws Exception {
+ String cmd = getJaxbCommand();
+
+ StubbedServlet stubbedServlet = new StubbedServlet();
+ InputStream inXML = new ByteArrayInputStream(cmd.getBytes());
+ ByteArrayOutputStream outStream = new ByteArrayOutputStream();
+ stubbedServlet.setInputStream(inXML);
stubbedServlet.setOutputStream(outStream);
- stubbedServlet.doPost(new MockHttpRequest("something/foox", "application/xml"), resp);
- assertEquals(HttpServletResponse.SC_BAD_REQUEST, resp.errorCode);
- //check bad
- stubbedServlet.doPost(new MockHttpRequest("something/knowledgebase/XXX", "application/json"), resp);
- assertEquals(HttpServletResponse.SC_NOT_FOUND, resp.errorCode);
+ // Execution
+ MockHTTPResponse resp = new MockHTTPResponse();
+ stubbedServlet.doPost(new MockHttpRequest("hostname/servlet/ksession1", "application/xml"), resp);
- // Check inexistent knowledge context request
- resp = new MockHTTPResponse();
- stubbedServlet.setInputStream(getClass().getResourceAsStream("samples/command1.xml"));
- stubbedServlet.setOutputStream(new ByteArrayOutputStream());
- stubbedServlet.doPost(new MockHttpRequest("something/knowledgebase/testservice", "application/json"), resp);
- assertEquals(HttpServletResponse.SC_NOT_ACCEPTABLE, resp.errorCode);
+ String response = new String(outStream.toByteArray());
+
+ assertTrue(response.indexOf("<ns2:name>santa</ns2:name>") > -1);
+ assertTrue(response.indexOf("<item key=\"lucaz\">\n <value xsi:type=\"disconnectedFactHandle\"") > -1);
+ assertTrue(response.indexOf("<item key=\"baunax\">\n <value xsi:type=\"disconnectedFactHandle\"") > -1);
}
-// public void testSample() throws Exception {
-//
-// PackageBuilder pb = new PackageBuilder();
-// pb.addPackageFromDrl(new InputStreamReader(getClass().getResourceAsStream("test_rules1.drl")));
-// assertFalse(pb.hasErrors());
-//
-// RuleBase rb = RuleBaseFactory.newRuleBase();
-// rb.addPackage(pb.getPackage());
-//
-// KnowledgeStatelessServlet serv = new KnowledgeStatelessServlet();
-//
-//
-// //serv.xmlInstance = KnowledgeStatelessServlet.configureXStream(false);
-//
-// final InputStream inXML = getClass().getResourceAsStream("sample_request.xml");
-// ByteArrayOutputStream outStream = new ByteArrayOutputStream();
-//
-//
-// ClassLoader cl = Thread.currentThread().getContextClassLoader();
-//
-// serv.doService(inXML, outStream, rb, false);
-//
-// String result = new String(outStream.toByteArray());
-//
-// assertTrue(result.indexOf("<id>prs</id>") > -1);
-// assertTrue(result.indexOf("<id>result</id>") > -1);
-// assertTrue(result.indexOf("<name>Jo</name>") > -1);
-// assertTrue(result, result.indexOf("<status>crazy</status>") > -1);
-// assertTrue(result.indexOf("<value>42</value>") > -1);
-// assertTrue(result.indexOf("<explanation>just cause it is</explanation>") > -1);
-//
-// assertSame(cl, Thread.currentThread().getContextClassLoader());
-//
-//
-// InputStream inJSON = getClass().getResourceAsStream("sample_request.json");
-// outStream = new ByteArrayOutputStream();
-// serv.doService(inJSON, outStream, rb, true);
-//
-// result = new String(outStream.toByteArray());
-//
-// assertTrue(result.indexOf("\"id\":\"prs\"") > -1);
-// assertTrue(result.indexOf("\"id\":\"result\"") > -1);
-// assertTrue(result.indexOf("\"status\":\"crazy\"") > -1);
-//
-// }
+ public void testXStreamInsertCommand() throws Exception {
+ String cmd = getXStreamCommand();
-// public void testExample() {
-// String xml = KnowledgeStatelessServlet.getRequestExample(false);
-// assertNotNull(xml);
-// String json = KnowledgeStatelessServlet.getRequestExample(true);
-// assertNotNull(json);
-// assertFalse(json.equals(xml));
-//
-//
-// xml = KnowledgeStatelessServlet.getResponseExample(false);
-// assertNotNull(xml);
-// json = KnowledgeStatelessServlet.getResponseExample(true);
-// assertNotNull(json);
-// assertFalse(json.equals(xml));
-//
-// }
+ StubbedServlet stubbedServlet = new StubbedServlet();
+ InputStream inXML = new ByteArrayInputStream(cmd.getBytes());
+ ByteArrayOutputStream outStream = new ByteArrayOutputStream();
+ stubbedServlet.setInputStream(inXML);
+ stubbedServlet.setOutputStream(outStream);
+ // Execution
+ MockHTTPResponse resp = new MockHTTPResponse();
+ stubbedServlet.doPost(new MockHttpRequest("hostname/servlet/ksession2", "application/xml"), resp);
+
+ String response = new String(outStream.toByteArray());
+
+ ExecutionResults result = (ExecutionResults) BatchExecutionHelper.newXStreamMarshaller().fromXML(response);
+
+ assertNotNull(result.getFactHandle("lucaz"));
+
+ FlatQueryResults personsQuery = (FlatQueryResults) result.getValue("persons");
+ assertEquals(2, personsQuery.size());
+
+ }
+
}
Modified: labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/test/java/org/drools/server/MockHTTPResponse.java
===================================================================
--- labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/test/java/org/drools/server/MockHTTPResponse.java 2010-02-24 15:18:32 UTC (rev 31831)
+++ labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/test/java/org/drools/server/MockHTTPResponse.java 2010-02-24 16:32:49 UTC (rev 31832)
@@ -1,7 +1,6 @@
package org.drools.server;
import java.io.IOException;
-import java.io.OutputStream;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.HashMap;
@@ -23,57 +22,42 @@
public MockHTTPResponse() {
-
}
public void addCookie(Cookie arg0) {
- // TODO Auto-generated method stub
-
}
public void addDateHeader(String arg0, long arg1) {
- // TODO Auto-generated method stub
-
}
public void addHeader(String arg0, String arg1) {
- // TODO Auto-generated method stub
-
}
public void addIntHeader(String arg0, int arg1) {
- // TODO Auto-generated method stub
-
}
public boolean containsHeader(String a) {
-
return this.headers.containsKey(a);
}
public String encodeRedirectURL(String arg0) {
- // TODO Auto-generated method stub
return null;
}
public String encodeRedirectUrl(String arg0) {
- // TODO Auto-generated method stub
return null;
}
public String encodeURL(String arg0) {
- // TODO Auto-generated method stub
return null;
}
public String encodeUrl(String arg0) {
- // TODO Auto-generated method stub
return null;
}
public void sendError(int i) throws IOException {
this.errorCode = i;
-
}
public void sendError(int arg0, String arg1) throws IOException {
@@ -82,51 +66,37 @@
public void sendRedirect(String arg0) throws IOException {
this.redirect = arg0;
-
}
public void setDateHeader(String arg0, long arg1) {
- // TODO Auto-generated method stub
-
}
public void setHeader(String k, String v) {
this.headers.put(k, v);
-
}
public void setIntHeader(String arg0, int arg1) {
- // TODO Auto-generated method stub
-
}
public void setStatus(int arg0) {
- // TODO Auto-generated method stub
-
}
public void setStatus(int arg0, String arg1) {
- // TODO Auto-generated method stub
}
public void flushBuffer() throws IOException {
- // TODO Auto-generated method stub
-
}
public int getBufferSize() {
- // TODO Auto-generated method stub
return 0;
}
public String getCharacterEncoding() {
- // TODO Auto-generated method stub
return null;
}
public Locale getLocale() {
- // TODO Auto-generated method stub
return null;
}
@@ -135,45 +105,43 @@
}
public PrintWriter getWriter() throws IOException {
-
return writer ;
}
public boolean isCommitted() {
- // TODO Auto-generated method stub
return false;
}
public void reset() {
- // TODO Auto-generated method stub
}
public void resetBuffer() {
- // TODO Auto-generated method stub
}
public void setBufferSize(int arg0) {
- // TODO Auto-generated method stub
}
public void setContentLength(int arg0) {
- // TODO Auto-generated method stub
}
public void setContentType(String s) {
this.contentType = s;
-
}
public void setLocale(Locale arg0) {
- // TODO Auto-generated method stub
}
+ public String getContentType() {
+ return null;
+ }
+ public void setCharacterEncoding(String charset) {
+
+ }
}
Modified: labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/test/java/org/drools/server/MockHttpRequest.java
===================================================================
--- labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/test/java/org/drools/server/MockHttpRequest.java 2010-02-24 15:18:32 UTC (rev 31831)
+++ labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/test/java/org/drools/server/MockHttpRequest.java 2010-02-24 16:32:49 UTC (rev 31832)
@@ -25,67 +25,54 @@
}
public String getAuthType() {
- // TODO Auto-generated method stub
return null;
}
public String getContextPath() {
- // TODO Auto-generated method stub
return null;
}
public Cookie[] getCookies() {
- // TODO Auto-generated method stub
return null;
}
public long getDateHeader(String arg0) {
- // TODO Auto-generated method stub
return 0;
}
public String getHeader(String arg0) {
- // TODO Auto-generated method stub
return null;
}
public Enumeration getHeaderNames() {
- // TODO Auto-generated method stub
return null;
}
public Enumeration getHeaders(String arg0) {
- // TODO Auto-generated method stub
return null;
}
public int getIntHeader(String arg0) {
- // TODO Auto-generated method stub
return 0;
}
public String getMethod() {
- // TODO Auto-generated method stub
return null;
}
public String getPathInfo() {
- // TODO Auto-generated method stub
return null;
}
public String getPathTranslated() {
- // TODO Auto-generated method stub
return null;
}
public String getQueryString() {
- // TODO Auto-generated method stub
return null;
}
public String getRemoteUser() {
- // TODO Auto-generated method stub
return null;
}
@@ -94,77 +81,62 @@
}
public StringBuffer getRequestURL() {
- // TODO Auto-generated method stub
return null;
}
public String getRequestedSessionId() {
- // TODO Auto-generated method stub
return null;
}
public String getServletPath() {
- // TODO Auto-generated method stub
return null;
}
public HttpSession getSession() {
- // TODO Auto-generated method stub
return null;
}
public HttpSession getSession(boolean arg0) {
- // TODO Auto-generated method stub
return null;
}
public Principal getUserPrincipal() {
- // TODO Auto-generated method stub
return null;
}
public boolean isRequestedSessionIdFromCookie() {
- // TODO Auto-generated method stub
return false;
}
public boolean isRequestedSessionIdFromURL() {
- // TODO Auto-generated method stub
return false;
}
public boolean isRequestedSessionIdFromUrl() {
- // TODO Auto-generated method stub
return false;
}
public boolean isRequestedSessionIdValid() {
- // TODO Auto-generated method stub
return false;
}
public boolean isUserInRole(String arg0) {
- // TODO Auto-generated method stub
return false;
}
public Object getAttribute(String arg0) {
- // TODO Auto-generated method stub
return null;
}
public Enumeration getAttributeNames() {
- // TODO Auto-generated method stub
return null;
}
public String getCharacterEncoding() {
- // TODO Auto-generated method stub
return null;
}
public int getContentLength() {
- // TODO Auto-generated method stub
return 0;
}
@@ -177,101 +149,95 @@
}
public Locale getLocale() {
- // TODO Auto-generated method stub
return null;
}
public Enumeration getLocales() {
- // TODO Auto-generated method stub
return null;
}
public String getParameter(String arg0) {
- // TODO Auto-generated method stub
return null;
}
public Map getParameterMap() {
- // TODO Auto-generated method stub
return null;
}
public Enumeration getParameterNames() {
- // TODO Auto-generated method stub
return null;
}
public String[] getParameterValues(String arg0) {
- // TODO Auto-generated method stub
return null;
}
public String getProtocol() {
- // TODO Auto-generated method stub
return null;
}
public BufferedReader getReader() throws IOException {
- // TODO Auto-generated method stub
return null;
}
public String getRealPath(String arg0) {
- // TODO Auto-generated method stub
return null;
}
public String getRemoteAddr() {
- // TODO Auto-generated method stub
return null;
}
public String getRemoteHost() {
- // TODO Auto-generated method stub
return null;
}
public RequestDispatcher getRequestDispatcher(String arg0) {
- // TODO Auto-generated method stub
return null;
}
public String getScheme() {
- // TODO Auto-generated method stub
return null;
}
public String getServerName() {
- // TODO Auto-generated method stub
return null;
}
public int getServerPort() {
- // TODO Auto-generated method stub
return 0;
}
public boolean isSecure() {
- // TODO Auto-generated method stub
return false;
}
public void removeAttribute(String arg0) {
- // TODO Auto-generated method stub
}
public void setAttribute(String arg0, Object arg1) {
- // TODO Auto-generated method stub
}
- public void setCharacterEncoding(String arg0)
- throws UnsupportedEncodingException {
- // TODO Auto-generated method stub
+ public void setCharacterEncoding(String arg0) throws UnsupportedEncodingException {
}
+ public String getLocalAddr() {
+ return null;
+ }
+ public String getLocalName() {
+ return null;
+ }
+ public int getLocalPort() {
+ return 0;
+ }
+
+ public int getRemotePort() {
+ return 0;
+ }
+
}
Added: labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/test/java/org/drools/server/rest/KnowledgeServiceRestTest.java
===================================================================
--- labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/test/java/org/drools/server/rest/KnowledgeServiceRestTest.java (rev 0)
+++ labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/test/java/org/drools/server/rest/KnowledgeServiceRestTest.java 2010-02-24 16:32:49 UTC (rev 31832)
@@ -0,0 +1,123 @@
+package org.drools.server.rest;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.UnsupportedEncodingException;
+
+import javax.ws.rs.core.Response.Status;
+
+import org.apache.commons.httpclient.HttpClient;
+import org.apache.commons.httpclient.NameValuePair;
+import org.apache.commons.httpclient.methods.PostMethod;
+import org.drools.runtime.ExecutionResults;
+import org.drools.runtime.help.BatchExecutionHelper;
+import org.drools.runtime.rule.impl.FlatQueryResults;
+import org.drools.server.KnowledgeServiceBaseTest;
+import org.jboss.resteasy.plugins.server.tjws.TJWSEmbeddedJaxrsServer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class KnowledgeServiceRestTest extends KnowledgeServiceBaseTest {
+
+ static Logger logger = LoggerFactory.getLogger(KnowledgeServiceRestTest.class);
+
+ private TJWSEmbeddedJaxrsServer server;
+ private HttpClient httpClient;
+
+ protected void setUp() throws Exception {
+ server = new TJWSEmbeddedJaxrsServer();
+ server.setPort(9091);
+ server.setBindAddress("localhost");
+ server.getDeployment().getActualResourceClasses().add(KnowledgeServiceRest.class);
+ server.start();
+ httpClient = new HttpClient();
+ httpClient.getHostConfiguration().setHost("localhost", 9091, "http");
+ }
+
+ public void testInvalidCommand() throws Exception {
+ PostMethod postMethod = new PostMethod("/commands/execute");
+ NameValuePair profile = new NameValuePair("profile", "ksession1");
+ NameValuePair command = new NameValuePair("command", null);
+
+ postMethod.setRequestBody(new NameValuePair[] {profile, command});
+ httpClient.executeMethod(postMethod);
+
+ assertEquals(Status.BAD_REQUEST.getStatusCode(), postMethod.getStatusCode());
+ }
+
+ public void testInvalidProfile() throws Exception {
+ PostMethod postMethod = new PostMethod("/commands/execute");
+ NameValuePair profile = new NameValuePair("profile", "inexistentProfile");
+ NameValuePair command = new NameValuePair("command", "xml definition");
+
+ postMethod.setRequestBody(new NameValuePair[] {profile, command});
+ httpClient.executeMethod(postMethod);
+
+ assertEquals(Status.BAD_REQUEST.getStatusCode(), postMethod.getStatusCode());
+ }
+
+ public void testJaxbInsertCommand() throws Exception {
+ String cmd = getJaxbCommand();
+
+ PostMethod postMethod = new PostMethod("/commands/execute");
+ NameValuePair profile = new NameValuePair("profile", "ksession1");
+ NameValuePair command = new NameValuePair("command", cmd);
+
+ postMethod.setRequestBody(new NameValuePair[] {profile, command});
+ httpClient.executeMethod(postMethod);
+
+ assertEquals(200, postMethod.getStatusCode());
+
+ InputStream responseBodyAsStream = postMethod.getResponseBodyAsStream();
+
+ String response = readInputStream(responseBodyAsStream);
+
+ assertTrue(response.indexOf("<ns2:name>santa</ns2:name>") > -1);
+ assertTrue(response.indexOf("<item key=\"lucaz\">\n <value xsi:type=\"disconnectedFactHandle\"") > -1);
+ assertTrue(response.indexOf("<item key=\"baunax\">\n <value xsi:type=\"disconnectedFactHandle\"") > -1);
+
+ }
+
+ public void testXStreamInsertCommand() throws Exception {
+ String cmd = getXStreamCommand();
+
+ PostMethod postMethod = new PostMethod("/commands/execute");
+ NameValuePair profile = new NameValuePair("profile", "ksession2");
+ NameValuePair command = new NameValuePair("command", cmd);
+
+ postMethod.setRequestBody(new NameValuePair[] {profile, command});
+ httpClient.executeMethod(postMethod);
+
+ assertEquals(200, postMethod.getStatusCode());
+
+ InputStream responseBodyAsStream = postMethod.getResponseBodyAsStream();
+
+ String response = readInputStream(responseBodyAsStream);
+
+ ExecutionResults result = (ExecutionResults) BatchExecutionHelper.newXStreamMarshaller().fromXML(response);
+
+ assertNotNull(result.getFactHandle("lucaz"));
+
+ FlatQueryResults personsQuery = (FlatQueryResults) result.getValue("persons");
+ assertEquals(2, personsQuery.size());
+
+ }
+
+ private String readInputStream(InputStream inputStream) throws UnsupportedEncodingException, IOException {
+ StringBuilder sb = new StringBuilder();
+ String line;
+ try {
+ BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));
+ while ((line = reader.readLine()) != null) {
+ sb.append(line).append("\n");
+ }
+ }
+ finally {
+ inputStream.close();
+ }
+ return sb.toString();
+ }
+
+}
Property changes on: labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/test/java/org/drools/server/rest/KnowledgeServiceRestTest.java
___________________________________________________________________
Name: svn:eol-style
+ native
Modified: labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/test/resources/changesets/change-set-2.xml
===================================================================
--- labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/test/resources/changesets/change-set-2.xml 2010-02-24 15:18:32 UTC (rev 31831)
+++ labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/test/resources/changesets/change-set-2.xml 2010-02-24 16:32:49 UTC (rev 31832)
@@ -1,10 +1,7 @@
<change-set xmlns='http://drools.org/drools-5.0/change-set'
- xmlns:xs='http://www.w3.org/2001/XMLSchema-instance'
- xs:schemaLocation='http://drools.org/drools-5.0/change-set.xsd' >
- <add>
-<!--
- ADD CLASSPATH RESOURCE
- <resource source='file:/project/myrules.drl' type='DRL' />
--->
- </add>
+ xmlns:xs='http://www.w3.org/2001/XMLSchema-instance'
+ xs:schemaLocation='http://drools.org/drools-5.0/change-set.xsd'>
+ <add>
+ <resource source='classpath:rules/person2.drl' type='DRL' />
+ </add>
</change-set>
\ No newline at end of file
Added: labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/test/resources/model/person.xsd
===================================================================
--- labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/test/resources/model/person.xsd (rev 0)
+++ labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/test/resources/model/person.xsd 2010-02-24 16:32:49 UTC (rev 31832)
@@ -0,0 +1,15 @@
+<xsd:schema
+ xmlns:person="http://drools.org/model"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ targetNamespace="http://drools.org/model"
+ elementFormDefault="qualified"
+>
+
+ <xsd:complexType name="person">
+ <xsd:sequence>
+ <xsd:element name="name" type="xsd:string" />
+ <xsd:element name="age" type="xsd:integer" />
+ </xsd:sequence>
+ </xsd:complexType>
+
+</xsd:schema>
\ No newline at end of file
Property changes on: labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/test/resources/model/person.xsd
___________________________________________________________________
Name: svn:eol-style
+ native
Modified: labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/test/resources/profiles.xml
===================================================================
--- labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/test/resources/profiles.xml 2010-02-24 15:18:32 UTC (rev 31831)
+++ labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/test/resources/profiles.xml 2010-02-24 16:32:49 UTC (rev 31832)
@@ -1,42 +1,35 @@
<?xml version="1.0" encoding="UTF-8" ?>
<profiles>
- <knowledge-context-profile id="xstreamProfile">
- <session-type>stateless</session-type>
- <change-sets>
- <file>changesets/change-set-1.xml</file>
- <file>changesets/change-set-2.xml</file>
- </change-sets>
- <startup-commands>
- <command>
- <![CDATA[
- <batch-execution lookup='ksession1'>
- <insert out-identifier='lucaz'>
- <org.drools.pipeline.camel.Person>
- <name>lucaz</name>
- <age>25</age>
- </org.drools.pipeline.camel.Person>
- </insert>
- <insert out-identifier='baunax'>
- <org.drools.pipeline.camel.Person>
- <name>baunax</name>
- <age>21</age>
- </org.drools.pipeline.camel.Person>
- </insert>
- <fire-all-rules />
- </batch-execution>
- ]]>
- </command>
- </startup-commands>
- </knowledge-context-profile>
-
- <knowledge-context-profile id="jaxbProfile">
- <session-type>stateful</session-type>
- <change-sets>
- <file>changesets/change-set-1.xml</file>
- </change-sets>
- <jaxb-models>
- <file>person.xsd</file>
- </jaxb-models>
- </knowledge-context-profile>
-
+ <knowledge-context-profile id="ksession1">
+ <session-type>stateful</session-type>
+ <change-sets>
+ <file>changesets/change-set-1.xml</file>
+ </change-sets>
+ <jaxb-models>
+ <file>model/person.xsd</file>
+ </jaxb-models>
+ <startup-commands>
+ <command>
+ <![CDATA[
+ <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+ <batch-execution lookup="ksession1" xmlns:ns2="http://drools.org/model">
+ <insert out-identifier="santa">
+ <object xsi:type="ns2:person" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <ns2:name>santa</ns2:name>
+ <ns2:age>99</ns2:age>
+ </object>
+ </insert>
+ </batch-execution>
+ ]]>
+ </command>
+ </startup-commands>
+ </knowledge-context-profile>
+
+ <knowledge-context-profile id="ksession2">
+ <session-type>stateless</session-type>
+ <change-sets>
+ <file>changesets/change-set-2.xml</file>
+ </change-sets>
+ </knowledge-context-profile>
+
</profiles>
Modified: labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/test/resources/rules/person.drl
===================================================================
--- labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/test/resources/rules/person.drl 2010-02-24 15:18:32 UTC (rev 31831)
+++ labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/test/resources/rules/person.drl 2010-02-24 16:32:49 UTC (rev 31832)
@@ -1,8 +1,14 @@
package org.drools.test.model
-rule "Test Rule"
+import org.drools.model.Person;
+
+query persons
+ $p : Person(name != null)
+end
+
+rule "Test Rule 1"
when
- eval (true)
+ $p : Person()
then
- System.out.println("fired");
-end
+ System.out.println("fired " + $p.getName());
+end
\ No newline at end of file
Added: labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/test/resources/rules/person2.drl
===================================================================
--- labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/test/resources/rules/person2.drl (rev 0)
+++ labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/test/resources/rules/person2.drl 2010-02-24 16:32:49 UTC (rev 31832)
@@ -0,0 +1,14 @@
+package org.drools.test.model
+
+import org.drools.pipeline.camel.Person;
+
+query persons
+ $p : Person(name != null)
+end
+
+rule "Test Rule 2"
+ when
+ $p : Person()
+ then
+ System.out.println("fired " + $p.getName());
+end
Property changes on: labs/jbossrules/branches/drools_server_camel_lucaz_baunax/drools-server/src/test/resources/rules/person2.drl
___________________________________________________________________
Name: svn:eol-style
+ native
More information about the jboss-svn-commits
mailing list