You call <br> ObjectOutputStream out = new ObjectOutputStream( baos );<br> out.writeObject( marshaller );<br>which would (if it succeeded) just serialize the MarshallerImpl, which is useless as it is nothing but the ballpen with which you write. You need to serialize the "text" via a call to <br>
marshaller.marshall(...)<br>as you do. But, to really get it on paper, you must write to a file. Using FileOutputStream might be an option.<br><br>-W<br><br><br><div class="gmail_quote">On 12 July 2011 12:37, clement.pernot <span dir="ltr"><<a href="mailto:clement.pernot@newel.net">clement.pernot@newel.net</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">I have try what you say. This didn't work.<br>
here is my full code:<br>
<br>
package com.sample;<br>
<br>
import java.io.ByteArrayOutputStream;<br>
import java.io.ObjectOutputStream;<br>
import java.io.Serializable;<br>
<br>
import org.drools.KnowledgeBase;<br>
import org.drools.KnowledgeBaseFactory;<br>
import org.drools.builder.KnowledgeBuilder;<br>
import org.drools.builder.KnowledgeBuilderError;<br>
import org.drools.builder.KnowledgeBuilderErrors;<br>
import org.drools.builder.KnowledgeBuilderFactory;<br>
import org.drools.builder.ResourceType;<br>
import org.drools.io.ResourceFactory;<br>
import org.drools.marshalling.Marshaller;<br>
import org.drools.marshalling.MarshallerFactory;<br>
import org.drools.marshalling.ObjectMarshallingStrategy;<br>
import org.drools.runtime.StatefulKnowledgeSession;<br>
<br>
public class test{<br>
<br>
private static void compileRuleBase2( String drlPath, String rbPath )<br>
throws Exception {<br>
KnowledgeBuilder kBuilder =<br>
KnowledgeBuilderFactory.newKnowledgeBuilder();<br>
kBuilder.add( ResourceFactory.newFileResource( drlPath ),<br>
ResourceType.DRL );<br>
if( kBuilder.hasErrors() ){<br>
for( KnowledgeBuilderError err: kBuilder.getErrors() ){<br>
System.err.println( err.toString() );<br>
}<br>
throw new IllegalStateException( "DRL errors" );<br>
}<br>
KnowledgeBase kBase = KnowledgeBaseFactory.newKnowledgeBase();<br>
kBase.addKnowledgePackages( kBuilder.getKnowledgePackages() );<br>
<br>
try {<br>
KnowledgeBase kbase = readKnowledgeBase();<br>
StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();<br>
<br>
Message message = new Message();<br>
message.setMessage("Hello World");<br>
message.setStatus(Message.HELLO);<br>
<br>
ksession.insert(message);<br>
<br>
ObjectMarshallingStrategy oms =<br>
MarshallerFactory.newIdentityMarshallingStrategy();<br>
ByteArrayOutputStream baos = new ByteArrayOutputStream();<br>
Marshaller marshaller = MarshallerFactory.newMarshaller(<br>
ksession.getKnowledgeBase(), new ObjectMarshallingStrategy[]{ oms } );<br>
<br>
marshaller.marshall( baos, ksession );<br>
<br>
ObjectOutputStream out = new ObjectOutputStream( baos );<br>
out.writeObject( marshaller );<br>
out.close();<br>
<br>
baos.close();<br>
ksession.fireAllRules();<br>
<br>
} catch (Throwable t) {<br>
t.printStackTrace();<br>
}<br>
}<br>
<br>
public static final void main(String[] args) {<br>
try {<br>
compileRuleBase2("Sample.drl", "drools_compiled_file_with_fact" );<br>
} catch (Exception e) {<br>
e.printStackTrace();<br>
}<br>
}<br>
<br>
private static KnowledgeBase readKnowledgeBase() throws Exception {<br>
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();<br>
kbuilder.add(ResourceFactory.newClassPathResource("Sample.drl"),<br>
ResourceType.DRL);<br>
KnowledgeBuilderErrors errors = kbuilder.getErrors();<br>
if (errors.size() > 0) {<br>
for (KnowledgeBuilderError error: errors) {<br>
System.err.println(error);<br>
}<br>
throw new IllegalArgumentException("Could not parse knowledge.");<br>
}<br>
KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();<br>
kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());<br>
return kbase;<br>
}<br>
<br>
public static class Message implements Serializable{<br>
<br>
public static final int HELLO = 0;<br>
public static final int GOODBYE = 1;<br>
private String message;<br>
private int status;<br>
<br>
public String getMessage() {<br>
return this.message;<br>
}<br>
public void setMessage(String message) {<br>
this.message = message;<br>
}<br>
public int getStatus() {<br>
return this.status;<br>
}<br>
public void setStatus(int status) {<br>
this.status = status;<br>
}<br>
}<br>
}<br>
<br>
<br>
<br>
here is my error:<br>
<br>
java.io.NotSerializableException:<br>
org.drools.marshalling.impl.DefaultMarshaller<br>
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1180)<br>
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:346)<br>
at com.sample.test.compileRuleBase2(test.java:59)<br>
at com.sample.test.main(test.java:73)<br>
<br>
<br>
Thank you for your reply, I think I am near the solution<br>
<font color="#888888"><br>
--<br>
View this message in context: <a href="http://drools.46999.n3.nabble.com/Drools-and-serialize-tp3161882p3162038.html" target="_blank">http://drools.46999.n3.nabble.com/Drools-and-serialize-tp3161882p3162038.html</a><br>
Sent from the Drools: User forum mailing list archive at Nabble.com.<br>
_______________________________________________<br>
rules-users mailing list<br>
<a href="mailto:rules-users@lists.jboss.org">rules-users@lists.jboss.org</a><br>
<a href="https://lists.jboss.org/mailman/listinfo/rules-users" target="_blank">https://lists.jboss.org/mailman/listinfo/rules-users</a><br>
</font></blockquote></div><br>