You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicemix.apache.org by gn...@apache.org on 2008/10/08 10:49:54 UTC

svn commit: r702756 - in /servicemix/components/engines/servicemix-bean/trunk/src: main/java/org/apache/servicemix/bean/ main/java/org/apache/servicemix/bean/pojos/ test/java/org/apache/servicemix/bean/

Author: gnodet
Date: Wed Oct  8 01:49:53 2008
New Revision: 702756

URL: http://svn.apache.org/viewvc?rev=702756&view=rev
Log:
SM-1618: Given that the lwcontainer is not ported to smx4, we need a replacement for the log component which could be done inside servicemix-bean

Added:
    servicemix/components/engines/servicemix-bean/trunk/src/main/java/org/apache/servicemix/bean/pojos/
    servicemix/components/engines/servicemix-bean/trunk/src/main/java/org/apache/servicemix/bean/pojos/LoggingPojo.java
    servicemix/components/engines/servicemix-bean/trunk/src/test/java/org/apache/servicemix/bean/LoggingPojoTest.java
Modified:
    servicemix/components/engines/servicemix-bean/trunk/src/main/java/org/apache/servicemix/bean/BeanEndpoint.java

Modified: servicemix/components/engines/servicemix-bean/trunk/src/main/java/org/apache/servicemix/bean/BeanEndpoint.java
URL: http://svn.apache.org/viewvc/servicemix/components/engines/servicemix-bean/trunk/src/main/java/org/apache/servicemix/bean/BeanEndpoint.java?rev=702756&r1=702755&r2=702756&view=diff
==============================================================================
--- servicemix/components/engines/servicemix-bean/trunk/src/main/java/org/apache/servicemix/bean/BeanEndpoint.java (original)
+++ servicemix/components/engines/servicemix-bean/trunk/src/main/java/org/apache/servicemix/bean/BeanEndpoint.java Wed Oct  8 01:49:53 2008
@@ -306,12 +306,12 @@
     }
 
     protected Object createBean() throws ClassNotFoundException, InstantiationException, IllegalAccessException {
-        if (beanName == null && beanType == null) {
-            throw new IllegalArgumentException("Property 'beanName' has not been set!");
-        }
         if (beanType == null && beanClassName != null) {
             beanType = Class.forName(beanClassName, true, getServiceUnit().getConfigurationClassLoader());
         }
+        if (beanName == null && beanType == null) {
+            throw new IllegalArgumentException("Property 'bean', 'beanName' or 'beanClassName' has not been set!");
+        }
         if (beanType != null) {
             return beanType.newInstance();
         } else if (beanName == null) {

Added: servicemix/components/engines/servicemix-bean/trunk/src/main/java/org/apache/servicemix/bean/pojos/LoggingPojo.java
URL: http://svn.apache.org/viewvc/servicemix/components/engines/servicemix-bean/trunk/src/main/java/org/apache/servicemix/bean/pojos/LoggingPojo.java?rev=702756&view=auto
==============================================================================
--- servicemix/components/engines/servicemix-bean/trunk/src/main/java/org/apache/servicemix/bean/pojos/LoggingPojo.java (added)
+++ servicemix/components/engines/servicemix-bean/trunk/src/main/java/org/apache/servicemix/bean/pojos/LoggingPojo.java Wed Oct  8 01:49:53 2008
@@ -0,0 +1,181 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.apache.servicemix.bean.pojos;
+
+import java.util.Set;
+
+import javax.jbi.messaging.MessageExchange;
+import javax.jbi.messaging.MessagingException;
+import javax.jbi.messaging.NormalizedMessage;
+import javax.jbi.messaging.InOut;
+import javax.jbi.messaging.ExchangeStatus;
+import javax.xml.transform.TransformerException;
+import javax.xml.transform.Source;
+import javax.xml.transform.dom.DOMSource;
+
+import org.w3c.dom.Node;
+
+import org.apache.servicemix.bean.support.BeanSupport;
+import org.apache.servicemix.jbi.listener.MessageExchangeListener;
+import org.apache.servicemix.jbi.jaxp.SourceTransformer;
+import org.apache.servicemix.common.util.MessageUtil;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * A simple tracing component which can be placed inside a pipeline
+ * to trace the message exchange though the component.
+ * If an InOut exchange is received by this component, it will log the
+ * input message and copy it to the output message.
+ *
+ * @version $Revision: 648504 $
+ */
+public class LoggingPojo extends BeanSupport implements MessageExchangeListener {
+
+    private Log log = LogFactory.getLog(LoggingPojo.class);
+
+    private SourceTransformer sourceTransformer = new SourceTransformer();
+
+    private int maxMsgDisplaySize = 1500;
+
+    public Log getLog() {
+        return log;
+    }
+
+    public void setLog(Log log) {
+        this.log = log;
+    }
+
+    public SourceTransformer getSourceTransformer() {
+        return sourceTransformer;
+    }
+
+    public void setSourceTransformer(SourceTransformer sourceTransformer) {
+        this.sourceTransformer = sourceTransformer;
+    }
+
+    public int getMaxMsgDisplaySize() {
+        return maxMsgDisplaySize;
+    }
+
+    public void setMaxMsgDisplaySize(int maxMsgDisplaySize) {
+        this.maxMsgDisplaySize = maxMsgDisplaySize;
+    }
+
+    /**
+     * Intercepts the {@link MessageExchange} to output the message and its
+     * properties for debugging purposes.
+     *
+     * @param exchange A JBI {@link MessageExchange} between two endpoints
+     */
+    public void onMessageExchange(MessageExchange exchange) throws MessagingException {
+        if (exchange.getStatus() == ExchangeStatus.ACTIVE) {
+            // lets dump the incoming message
+            NormalizedMessage message = exchange.getMessage("in");
+            StringBuffer sb = new StringBuffer();
+            sb.append("[\n");
+            sb.append("  id: ").append(exchange.getExchangeId()).append('\n');
+            sb.append("  mep: ").append(exchange.getPattern()).append('\n');
+            sb.append("  status: ").append(exchange.getStatus()).append('\n');
+            sb.append("  role: ").append(exchange.getRole() == MessageExchange.Role.CONSUMER ? "consumer" : "provider").append('\n');
+            if (exchange.getInterfaceName() != null) {
+                sb.append("  interface: ").append(exchange.getInterfaceName()).append('\n');
+            }
+            if (exchange.getService() != null) {
+                sb.append("  service: ").append(exchange.getService()).append('\n');
+            }
+            if (exchange.getEndpoint() != null) {
+                sb.append("  endpoint: ").append(exchange.getEndpoint().getEndpointName()).append('\n');
+            }
+            if (exchange.getOperation() != null) {
+                sb.append("  operation: ").append(exchange.getOperation()).append('\n');
+            }
+            if (exchange.getPropertyNames().size() > 0) {
+                sb.append("  properties: [").append('\n');
+                for (String key : (Set<String>) exchange.getPropertyNames()) {
+                    sb.append("      ").append(key).append(" = ");
+                    Object contents = exchange.getProperty(key);
+                    if (contents instanceof Source) {
+                        try {
+                            contents = sourceTransformer.toString((Source) contents);
+                        } catch (Exception e) { }
+                    }
+                    sb.append(contents);
+                    sb.append('\n');
+                }
+                sb.append("  ]").append('\n');
+            }
+            display(exchange, "in", sb);
+            log.info("Exchange received " + sb.toString());
+            if (exchange instanceof InOut) {
+                MessageUtil.transferInToOut(exchange, exchange);
+                send(exchange);
+            } else {
+                done(exchange);
+            }
+        }
+    }
+
+    private void display(MessageExchange exchange, String msg, StringBuffer sb) {
+        NormalizedMessage message = exchange.getMessage(msg);
+        if (message != null) {
+            sb.append("  ").append(msg).append(": [").append('\n');
+            sb.append("    content: ");
+            try {
+                if (message.getContent() != null) {
+                    Node node = sourceTransformer.toDOMNode(message.getContent());
+                    message.setContent(new DOMSource(node));
+                    String str = sourceTransformer.toString(node);
+                    if (str.length() > maxMsgDisplaySize) {
+                        sb.append(str.substring(0, maxMsgDisplaySize)).append("...");
+                    } else {
+                        sb.append(str);
+                    }
+                } else {
+                    sb.append("null");
+                }
+            } catch (Exception e) {
+                sb.append("Unable to display: ").append(e);
+            }
+            sb.append('\n');
+            if (message.getAttachmentNames().size() > 0) {
+                sb.append("    attachments: [").append('\n');
+                for (String key : (Set<String>) message.getAttachmentNames()) {
+                    sb.append("      ").append(key).append(" = ").append(message.getAttachment(key)).append('\n');
+                }
+                sb.append("    ]").append('\n');
+            }
+            if (message.getPropertyNames().size() > 0) {
+                sb.append("    properties: [").append('\n');
+                for (String key : (Set<String>) message.getPropertyNames()) {
+                    sb.append("      ").append(key).append(" = ");
+                    Object contents = message.getProperty(key);
+                    if (contents instanceof Source) {
+                        try {
+                            contents = sourceTransformer.toString((Source) contents);
+                        } catch (Exception e) { }
+                    }
+                    sb.append(contents);
+                    sb.append('\n');
+                }
+                sb.append("    ]").append('\n');
+            }
+            sb.append("  ]").append('\n');
+        }
+    }
+
+}

Added: servicemix/components/engines/servicemix-bean/trunk/src/test/java/org/apache/servicemix/bean/LoggingPojoTest.java
URL: http://svn.apache.org/viewvc/servicemix/components/engines/servicemix-bean/trunk/src/test/java/org/apache/servicemix/bean/LoggingPojoTest.java?rev=702756&view=auto
==============================================================================
--- servicemix/components/engines/servicemix-bean/trunk/src/test/java/org/apache/servicemix/bean/LoggingPojoTest.java (added)
+++ servicemix/components/engines/servicemix-bean/trunk/src/test/java/org/apache/servicemix/bean/LoggingPojoTest.java Wed Oct  8 01:49:53 2008
@@ -0,0 +1,73 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.apache.servicemix.bean;
+
+import javax.xml.namespace.QName;
+import javax.jbi.messaging.InOnly;
+import javax.jbi.messaging.InOut;
+
+import org.apache.servicemix.jbi.container.JBIContainer;
+import org.apache.servicemix.jbi.jaxp.StringSource;
+import org.apache.servicemix.bean.pojos.LoggingPojo;
+import org.apache.servicemix.client.ServiceMixClient;
+import org.apache.servicemix.client.ServiceMixClientFacade;
+import junit.framework.TestCase;
+
+public class LoggingPojoTest extends TestCase {
+
+    protected JBIContainer container;
+    protected BeanComponent component;
+
+    protected void setUp() throws Exception {
+        container = new JBIContainer();
+        container.setEmbedded(true);
+        container.init();
+
+        component = new BeanComponent();
+        BeanEndpoint loggingEndpoint = new BeanEndpoint();
+        loggingEndpoint.setBeanClassName(LoggingPojo.class.getName());
+        loggingEndpoint.setService(new QName("logging"));
+        loggingEndpoint.setEndpoint("endpoint");
+        component.addEndpoint(loggingEndpoint);
+        container.activateComponent(component, "servicemix-bean");
+
+        container.start();
+    }
+
+    protected void tearDown() throws Exception {
+        container.shutDown();
+    }
+
+    public void testInOnly() throws Exception {
+        ServiceMixClient client = new ServiceMixClientFacade(component.getComponentContext());
+        InOnly exchange = client.createInOnlyExchange();
+        exchange.setService(new QName("logging"));
+        exchange.getInMessage().setContent(new StringSource("<hello/>"));
+        exchange.getInMessage().setProperty("key", "value");
+        client.sendSync(exchange);
+    }
+
+    public void testInOut() throws Exception {
+        ServiceMixClient client = new ServiceMixClientFacade(component.getComponentContext());
+        InOut exchange = client.createInOutExchange();
+        exchange.setService(new QName("logging"));
+        exchange.getInMessage().setContent(new StringSource("<hello/>"));
+        exchange.getInMessage().setProperty("key", "value");
+        client.sendSync(exchange);
+        client.done(exchange);
+    }
+}