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 2012/05/24 19:16:24 UTC
svn commit: r1342347 - in /openejb/trunk/openejb:
server/openejb-webservices/src/main/java/org/apache/openejb/server/webservices/
tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/helper/rest/
Author: rmannibucau
Date: Thu May 24 17:16:23 2012
New Revision: 1342347
URL: http://svn.apache.org/viewvc?rev=1342347&view=rev
Log:
ability to retreive soap webservices
Added:
openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/helper/rest/Service.java (contents, props changed)
- copied, changed from r1342259, openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/helper/rest/RestService.java
openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/helper/rest/Services.java (contents, props changed)
- copied, changed from r1342259, openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/helper/rest/RestServices.java
openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/helper/rest/SoapService.java
Removed:
openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/helper/rest/RestService.java
openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/helper/rest/RestServices.java
Modified:
openejb/trunk/openejb/server/openejb-webservices/src/main/java/org/apache/openejb/server/webservices/WsService.java
openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/helper/rest/Application.java
openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/helper/rest/WebServiceHelperImpl.java
Modified: openejb/trunk/openejb/server/openejb-webservices/src/main/java/org/apache/openejb/server/webservices/WsService.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/server/openejb-webservices/src/main/java/org/apache/openejb/server/webservices/WsService.java?rev=1342347&r1=1342346&r2=1342347&view=diff
==============================================================================
--- openejb/trunk/openejb/server/openejb-webservices/src/main/java/org/apache/openejb/server/webservices/WsService.java (original)
+++ openejb/trunk/openejb/server/openejb-webservices/src/main/java/org/apache/openejb/server/webservices/WsService.java Thu May 24 17:16:23 2012
@@ -17,6 +17,7 @@
*/
package org.apache.openejb.server.webservices;
+import javax.xml.namespace.QName;
import org.apache.openejb.BeanContext;
import org.apache.openejb.Injection;
import org.apache.openejb.assembler.classic.AppInfo;
@@ -85,6 +86,7 @@ public abstract class WsService implemen
private final Map<String,String> ejbLocations = new TreeMap<String,String>();
private final Map<String,String> ejbAddresses = new TreeMap<String,String>();
private final Map<String,String> servletAddresses = new TreeMap<String,String>();
+ private final Map<String, List<EndpointInfo>> addressesByApplication = new TreeMap<String, List<EndpointInfo>>();
public WsService() {
String format = SystemInstance.get().getOptions().get(WS_ADDRESS_FORMAT, "/{ejbDeploymentId}");
@@ -278,6 +280,7 @@ public abstract class WsService implemen
portAddressRegistry.addPort(portInfo.serviceId, portInfo.wsdlService, portInfo.portId, portInfo.wsdlPort, portInfo.seiInterfaceName, 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()));
}
}
} catch (Throwable e) {
@@ -292,6 +295,14 @@ public abstract class WsService implemen
}
}
+ private List<EndpointInfo> addressesForApp(String appId) {
+ if (!addressesByApplication.containsKey(appId)) {
+ addressesByApplication.put(appId, new ArrayList<EndpointInfo>());
+ }
+ return addressesByApplication.get(appId);
+ }
+
+
public void afterApplicationCreated(WebAppInfo webApp) {
WebContext webContext = containerSystem.getWebContext(webApp.moduleId);
if (webContext == null) return;
@@ -336,6 +347,7 @@ public abstract class WsService implemen
portAddressRegistry.addPort(portInfo.serviceId, portInfo.wsdlService, portInfo.portId, portInfo.wsdlPort, portInfo.seiInterfaceName, 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()));
}
} catch (Throwable e) {
logger.error("Error deploying CXF webservice for servlet " + portInfo.serviceLink, e);
@@ -359,6 +371,7 @@ public abstract class WsService implemen
// remove wsdl addresses from global registry
String address = ejbAddresses.remove(enterpriseBean.ejbDeploymentId);
+ addressesForApp(appInfo.appId).remove(address);
if (address != null) {
portAddressRegistry.removePort(portInfo.serviceId, portInfo.wsdlService, portInfo.portId);
}
@@ -388,6 +401,7 @@ public abstract class WsService implemen
// remove wsdl addresses from global registry
String address = servletAddresses.remove(webApp.moduleId + "." + servlet.servletName);
+ addressesForApp(webApp.moduleId).remove(address);
if (address != null) {
portAddressRegistry.removePort(portInfo.serviceId, portInfo.wsdlService, portInfo.portId);
}
@@ -444,4 +458,24 @@ public abstract class WsService implemen
public void service(Socket socket) throws ServiceException, IOException {
throw new UnsupportedOperationException("CxfService cannot be invoked directly");
}
+
+ public Map<String, List<EndpointInfo>> getAddressesByApplication() {
+ return addressesByApplication;
+ }
+
+ public static class EndpointInfo {
+ public String address;
+ public String portName;
+ public String classname;
+
+ public EndpointInfo(String address, QName portName, String name) {
+ this.address = address;
+ this.classname = name;
+ if (portName != null) {
+ this.portName = portName.toString();
+ } else {
+ this.portName = "null";
+ }
+ }
+ }
}
Modified: openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/helper/rest/Application.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/helper/rest/Application.java?rev=1342347&r1=1342346&r2=1342347&view=diff
==============================================================================
--- openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/helper/rest/Application.java (original)
+++ openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/helper/rest/Application.java Thu May 24 17:16:23 2012
@@ -5,13 +5,13 @@ import java.util.List;
public class Application {
private String name;
- private List<RestService> services = new ArrayList<RestService>();
+ private List<Service> services = new ArrayList<Service>();
- public List<RestService> getServices() {
+ public List<Service> getServices() {
return services;
}
- public void setServices(List<RestService> services) {
+ public void setServices(List<Service> services) {
this.services = services;
}
Copied: openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/helper/rest/Service.java (from r1342259, openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/helper/rest/RestService.java)
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/helper/rest/Service.java?p2=openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/helper/rest/Service.java&p1=openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/helper/rest/RestService.java&r1=1342259&r2=1342347&rev=1342347&view=diff
==============================================================================
--- openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/helper/rest/RestService.java (original)
+++ openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/helper/rest/Service.java Thu May 24 17:16:23 2012
@@ -1,15 +1,15 @@
package org.apache.tomee.webapp.helper.rest;
-public class RestService {
+public class Service {
private String name;
- private String wadl;
+ private String address;
- public RestService(final String name, final String wadl) {
+ public Service(final String name, final String address) {
this.name = name;
- this.wadl = wadl;
+ this.address = address;
}
- public RestService() {
+ public Service() {
// no-op
}
@@ -21,11 +21,11 @@ public class RestService {
this.name = name;
}
- public String getWadl() {
- return wadl;
+ public String getAddress() {
+ return address;
}
- public void setWadl(String wadl) {
- this.wadl = wadl;
+ public void setAddress(String address) {
+ this.address = address;
}
}
Propchange: openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/helper/rest/Service.java
------------------------------------------------------------------------------
svn:executable = *
Copied: openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/helper/rest/Services.java (from r1342259, openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/helper/rest/RestServices.java)
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/helper/rest/Services.java?p2=openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/helper/rest/Services.java&p1=openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/helper/rest/RestServices.java&r1=1342259&r2=1342347&rev=1342347&view=diff
==============================================================================
--- openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/helper/rest/RestServices.java (original)
+++ openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/helper/rest/Services.java Thu May 24 17:16:23 2012
@@ -5,7 +5,7 @@ import java.util.ArrayList;
import java.util.List;
@XmlRootElement
-public class RestServices {
+public class Services {
private List<Application> applications = new ArrayList<Application>();
public List<Application> getApplications() {
@@ -25,6 +25,7 @@ public class RestServices {
final Application app = new Application();
app.setName(name);
+ applications.add(app);
return app;
}
}
Propchange: openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/helper/rest/Services.java
------------------------------------------------------------------------------
svn:executable = *
Added: openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/helper/rest/SoapService.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/helper/rest/SoapService.java?rev=1342347&view=auto
==============================================================================
--- openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/helper/rest/SoapService.java (added)
+++ openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/helper/rest/SoapService.java Thu May 24 17:16:23 2012
@@ -0,0 +1,22 @@
+package org.apache.tomee.webapp.helper.rest;
+
+public class SoapService extends Service {
+ private String port;
+
+ public SoapService(String name, String address, String port) {
+ super(name, address);
+ this.port = port;
+ }
+
+ public SoapService() {
+ // no-op
+ }
+
+ public String getPort() {
+ return port;
+ }
+
+ public void setPort(String port) {
+ this.port = port;
+ }
+}
Modified: openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/helper/rest/WebServiceHelperImpl.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/helper/rest/WebServiceHelperImpl.java?rev=1342347&r1=1342346&r2=1342347&view=diff
==============================================================================
--- openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/helper/rest/WebServiceHelperImpl.java (original)
+++ openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/helper/rest/WebServiceHelperImpl.java Thu May 24 17:16:23 2012
@@ -1,14 +1,13 @@
package org.apache.tomee.webapp.helper.rest;
+import java.util.List;
+import java.util.Map;
import org.apache.openejb.server.ServerService;
import org.apache.openejb.server.ServiceManager;
import org.apache.openejb.server.SimpleServiceManager;
import org.apache.openejb.util.LogCategory;
import org.apache.openejb.util.Logger;
-import java.lang.reflect.Field;
-import java.util.List;
-
public class WebServiceHelperImpl {
public static final Logger LOGGER = Logger.getInstance(LogCategory.OPENEJB_RS, WebServiceHelperImpl.class);
@@ -23,49 +22,95 @@ public class WebServiceHelperImpl {
// we put it here and use reflection.
// a better solution is to add a kind of spi for our webapps
// to be able to add for each overlay new graphic part
- public static RestServices restWebServices() {
- final RestServices restServices = new RestServices();
+ public static Services restWebServices() {
+ final Services restServices = new Services();
+ final ServerService ss = serverService("org.apache.openejb.server.cxf.rs.CxfRSService");
+ if (ss == null) {
+ return restServices;
+ }
+
+ try {
+ final List<Object> services = (List<Object>) ss.getClass().getMethod("getServices").invoke(ss);
+ for (Object rsService : services) {
+ final Accessor accessor = new Accessor(rsService);
+ final String app = (String) accessor.value("webapp");
+ final String address = (String) accessor.value("address");
+ final String origin = (String) accessor.value("origin");
+ restServices.returnOrCreateApplication(app).getServices().add(new Service(origin, address + "?wadl"));
+ }
+ } catch (Exception e) {
+ LOGGER.warning("can't get rest services", e);
+ return restServices;
+ }
+
+ return restServices;
+ }
+
+ public static Services soapWebServices() {
+ final Services soapServices = new Services();
+
+ final ServerService ss = serverService("org.apache.openejb.server.cxf.CxfService");
+ if (ss == null) {
+ return soapServices;
+ }
+
+ try {
+ final Map<String, List<Object>> addressesByApp = (Map) ss.getClass().getMethod("getAddressesByApplication").invoke(ss);
+ for (Map.Entry<String, List<Object>> entry : addressesByApp.entrySet()) {
+ final Application app = soapServices.returnOrCreateApplication(entry.getKey());
+ for (Object soapService : entry.getValue()) {
+ final Accessor accessor = new Accessor(soapService);
+ final String wsdl = (String) accessor.value("address");
+ final String port = (String) accessor.value("portName");
+ final String classname = (String) accessor.value("classname");
+ app.getServices().add(new SoapService(classname, wsdl + "?wsdl",port));
+ }
+ }
+ } catch (Exception e) {
+ LOGGER.warning("can't get soap services", e);
+ return soapServices;
+ }
+
+ return soapServices;
+ }
+
+ private static ServerService serverService(final String clazz) {
final ServiceManager sm = ServiceManager.get();
if (!(sm instanceof SimpleServiceManager)) { // we don't know
LOGGER.warning("the service manager used is not a simple service manager so rest services can't be retrieved");
- return restServices;
+ return null;
}
final SimpleServiceManager ssm = (SimpleServiceManager) sm;
final ServerService[] serverServices = ssm.getDaemons();
if (serverServices == null) {
LOGGER.warning("no service started");
- return restServices;
+ return null;
}
for (ServerService ss : serverServices) {
- if ("org.apache.openejb.server.cxf.rs.CxfRSService".equals(ss.getClass().getName())) {
- try {
- final List<Object> services = (List<Object>) ss.getClass().getMethod("getServices").invoke(ss);
- if (services.isEmpty()) {
- return restServices;
- }
-
- final Class<?> infoClass = services.iterator().next().getClass();
- final Field appNameAccessor = infoClass.getField("webapp");
- final Field addressAccessor = infoClass.getField("address");
- final Field originAccessor = infoClass.getField("origin");
-
- for (Object rsService : services) {
- final String app = (String) appNameAccessor.get(rsService);
- final String address = (String) addressAccessor.get(rsService);
- final String origin = (String) originAccessor.get(rsService);
- restServices.returnOrCreateApplication(app).getServices().add(new RestService(origin, address));
- }
- } catch (Exception e) {
- LOGGER.warning("can't get rest services", e);
- return restServices;
- }
- break;
+ if (clazz.equals(ss.getClass().getName())) {
+ return ss;
}
}
- return restServices;
+ return null;
+ }
+
+ private static class Accessor {
+ private Object o;
+
+ public Accessor(Object o) {
+ this.o = o;
+ }
+
+ public Object value(final String attr) {
+ try {
+ return o.getClass().getField(attr).get(o);
+ } catch (Exception e) {
+ return null;
+ }
+ }
}
}