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;
+
+/**
+ * <smooks config="string"/>
+ */
+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;
+
+/**
+ * <smooks config="string"/>
+ */
+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