You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2013/10/03 08:31:05 UTC

svn commit: r1528729 - in /tomee/tomee/trunk/server: openejb-cxf/src/main/java/org/apache/openejb/server/cxf/ openejb-cxf/src/main/java/org/apache/openejb/server/cxf/ejb/ openejb-cxf/src/main/java/org/apache/openejb/server/cxf/pojo/ openejb-cxf/src/tes...

Author: rmannibucau
Date: Thu Oct  3 06:31:05 2013
New Revision: 1528729

URL: http://svn.apache.org/r1528729
Log:
adding wsdl and slurp wsdl in cxf jaxws mbeans

Modified:
    tomee/tomee/trunk/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/CxfService.java
    tomee/tomee/trunk/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/CxfWsContainer.java
    tomee/tomee/trunk/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/ejb/EjbWsContainer.java
    tomee/tomee/trunk/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/pojo/PojoWsContainer.java
    tomee/tomee/trunk/server/openejb-cxf/src/test/java/org/apache/openejb/server/cxf/WsJMXTest.java
    tomee/tomee/trunk/server/openejb-webservices/src/main/java/org/apache/openejb/server/webservices/WsService.java

Modified: tomee/tomee/trunk/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/CxfService.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/CxfService.java?rev=1528729&r1=1528728&r2=1528729&view=diff
==============================================================================
--- tomee/tomee/trunk/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/CxfService.java (original)
+++ tomee/tomee/trunk/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/CxfService.java Thu Oct  3 06:31:05 2013
@@ -49,6 +49,13 @@ public class CxfService extends WsServic
         SaajInterceptor.registerInterceptors();
     }
 
+    @Override
+    protected void setWsdl(final HttpListener listener, final String wsdl) {
+        if (CxfWsContainer.class.isInstance(listener)) {
+            CxfWsContainer.class.cast(listener).setWsldUrl(wsdl);
+        }
+    }
+
     protected HttpListener createEjbWsContainer(URL moduleBaseUrl, PortData port, BeanContext beanContext, ServiceConfiguration config) {
         final Bus bus = CxfUtil.getBus();
 

Modified: tomee/tomee/trunk/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/CxfWsContainer.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/CxfWsContainer.java?rev=1528729&r1=1528728&r2=1528729&view=diff
==============================================================================
--- tomee/tomee/trunk/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/CxfWsContainer.java (original)
+++ tomee/tomee/trunk/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/CxfWsContainer.java Thu Oct  3 06:31:05 2013
@@ -20,13 +20,9 @@ package org.apache.openejb.server.cxf;
 import org.apache.cxf.Bus;
 import org.apache.cxf.transport.http.AbstractHTTPDestination;
 import org.apache.cxf.transport.http.HTTPTransportFactory;
-import org.apache.openejb.api.internal.Internal;
-import org.apache.openejb.api.jmx.Description;
-import org.apache.openejb.api.jmx.MBean;
 import org.apache.openejb.assembler.classic.util.ServiceConfiguration;
 import org.apache.openejb.core.webservices.PortData;
 import org.apache.openejb.monitoring.LocalMBeanServer;
-import org.apache.openejb.monitoring.ObjectNameBuilder;
 import org.apache.openejb.server.cxf.transport.HttpTransportFactory;
 import org.apache.openejb.server.cxf.transport.util.CxfUtil;
 import org.apache.openejb.server.httpd.HttpListener;
@@ -34,7 +30,6 @@ import org.apache.openejb.server.httpd.H
 import org.apache.openejb.server.httpd.HttpResponse;
 
 import javax.management.ObjectName;
-import javax.management.openmbean.TabularData;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -47,7 +42,6 @@ public abstract class CxfWsContainer imp
     protected final ServiceConfiguration serviceConfiguration;
     private ObjectName jmxName;
 
-
     public CxfWsContainer(final Bus bus, final PortData port, final ServiceConfiguration config) {
         this.bus = bus;
         this.port = port;
@@ -72,6 +66,8 @@ public abstract class CxfWsContainer imp
     protected abstract CxfEndpoint createEndpoint();
     protected abstract ObjectName registerMBean();
 
+    protected abstract void setWsldUrl(String wsdl);
+
     public void destroy() {
         unregisterMBean();
 

Modified: tomee/tomee/trunk/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/ejb/EjbWsContainer.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/ejb/EjbWsContainer.java?rev=1528729&r1=1528728&r2=1528729&view=diff
==============================================================================
--- tomee/tomee/trunk/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/ejb/EjbWsContainer.java (original)
+++ tomee/tomee/trunk/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/ejb/EjbWsContainer.java Thu Oct  3 06:31:05 2013
@@ -28,17 +28,21 @@ import org.apache.openejb.assembler.clas
 import org.apache.openejb.core.webservices.HandlerChainData;
 import org.apache.openejb.core.webservices.HandlerData;
 import org.apache.openejb.core.webservices.PortData;
+import org.apache.openejb.loader.IO;
 import org.apache.openejb.monitoring.LocalMBeanServer;
 import org.apache.openejb.monitoring.ObjectNameBuilder;
 import org.apache.openejb.server.cxf.CxfWsContainer;
 
 import javax.management.ObjectName;
 import javax.management.openmbean.TabularData;
+import java.io.IOException;
+import java.net.URL;
 import java.util.ArrayList;
 import java.util.List;
 
 public class EjbWsContainer extends CxfWsContainer {
     private final BeanContext beanContext;
+    private WsServiceMBean mbean;
 
     public EjbWsContainer(Bus bus, PortData port, BeanContext beanContext, ServiceConfiguration config) {
         super(bus, port, config);
@@ -59,11 +63,16 @@ public class EjbWsContainer extends CxfW
                 .set("name", beanContext.getEjbName())
                 .build();
 
-        final WsServiceMBean mbean = new WsServiceMBean(beanContext, port);
+        mbean = new WsServiceMBean(beanContext, port);
         LocalMBeanServer.registerDynamicWrapperSilently(mbean, name);
         return name;
     }
 
+    @Override
+    protected void setWsldUrl(String wsdl) {
+        mbean.wsdl(wsdl);
+    }
+
     @MBean
     @Description("JAX-WS Service information")
     @Internal
@@ -71,6 +80,7 @@ public class EjbWsContainer extends CxfW
 
         private final BeanContext beanContext;
         private final PortData port;
+        private String wsdl;
 
         public WsServiceMBean(final BeanContext beanContext, final PortData port) {
             this.beanContext = beanContext;
@@ -90,9 +100,19 @@ public class EjbWsContainer extends CxfW
         }
 
         @ManagedOperation
-        @Description("")
+        @Description("Slurp the WSDL")
         public String getWsdl() {
-            return null;
+            try {
+                return IO.slurp(new URL(wsdl));
+            } catch (final IOException e) {
+                return e.getMessage();
+            }
+        }
+
+        @ManagedAttribute
+        @Description("The WSDL url")
+        public String getWsdlUrl() {
+            return wsdl;
         }
 
         @ManagedAttribute
@@ -147,5 +167,13 @@ public class EjbWsContainer extends CxfW
                     port.getProperties()
             );
         }
+
+        public void wsdl(final String wsdl) {
+            if (!wsdl.endsWith("?wsdl")) {
+                this.wsdl = wsdl + "?wsdl";
+            } else {
+                this.wsdl = wsdl;
+            }
+        }
     }
 }

Modified: tomee/tomee/trunk/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/pojo/PojoWsContainer.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/pojo/PojoWsContainer.java?rev=1528729&r1=1528728&r2=1528729&view=diff
==============================================================================
--- tomee/tomee/trunk/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/pojo/PojoWsContainer.java (original)
+++ tomee/tomee/trunk/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/pojo/PojoWsContainer.java Thu Oct  3 06:31:05 2013
@@ -27,6 +27,7 @@ import org.apache.openejb.assembler.clas
 import org.apache.openejb.core.webservices.HandlerChainData;
 import org.apache.openejb.core.webservices.HandlerData;
 import org.apache.openejb.core.webservices.PortData;
+import org.apache.openejb.loader.IO;
 import org.apache.openejb.monitoring.LocalMBeanServer;
 import org.apache.openejb.monitoring.ObjectNameBuilder;
 import org.apache.openejb.server.cxf.CxfWsContainer;
@@ -34,6 +35,8 @@ import org.apache.openejb.server.cxf.Cxf
 import javax.management.ObjectName;
 import javax.management.openmbean.TabularData;
 import javax.naming.Context;
+import java.io.IOException;
+import java.net.URL;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
@@ -43,6 +46,7 @@ public class PojoWsContainer extends Cxf
     private final Class target;
     private final Map<String, Object> bindings;
     private final ClassLoader loader;
+    private WsServiceMBean mbean;
 
     public PojoWsContainer(ClassLoader loader, Bus bus, PortData port, Context context, Class target,
                            Map<String, Object> bdgs, ServiceConfiguration configuration) {
@@ -68,11 +72,16 @@ public class PojoWsContainer extends Cxf
                 .set("name", target.getSimpleName())
                 .build();
 
-        final WsServiceMBean mbean = new WsServiceMBean(context, target, port);
+        mbean = new WsServiceMBean(context, target, port);
         LocalMBeanServer.registerDynamicWrapperSilently(mbean, name);
         return name;
     }
 
+    @Override
+    protected void setWsldUrl(final String wsdl) {
+        mbean.wsdl(wsdl);
+    }
+
     @MBean
     @Description("JAX-WS Service information")
     @Internal
@@ -81,6 +90,7 @@ public class PojoWsContainer extends Cxf
         private final Context context;
         private final Class target;
         private final PortData port;
+        private String wsdl;
 
         public WsServiceMBean(final Context context, final Class target, final PortData port) {
             this.context = context;
@@ -89,9 +99,19 @@ public class PojoWsContainer extends Cxf
         }
 
         @ManagedOperation
-        @Description("")
+        @Description("Slurp the WSDL")
         public String getWsdl() {
-            return null;
+            try {
+                return IO.slurp(new URL(wsdl));
+            } catch (final IOException e) {
+                return e.getMessage();
+            }
+        }
+
+        @ManagedAttribute
+        @Description("The WSDL url")
+        public String getWsdlUrl() {
+            return wsdl;
         }
 
         @ManagedAttribute
@@ -146,5 +166,13 @@ public class PojoWsContainer extends Cxf
                     port.getProperties()
             );
         }
+
+        public void wsdl(final String wsdl) {
+            if (!wsdl.endsWith("?wsdl")) {
+                this.wsdl = wsdl + "?wsdl";
+            } else {
+                this.wsdl = wsdl;
+            }
+        }
     }
 }

Modified: tomee/tomee/trunk/server/openejb-cxf/src/test/java/org/apache/openejb/server/cxf/WsJMXTest.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/server/openejb-cxf/src/test/java/org/apache/openejb/server/cxf/WsJMXTest.java?rev=1528729&r1=1528728&r2=1528729&view=diff
==============================================================================
--- tomee/tomee/trunk/server/openejb-cxf/src/test/java/org/apache/openejb/server/cxf/WsJMXTest.java (original)
+++ tomee/tomee/trunk/server/openejb-cxf/src/test/java/org/apache/openejb/server/cxf/WsJMXTest.java Thu Oct  3 06:31:05 2013
@@ -24,6 +24,7 @@ import org.apache.openejb.monitoring.Loc
 import org.apache.openejb.testing.Classes;
 import org.apache.openejb.testing.EnableServices;
 import org.apache.openejb.testing.Module;
+import org.hamcrest.CoreMatchers;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.junit.Test;
@@ -37,6 +38,7 @@ import javax.management.MalformedObjectN
 import javax.management.ObjectName;
 
 import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertThat;
 import static org.junit.Assert.assertTrue;
 
 @EnableServices("jax-ws")
@@ -73,6 +75,8 @@ public class WsJMXTest {
     public void checkServiceWasDeployed() throws Exception {
         assertTrue(LocalMBeanServer.get().isRegistered(names[0]));
         assertTrue(LocalMBeanServer.get().isRegistered(names[1]));
+        assertThat(String.class.cast(LocalMBeanServer.get().invoke(names[0], "getWsdl", new Object[0], new String[0])), CoreMatchers.containsString("<soap:address location=\"http://127.0.0.1:4204/app/AnEjbEndpoint\"/>"));
+        assertThat(String.class.cast(LocalMBeanServer.get().invoke(names[1], "getWsdl", new Object[0], new String[0])), CoreMatchers.containsString("<soap:address location=\"http://127.0.0.1:4204/app/AnPojoEndpointService\"/>"));
     }
 
     @AfterClass

Modified: tomee/tomee/trunk/server/openejb-webservices/src/main/java/org/apache/openejb/server/webservices/WsService.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/server/openejb-webservices/src/main/java/org/apache/openejb/server/webservices/WsService.java?rev=1528729&r1=1528728&r2=1528729&view=diff
==============================================================================
--- tomee/tomee/trunk/server/openejb-webservices/src/main/java/org/apache/openejb/server/webservices/WsService.java (original)
+++ tomee/tomee/trunk/server/openejb-webservices/src/main/java/org/apache/openejb/server/webservices/WsService.java Thu Oct  3 06:31:05 2013
@@ -310,6 +310,7 @@ public abstract class WsService implemen
                             if (address != null) {
                                 // register wsdl location
                                 portAddressRegistry.addPort(portInfo.serviceId, portInfo.wsdlService, portInfo.portId, portInfo.wsdlPort, portInfo.seiInterfaceName, address);
+                                setWsdl(container, address);
                                 logger.info("Webservice(wsdl=" + address + ", qname=" + port.getWsdlService() + ") --> Ejb(id=" + portInfo.portId + ")");
                                 ejbAddresses.put(bean.ejbDeploymentId, address);
                                 addressesForApp(appInfo.appId).add(new EndpointInfo(address, port.getWsdlService(), beanContext.getBeanClass().getName()));
@@ -330,6 +331,10 @@ public abstract class WsService implemen
         } // else called because of ear case where new ejbs are deployed in webapps
     }
 
+    protected void setWsdl(final HttpListener listener, final String wsdl) {
+        // no-op
+    }
+
     private List<EndpointInfo> addressesForApp(final String appId) {
         if (!addressesByApplication.containsKey(appId)) {
             addressesByApplication.put(appId, new ArrayList<EndpointInfo>());
@@ -405,6 +410,7 @@ public abstract class WsService implemen
 
                     // add address to global registry
                     portAddressRegistry.addPort(portInfo.serviceId, portInfo.wsdlService, portInfo.portId, portInfo.wsdlPort, portInfo.seiInterfaceName, address);
+                    setWsdl(container, address);
                     logger.info("Webservice(wsdl=" + address + ", qname=" + port.getWsdlService() + ") --> Pojo(id=" + portInfo.portId + ")");
                     servletAddresses.put(webApp.moduleId + "." + servlet.servletName, address);
                     addressesForApp(webApp.moduleId).add(new EndpointInfo(address, port.getWsdlService(), target.getName()));