Author: ruwan
Date: Tue May 13 11:07:39 2008
New Revision: 16957

Log:
Smooks mediator core functionality added

Added:
   trunk/esb/java/modules/mediators/smooks/src/
   trunk/esb/java/modules/mediators/smooks/src/main/
   trunk/esb/java/modules/mediators/smooks/src/main/java/
   trunk/esb/java/modules/mediators/smooks/src/main/java/org/
   trunk/esb/java/modules/mediators/smooks/src/main/java/org/wso2/
   trunk/esb/java/modules/mediators/smooks/src/main/java/org/wso2/esb/
   trunk/esb/java/modules/mediators/smooks/src/main/java/org/wso2/esb/config/
   
trunk/esb/java/modules/mediators/smooks/src/main/java/org/wso2/esb/config/mediator/
   
trunk/esb/java/modules/mediators/smooks/src/main/java/org/wso2/esb/config/mediator/xml/
   
trunk/esb/java/modules/mediators/smooks/src/main/java/org/wso2/esb/config/mediator/xml/SmooksMediatorFactory.java
   (contents, props changed)
   
trunk/esb/java/modules/mediators/smooks/src/main/java/org/wso2/esb/config/mediator/xml/SmooksMediatorSerializer.java
   (contents, props changed)
   trunk/esb/java/modules/mediators/smooks/src/main/java/org/wso2/esb/mediators/
   
trunk/esb/java/modules/mediators/smooks/src/main/java/org/wso2/esb/mediators/transform/
   
trunk/esb/java/modules/mediators/smooks/src/main/java/org/wso2/esb/mediators/transform/SmooksMediator.java
   (contents, props changed)
   trunk/esb/java/modules/mediators/smooks/src/main/resources/
   trunk/esb/java/modules/mediators/smooks/src/main/resources/META-INF/
   trunk/esb/java/modules/mediators/smooks/src/main/resources/META-INF/services/
   
trunk/esb/java/modules/mediators/smooks/src/main/resources/META-INF/services/org.apache.synapse.config.xml.MediatorFactory
      - copied, changed from r16953, 
/trunk/esb/java/modules/mediators/router/src/main/resources/META-INF/services/org.apache.synapse.config.xml.MediatorFactory
   
trunk/esb/java/modules/mediators/smooks/src/main/resources/META-INF/services/org.apache.synapse.config.xml.MediatorSerializer
      - copied, changed from r16953, 
/trunk/esb/java/modules/mediators/router/src/main/resources/META-INF/services/org.apache.synapse.config.xml.MediatorSerializer
Modified:
   trunk/esb/java/modules/mediators/smooks/pom.xml

Modified: trunk/esb/java/modules/mediators/smooks/pom.xml
==============================================================================
--- trunk/esb/java/modules/mediators/smooks/pom.xml     (original)
+++ trunk/esb/java/modules/mediators/smooks/pom.xml     Tue May 13 11:07:39 2008
@@ -1,3 +1,19 @@
+<!--
+  ~ Copyright (c) 2006, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
+  ~
+  ~ Licensed under the Apache License, Version 2.0 (the "License");
+  ~ you may not use this file except in compliance with the License.
+  ~ You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
+
 <project
         xmlns="http://maven.apache.org/POM/4.0.0";
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
@@ -16,4 +32,16 @@
     <description>WSO2 Enterprise Service Bus (ESB) - Smooks 
Mediator</description>
     <packaging>jar</packaging>
 
+    <dependencies>
+        <dependency>
+            <groupId>milyn</groupId>
+            <artifactId>milyn-smooks-edi</artifactId>
+            <version>${milyn.version}</version>
+        </dependency>
+    </dependencies>
+    
+    <properties>
+           <milyn.version>1.0-SNAPSHOT</milyn.version>
+    </properties>
+
 </project>

Added: 
trunk/esb/java/modules/mediators/smooks/src/main/java/org/wso2/esb/config/mediator/xml/SmooksMediatorFactory.java
==============================================================================
--- (empty file)
+++ 
trunk/esb/java/modules/mediators/smooks/src/main/java/org/wso2/esb/config/mediator/xml/SmooksMediatorFactory.java
   Tue May 13 11:07:39 2008
@@ -0,0 +1,75 @@
+/*
+ * Copyright (c) 2006, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.wso2.esb.config.mediator.xml;
+
+import org.apache.axiom.om.OMAttribute;
+import org.apache.axiom.om.OMElement;
+import org.apache.synapse.Mediator;
+import org.apache.synapse.config.xml.AbstractMediatorFactory;
+import org.apache.synapse.config.xml.XMLConfigConstants;
+import org.milyn.Smooks;
+import org.wso2.esb.mediators.transform.SmooksMediator;
+import org.xml.sax.SAXException;
+
+import javax.xml.namespace.QName;
+import java.io.IOException;
+
+/**
+ * &lt;smooks config="string"/&gt;
+ */
+public class SmooksMediatorFactory extends AbstractMediatorFactory {
+
+    public static final QName ELM_SMOOKS_TRANSFORM = new QName(
+            XMLConfigConstants.SYNAPSE_NAMESPACE, "smooks");
+    public static final QName ATR_SMOOKS_CONFIG = new QName("config");
+
+    public static final String DEFAULT_SMOOKS_CONFIG = "smooks-config.xml";
+
+    public Mediator createMediator(OMElement elem) {
+
+        SmooksMediator smooksTransformMediator = new SmooksMediator();
+        OMAttribute atrSmooksConfig   = elem.getAttribute(ATR_SMOOKS_CONFIG);
+
+        String smooksConfigFileLocation;
+        if (atrSmooksConfig != null && atrSmooksConfig.getAttributeValue() != 
null) {
+            smooksConfigFileLocation = atrSmooksConfig.getAttributeValue();
+            smooksTransformMediator.setSmooksConfig(smooksConfigFileLocation);
+        } else {
+            smooksConfigFileLocation = DEFAULT_SMOOKS_CONFIG;
+        }
+
+        try {
+            Smooks smooks = new Smooks(smooksConfigFileLocation);
+            smooksTransformMediator.setSmooks(smooks);
+
+        } catch (IOException e) {
+           handleException("Smooks configuration error", e);
+        } catch (SAXException e) {
+           handleException("Smooks configuration error", e);
+        }
+
+        // after successfully creating the mediator
+        // set its common attributes such as tracing etc
+        processTraceState(smooksTransformMediator, elem);
+
+        return smooksTransformMediator;
+    }
+
+    public QName getTagQName() {
+        return ELM_SMOOKS_TRANSFORM;
+    }
+}

Added: 
trunk/esb/java/modules/mediators/smooks/src/main/java/org/wso2/esb/config/mediator/xml/SmooksMediatorSerializer.java
==============================================================================
--- (empty file)
+++ 
trunk/esb/java/modules/mediators/smooks/src/main/java/org/wso2/esb/config/mediator/xml/SmooksMediatorSerializer.java
        Tue May 13 11:07:39 2008
@@ -0,0 +1,55 @@
+/*
+ * Copyright (c) 2006, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.wso2.esb.config.mediator.xml;
+
+import org.apache.axiom.om.OMElement;
+import org.apache.synapse.Mediator;
+import org.apache.synapse.config.xml.AbstractMediatorSerializer;
+import org.wso2.esb.mediators.transform.SmooksMediator;
+
+/**
+ * &lt;smooks config="string"/&gt;
+ */
+public class SmooksMediatorSerializer extends AbstractMediatorSerializer {
+
+    public OMElement serializeMediator(OMElement parent, Mediator m) {
+
+        if (!(m instanceof SmooksMediator)) {
+            handleException("Unsupported mediator passed in for serialization 
: " + m.getType());
+        }
+
+        SmooksMediator mediator = (SmooksMediator) m;
+        OMElement smooksTransform = fac.createOMElement(
+                SmooksMediatorFactory.ELM_SMOOKS_TRANSFORM);
+        saveTracingState(smooksTransform, mediator);
+
+        if (mediator.getSmooksConfig() != null) {
+            smooksTransform.addAttribute(fac.createOMAttribute(
+                    SmooksMediatorFactory.ATR_SMOOKS_CONFIG.getLocalPart(),
+                    nullNS, mediator.getSmooksConfig()));
+        }
+
+        if (parent != null) {
+            parent.addChild(smooksTransform);
+        }
+        return smooksTransform;
+    }
+
+    public String getMediatorClassName() {
+        return SmooksMediator.class.getName();
+    }
+}

Added: 
trunk/esb/java/modules/mediators/smooks/src/main/java/org/wso2/esb/mediators/transform/SmooksMediator.java
==============================================================================
--- (empty file)
+++ 
trunk/esb/java/modules/mediators/smooks/src/main/java/org/wso2/esb/mediators/transform/SmooksMediator.java
  Tue May 13 11:07:39 2008
@@ -0,0 +1,141 @@
+/*
+ * Copyright (c) 2006, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.wso2.esb.mediators.transform;
+
+import org.apache.axiom.om.OMElement;
+import org.apache.axiom.om.impl.builder.StAXOMBuilder;
+import org.apache.synapse.MessageContext;
+import org.apache.synapse.mediators.AbstractMediator;
+import org.apache.synapse.util.PayloadHelper;
+import org.apache.xml.serialize.OutputFormat;
+import org.apache.xml.serialize.XMLSerializer;
+import org.milyn.Smooks;
+import org.w3c.dom.Document;
+
+import javax.xml.stream.XMLStreamException;
+import javax.xml.transform.dom.DOMResult;
+import javax.xml.transform.stream.StreamSource;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+
+/**
+ * Transforms the current message payload using the given Smooks configuration.
+ * The current message context is replaced with the result as XML.
+ */
+public class SmooksMediator extends AbstractMediator {
+
+    /**
+     * Smooks engine
+     */
+    Smooks smooks = null;
+    /**
+     * Smooks configuration file
+     */
+    String smooksConfig = null;
+
+    public boolean mediate(MessageContext synCtx) {
+        boolean traceOn = isTraceOn(synCtx);
+        boolean traceOrDebugOn = isTraceOrDebugOn(traceOn);
+
+        if (traceOrDebugOn) {
+            traceOrDebug(traceOn, "Start : SmooksTransform mediator");
+
+            if (traceOn && trace.isTraceEnabled()) {
+                trace.trace("Message : " + synCtx.getEnvelope());
+            }
+        }
+
+        ByteArrayInputStream byteArrayInputStream = null;
+
+        int payloadType = PayloadHelper.getPayloadType(synCtx);
+        if (payloadType == PayloadHelper.XMLPAYLOADTYPE) {
+            OMElement payload = 
PayloadHelper.getXMLPayload(synCtx.getEnvelope());
+            try {
+                byteArrayInputStream = new ByteArrayInputStream(
+                        payload.toStringWithConsume().getBytes());
+
+            } catch (XMLStreamException e) {
+                handleException("Cannot read XML payload", e, synCtx);
+            }
+
+        } else if (payloadType == PayloadHelper.TEXTPAYLOADTYPE) {
+            String payload = PayloadHelper.getTextPayload(synCtx);
+            byteArrayInputStream = new 
ByteArrayInputStream(payload.getBytes());
+
+        } else {
+            handleException("Payload is not TEXT, XML", synCtx);
+        }
+
+        org.milyn.container.ExecutionContext executionContext = 
smooks.createExecutionContext();
+        DOMResult domResult = new DOMResult();
+        smooks.filter(new StreamSource(byteArrayInputStream), domResult, 
executionContext);
+
+        StAXOMBuilder builder = null;
+        try {
+            ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+            Document doc = (Document) domResult.getNode();
+            OutputFormat format = new OutputFormat(doc);
+            format.setIndenting(true);
+            XMLSerializer serializer = new XMLSerializer(outputStream, format);
+            serializer.serialize(doc);
+
+            ByteArrayInputStream inputStream = new 
ByteArrayInputStream(outputStream.toByteArray());
+            builder = new StAXOMBuilder(inputStream);
+
+        } catch (XMLStreamException e) {
+            handleException("DOM to Axiom error", e, synCtx);
+        } catch (FileNotFoundException e) {
+            handleException("DOM to Axiom error", e, synCtx);
+        } catch (IOException e) {
+            handleException("DOM to Axiom error", e, synCtx);
+        }
+        OMElement transformedElement = builder.getDocumentElement();
+        PayloadHelper.setXMLPayload(synCtx, transformedElement);
+
+        if (traceOrDebugOn) {
+            traceOrDebug(traceOn, "Transform completed");
+
+            if (traceOn && trace.isTraceEnabled()) {
+                trace.trace("Transformed message : " + synCtx.getEnvelope());
+            }
+        }
+
+        if (traceOrDebugOn) {
+            traceOrDebug(traceOn, "End : SmooksTransform mediator");
+        }
+
+        return true;
+    }
+
+    public Smooks getSmooks() {
+        return smooks;
+    }
+
+    public void setSmooks(Smooks smooks) {
+        this.smooks = smooks;
+    }
+
+    public String getSmooksConfig() {
+        return smooksConfig;
+    }
+
+    public void setSmooksConfig(String smooksConfig) {
+        this.smooksConfig = smooksConfig;
+    }
+}

Copied: 
trunk/esb/java/modules/mediators/smooks/src/main/resources/META-INF/services/org.apache.synapse.config.xml.MediatorFactory
 (from r16953, 
/trunk/esb/java/modules/mediators/router/src/main/resources/META-INF/services/org.apache.synapse.config.xml.MediatorFactory)
==============================================================================
--- 
/trunk/esb/java/modules/mediators/router/src/main/resources/META-INF/services/org.apache.synapse.config.xml.MediatorFactory
 (original)
+++ 
trunk/esb/java/modules/mediators/smooks/src/main/resources/META-INF/services/org.apache.synapse.config.xml.MediatorFactory
  Tue May 13 11:07:39 2008
@@ -1 +1 @@
-org.wso2.esb.config.mediator.xml.RouterMediatorFactory
\ No newline at end of file
+org.wso2.esb.config.mediator.xml.SmooksMediatorFactory
\ No newline at end of file

Copied: 
trunk/esb/java/modules/mediators/smooks/src/main/resources/META-INF/services/org.apache.synapse.config.xml.MediatorSerializer
 (from r16953, 
/trunk/esb/java/modules/mediators/router/src/main/resources/META-INF/services/org.apache.synapse.config.xml.MediatorSerializer)
==============================================================================
--- 
/trunk/esb/java/modules/mediators/router/src/main/resources/META-INF/services/org.apache.synapse.config.xml.MediatorSerializer
      (original)
+++ 
trunk/esb/java/modules/mediators/smooks/src/main/resources/META-INF/services/org.apache.synapse.config.xml.MediatorSerializer
       Tue May 13 11:07:39 2008
@@ -1 +1 @@
-org.wso2.esb.config.mediator.xml.RouterMediatorSerializer
\ No newline at end of file
+org.wso2.esb.config.mediator.xml.SmooksMediatorSerializer
\ No newline at end of file

_______________________________________________
Esb-java-dev mailing list
[email protected]
http://wso2.org/cgi-bin/mailman/listinfo/esb-java-dev

Reply via email to