Author: objectiser
Date: 2011-02-10 07:32:24 -0500 (Thu, 10 Feb 2011)
New Revision: 646
Added:
branches/experimental/2.0.x/bundles/org.savara.bpel/src/test/resources/bpel/SerializeTest.bpel
Modified:
branches/experimental/2.0.x/bundles/org.savara.bpel/src/main/java/org/savara/bpel/util/BPELModelUtil.java
branches/experimental/2.0.x/bundles/org.savara.bpel/src/test/java/org/savara/bpel/generator/GeneratorTest.java
branches/experimental/2.0.x/bundles/org.savara.bpel/src/test/java/org/savara/bpel/util/BPELModelUtilTest.java
Log:
SAVARA-175 - replaced sun internal jaxb namespace prefix mapping mechanism, that changed
across jdk versions, with a more standard (but not ideal) workaround.
Modified:
branches/experimental/2.0.x/bundles/org.savara.bpel/src/main/java/org/savara/bpel/util/BPELModelUtil.java
===================================================================
---
branches/experimental/2.0.x/bundles/org.savara.bpel/src/main/java/org/savara/bpel/util/BPELModelUtil.java 2011-02-09
23:15:27 UTC (rev 645)
+++
branches/experimental/2.0.x/bundles/org.savara.bpel/src/main/java/org/savara/bpel/util/BPELModelUtil.java 2011-02-10
12:32:24 UTC (rev 646)
@@ -63,17 +63,34 @@
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
if (prefixes != null) {
- try {
- com.sun.xml.bind.marshaller.NamespacePrefixMapper mapper=
- new NamespacePrefixMapperImpl(prefixes);
+ java.io.ByteArrayOutputStream baos=new java.io.ByteArrayOutputStream();
+
+ marshaller.marshal(factory.createProcess(desc), baos);
+
+ // Convert to DOM
+ javax.xml.parsers.DocumentBuilderFactory dbfactory=
+ javax.xml.parsers.DocumentBuilderFactory.newInstance();
+ dbfactory.setNamespaceAware(true);
+
+ org.w3c.dom.Document doc=
+ dbfactory.newDocumentBuilder().parse(new
java.io.ByteArrayInputStream(baos.toByteArray()));
+
+ for (String ns : prefixes.keySet()) {
+ String prefix=prefixes.get(ns);
- marshaller.setProperty("com.sun.xml.bind.namespacePrefixMapper", mapper);
- } catch (RuntimeException mex) {
- mex.printStackTrace();
- }
+ doc.getDocumentElement().setAttribute("xmlns:"+prefix, ns);
+ }
+
+ javax.xml.transform.dom.DOMSource source=new javax.xml.transform.dom.DOMSource(doc);
+ javax.xml.transform.stream.StreamResult result=new
javax.xml.transform.stream.StreamResult(os);
+
+ javax.xml.transform.Transformer transformer=
+ javax.xml.transform.TransformerFactory.newInstance().newTransformer();
+ transformer.transform(source, result);
+
+ } else {
+ marshaller.marshal(factory.createProcess(desc), os);
}
-
- marshaller.marshal(factory.createProcess(desc), os);
} catch(Exception e) {
throw new IOException("Failed to serialize model", e);
}
Modified:
branches/experimental/2.0.x/bundles/org.savara.bpel/src/test/java/org/savara/bpel/generator/GeneratorTest.java
===================================================================
---
branches/experimental/2.0.x/bundles/org.savara.bpel/src/test/java/org/savara/bpel/generator/GeneratorTest.java 2011-02-09
23:15:27 UTC (rev 645)
+++
branches/experimental/2.0.x/bundles/org.savara.bpel/src/test/java/org/savara/bpel/generator/GeneratorTest.java 2011-02-10
12:32:24 UTC (rev 646)
@@ -29,9 +29,7 @@
import org.savara.common.model.annotation.AnnotationDefinitions;
import org.savara.common.model.generator.ModelGenerator;
import org.scribble.common.logging.CachedJournal;
-import org.scribble.protocol.model.Role;
import org.scribble.protocol.parser.antlr.ANTLRProtocolParser;
-import org.savara.protocol.util.ProtocolServices;
public class GeneratorTest {
@@ -169,69 +167,60 @@
projected.getProtocol().getAnnotations(), AnnotationDefinitions.TYPE);
}
- java.util.List<Role> projectedRoles=projected.getRoles();
+ //java.util.List<Role> projectedRoles=projected.getRoles();
ModelGenerator generator=new ProtocolToBPELModelGenerator();
- //defn = projected.getProtocol();
-
- if (generator != null) { // && defn != null) {
-
- Object target=generator.generate(projected, journal, null);
-
- /*
- ModelReference targetRef=
- new ModelReference(BPELNotation.NOTATION_CODE);
- targetRef.setAlias(m_name);
- targetRef.setLocatedRole(m_role);
-
- DefaultBPELLanguageModel target=
- new DefaultBPELLanguageModel(targetRef);
+ Object target=generator.generate(projected, journal, null);
+
+ /*
+ ModelReference targetRef=
+ new ModelReference(BPELNotation.NOTATION_CODE);
+ targetRef.setAlias(m_name);
+ targetRef.setLocatedRole(m_role);
+
+ DefaultBPELLanguageModel target=
+ new DefaultBPELLanguageModel(targetRef);
- generator.generate(targetRef, role,
- target, projected);
- */
-
- if (target instanceof TProcess) {
- // Obtain any namespace prefix map
- java.util.Map<String, String> prefixes=
- new java.util.HashMap<String, String>();
-
- java.util.List<Annotation> list=
-
AnnotationDefinitions.getAnnotations(projected.getProtocol().getAnnotations(),
- AnnotationDefinitions.TYPE);
-
- for (Annotation annotation : list) {
- if
(annotation.getProperties().containsKey(AnnotationDefinitions.NAMESPACE_PROPERTY)
&&
-
annotation.getProperties().containsKey(AnnotationDefinitions.PREFIX_PROPERTY))
{
-
prefixes.put((String)annotation.getProperties().get(AnnotationDefinitions.NAMESPACE_PROPERTY),
-
(String)annotation.getProperties().get(AnnotationDefinitions.PREFIX_PROPERTY));
- }
- }
-
- try {
- java.io.ByteArrayOutputStream baos=new java.io.ByteArrayOutputStream();
-
- BPELModelUtil.serialize((TProcess)target, baos, prefixes);
-
- baos.close();
-
- String text=new String(baos.toByteArray());
-
- checkResults(result, text);
- } catch(Exception e) {
- result.addError(this, e);
- }
- } else {
- result.addError(this,
- new Throwable("No BPEL generated"));
- }
-
- } else {
- result.addError(this,
- new Throwable("Unable to find Model Generator"));
- }
- }
+ generator.generate(targetRef, role,
+ target, projected);
+ */
+
+ if (target instanceof TProcess) {
+ // Obtain any namespace prefix map
+ java.util.Map<String, String> prefixes=
+ new java.util.HashMap<String, String>();
+
+ java.util.List<Annotation> list=
+ AnnotationDefinitions.getAnnotations(projected.getProtocol().getAnnotations(),
+ AnnotationDefinitions.TYPE);
+
+ for (Annotation annotation : list) {
+ if
(annotation.getProperties().containsKey(AnnotationDefinitions.NAMESPACE_PROPERTY)
&&
+ annotation.getProperties().containsKey(AnnotationDefinitions.PREFIX_PROPERTY))
{
+ prefixes.put((String)annotation.getProperties().get(AnnotationDefinitions.NAMESPACE_PROPERTY),
+ (String)annotation.getProperties().get(AnnotationDefinitions.PREFIX_PROPERTY));
+ }
+ }
+
+ try {
+ java.io.ByteArrayOutputStream baos=new java.io.ByteArrayOutputStream();
+
+ BPELModelUtil.serialize((TProcess)target, baos, prefixes);
+
+ baos.close();
+
+ String text=new String(baos.toByteArray());
+
+ checkResults(result, text);
+ } catch(Exception e) {
+ result.addError(this, e);
+ }
+ } else {
+ result.addError(this,
+ new Throwable("No BPEL generated"));
+ }
+ }
}
}
Modified:
branches/experimental/2.0.x/bundles/org.savara.bpel/src/test/java/org/savara/bpel/util/BPELModelUtilTest.java
===================================================================
---
branches/experimental/2.0.x/bundles/org.savara.bpel/src/test/java/org/savara/bpel/util/BPELModelUtilTest.java 2011-02-09
23:15:27 UTC (rev 645)
+++
branches/experimental/2.0.x/bundles/org.savara.bpel/src/test/java/org/savara/bpel/util/BPELModelUtilTest.java 2011-02-10
12:32:24 UTC (rev 646)
@@ -23,7 +23,7 @@
public class BPELModelUtilTest extends TestCase {
- public void testGetBPELModel() {
+ public void testDeserialize() {
String filename="bpel/PolicyQuoteProcess_PolicyQuoteProcessService.bpel";
java.io.InputStream is=
@@ -43,4 +43,63 @@
fail("Failed to deserialise BPEL process: "+e);
}
}
+
+ public void testSerialize() {
+ String filename="bpel/SerializeTest.bpel";
+
+ java.io.InputStream is=
+ ClassLoader.getSystemResourceAsStream(filename);
+
+ if (is == null) {
+ fail("Failed to load BPEL model file '"+filename+"'");
+ }
+
+ try {
+ TProcess process=BPELModelUtil.deserialize(is);
+
+ if (process == null) {
+ fail("Failed to retrieve BPEL process");
+ }
+
+ java.io.ByteArrayOutputStream os=new java.io.ByteArrayOutputStream();
+
+ java.util.Map<String,String> prefixes=new java.util.HashMap<String,
String>();
+
+ //prefixes.put("http://docs.oasis-open.org/wsbpel/2.0/process/executable","bpel");
+
prefixes.put("http://creditagency.com/creditCheckService","...;
+
prefixes.put("http://creditagency.com/creditCheck","cred&q...;
+
prefixes.put("http://dmv.com/drivingRecordService","dmv&qu...;
+
prefixes.put("http://dmv.com/drivingRecord","drv");
+
prefixes.put("http://www.example.org/policyQuoteCalculationService&q...;
+
prefixes.put("http://www.example.org/policyQuoteEntityService",...;
+
prefixes.put("http://www.example.org/policyQuote","pol");
+
prefixes.put("http://www.example.org/policyQuoteProcessService"...;
+
prefixes.put("http://www.pi4soa.org/PolicyQuote","tns");
+
prefixes.put("http://www.w3.org/2001/XMLSchema","xsd");
+
prefixes.put("http://www.scribble.org/conversation","ns0&q...;
+
+ BPELModelUtil.serialize(process, os, prefixes);
+
+ String serialized=new String(os.toByteArray());
+
+ os.close();
+
+ is = ClassLoader.getSystemResourceAsStream(filename);
+
+ byte[] b=new byte[is.available()];
+ is.read(b);
+
+ String original=new String(b);
+
+ if (serialized.equals(original) == false) {
+ System.out.println("BPEL serialize: original (len="+original.length()+
+ ") ::"+original+":: serialized
(len="+serialized.length()+") ::"+serialized+"::");
+
+ fail("Serialized BPEL not same as original");
+ }
+
+ } catch(Exception e) {
+ fail("Failed to deserialise BPEL process: "+e);
+ }
+ }
}
Added:
branches/experimental/2.0.x/bundles/org.savara.bpel/src/test/resources/bpel/SerializeTest.bpel
===================================================================
---
branches/experimental/2.0.x/bundles/org.savara.bpel/src/test/resources/bpel/SerializeTest.bpel
(rev 0)
+++
branches/experimental/2.0.x/bundles/org.savara.bpel/src/test/resources/bpel/SerializeTest.bpel 2011-02-10
12:32:24 UTC (rev 646)
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?><process
xmlns="http://docs.oasis-open.org/wsbpel/2.0/process/executable"
xmlns:ca="http://creditagency.com/creditCheckService"
xmlns:cred="http://creditagency.com/creditCheck"
xmlns:dmv="http://dmv.com/drivingRecordService"
xmlns:drv="http://dmv.com/drivingRecord"
xmlns:ns0="http://www.scribble.org/conversation"
xmlns:pcs="http://www.example.org/policyQuoteCalculationService"
xmlns:pes="http://www.example.org/policyQuoteEntityService"
xmlns:pol="http://www.example.org/policyQuote"
xmlns:pps="http://www.example.org/policyQuoteProcessService"
xmlns:tns="http://www.pi4soa.org/PolicyQuote"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
name="PolicyQuoteProcess_PolicyQuoteProcessService"
ns0:conversationType="org.pi4soa.policyquote.policyquote.PolicyQuoteProcess@PolicyQuoteProcessService"
targetNamespace="http://www.example.org/policyQuoteProcessService&qu...
+ <import
importType="http://schemas.xmlsoap.org/wsdl/"
location="PolicyQuoteProcess_PolicyQuoteProcessService.wsdl"
namespace="http://www.example.org/policyQuoteProcessService"/>
+ <import
importType="http://schemas.xmlsoap.org/wsdl/"
location="PolicyQuoteProcess_CreditCheckService.wsdl"
namespace="http://creditagency.com/creditCheckService"/>
+ <import
importType="http://schemas.xmlsoap.org/wsdl/"
location="PolicyQuoteProcess_DrivingRecordService.wsdl"
namespace="http://dmv.com/drivingRecordService"/>
+ <import
importType="http://schemas.xmlsoap.org/wsdl/"
location="PolicyQuoteProcess_PolicyQuoteCalculationService.wsdl"
namespace="http://www.example.org/policyQuoteCalculationService"...
+ <import
importType="http://schemas.xmlsoap.org/wsdl/"
location="PolicyQuoteProcess_PolicyQuoteEntityService.wsdl"
namespace="http://www.example.org/policyQuoteEntityService"/>
+ <import
importType="http://schemas.xmlsoap.org/wsdl/"
location="PolicyQuoteProcess_PolicyQuoteProcessServiceArtifacts.wsdl"
namespace="http://www.example.org/policyQuoteProcessService"/>
+ <partnerLinks>
+ <partnerLink myRole="PolicyQuoteProcessService"
name="DriverToPolicyQuoteProcessService"
partnerLinkType="pps:DriverToPolicyQuoteProcessServiceServiceLT"/>
+ <partnerLink name="PolicyQuoteProcessServiceToDrivingRecordService"
partnerLinkType="pps:PolicyQuoteProcessServiceToDrivingRecordServiceLT"
partnerRole="DrivingRecordServiceRequester"/>
+ <partnerLink myRole="DrivingRecordCallbackService"
name="DrivingRecordServiceToPolicyQuoteProcessService"
partnerLinkType="pps:DrivingRecordServiceToPolicyQuoteProcessServiceServiceLT"/>
+ <partnerLink name="PolicyQuoteProcessServiceToCreditCheckService"
partnerLinkType="pps:PolicyQuoteProcessServiceToCreditCheckServiceLT"
partnerRole="CreditCheckServiceRequester"/>
+ <partnerLink
name="PolicyQuoteProcessServiceToPolicyQuoteCalculationService"
partnerLinkType="pps:PolicyQuoteProcessServiceToPolicyQuoteCalculationServiceLT"
partnerRole="PolicyQuoteCalculationServiceRequester"/>
+ <partnerLink
name="PolicyQuoteProcessServiceToPolicyQuoteEntityService"
partnerLinkType="pps:PolicyQuoteProcessServiceToPolicyQuoteEntityServiceLT"
partnerRole="PolicyQuoteEntityServiceRequester"/>
+ </partnerLinks>
+ <variables>
+ <variable messageType="pps:receivePolicyQuoteRequest"
name="policyQuoteVar"/>
+ <variable messageType="dmv:checkDrivingRecordRequest"
name="drivingRecordRequestVar"/>
+ <variable messageType="pps:receiveDrivingRecordRequest"
name="drivingRecordResponseVar"/>
+ <variable messageType="ca:checkCreditRequest"
name="creditCheckRequestVar"/>
+ <variable messageType="ca:checkCreditResponse"
name="creditCheckResponseVar"/>
+ <variable messageType="pcs:calculatePolicyQuoteResponse"
name="policyQuoteReplyVar"/>
+ <variable messageType="pps:policyQuoteFaultFault"
name="policyQuoteFaultVar"/>
+ </variables>
+ <sequence>
+ <receive createInstance="yes" name="Receive_policyQuote"
operation="receivePolicyQuote"
partnerLink="DriverToPolicyQuoteProcessService"
portType="pps:PolicyQuoteProcessService"
variable="policyQuoteVar"/>
+ <invoke inputVariable="drivingRecordRequestVar"
name="Send_drivingRecordRequest" operation="checkDrivingRecord"
partnerLink="PolicyQuoteProcessServiceToDrivingRecordService"
portType="dmv:DrivingRecordService"/>
+ <receive name="Receive_drivingRecordResponse"
operation="receiveDrivingRecord"
partnerLink="DrivingRecordServiceToPolicyQuoteProcessService"
portType="pps:DrivingRecordCallbackService"
variable="drivingRecordResponseVar"/>
+ <if>
+ <sequence>
+ <invoke inputVariable="creditCheckRequestVar"
name="Send_creditCheckRequest" operation="checkCredit"
outputVariable="creditCheckResponseVar"
partnerLink="PolicyQuoteProcessServiceToCreditCheckService"
portType="ca:CreditCheckService"/>
+ <invoke inputVariable="policyQuoteVar"
name="Send_policyQuote" operation="calculatePolicyQuote"
outputVariable="policyQuoteReplyVar"
partnerLink="PolicyQuoteProcessServiceToPolicyQuoteCalculationService"
portType="pcs:PolicyQuoteCalculationService"/>
+ <invoke inputVariable="policyQuoteVar"
name="Send_policyQuote" operation="createPolicyQuote"
outputVariable="policyQuoteReplyVar"
partnerLink="PolicyQuoteProcessServiceToPolicyQuoteEntityService"
portType="pes:PolicyQuoteEntityService"/>
+ <reply name="Send_policyQuoteReply"
operation="receivePolicyQuote"
partnerLink="DriverToPolicyQuoteProcessService"
portType="pps:PolicyQuoteProcessService"
variable="policyQuoteReplyVar"/>
+ </sequence>
+ <else>
+ <sequence>
+ <reply faultName="pps:policyQuoteFault"
name="Send_policyQuoteFault" operation="receivePolicyQuote"
partnerLink="DriverToPolicyQuoteProcessService"
portType="pps:PolicyQuoteProcessService"
variable="policyQuoteFaultVar"/>
+ </sequence>
+ </else>
+ </if>
+ </sequence>
+</process>
\ No newline at end of file