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()));