[jboss-svn-commits] JBL Code SVN: r20904 - in labs/jbossesb/workspace/jimma/product: rosetta/src/org/jboss/soa/esb/listeners/config and 2 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Fri Jul 4 09:57:33 EDT 2008


Author: jim.ma
Date: 2008-07-04 09:57:33 -0400 (Fri, 04 Jul 2008)
New Revision: 20904

Added:
   labs/jbossesb/workspace/jimma/product/rosetta/src/org/jboss/internal/soa/esb/webservice/ESBServiceContractPublisher.java
Modified:
   labs/jbossesb/workspace/jimma/product/rosetta/src/org/jboss/internal/soa/esb/webservice/ESBContractGenerator.java
   labs/jbossesb/workspace/jimma/product/rosetta/src/org/jboss/soa/esb/listeners/config/ServicePublisher.java
   labs/jbossesb/workspace/jimma/product/rosetta/tests/src/org/jboss/internal/soa/esb/webservice/fault.xsd
   labs/jbossesb/workspace/jimma/product/tools/console/contract-web/src/main/webapp/index.jsp
Log:
* Add service publisher for published ESB Service 
* Generate mutiple wsdl faults 


Modified: labs/jbossesb/workspace/jimma/product/rosetta/src/org/jboss/internal/soa/esb/webservice/ESBContractGenerator.java
===================================================================
--- labs/jbossesb/workspace/jimma/product/rosetta/src/org/jboss/internal/soa/esb/webservice/ESBContractGenerator.java	2008-07-04 10:55:41 UTC (rev 20903)
+++ labs/jbossesb/workspace/jimma/product/rosetta/src/org/jboss/internal/soa/esb/webservice/ESBContractGenerator.java	2008-07-04 13:57:33 UTC (rev 20904)
@@ -23,6 +23,9 @@
 import java.security.AccessController;
 import java.security.PrivilegedActionException;
 import java.security.PrivilegedExceptionAction;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
 
 import javax.wsdl.Binding;
 import javax.wsdl.BindingFault;
@@ -49,6 +52,7 @@
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
 
 import com.ibm.wsdl.extensions.schema.SchemaImpl;
 import com.ibm.wsdl.extensions.soap.SOAPAddressImpl;
@@ -57,13 +61,15 @@
 import com.ibm.wsdl.extensions.soap.SOAPFaultImpl;
 
 public class ESBContractGenerator {
-	private static final QName XSD_QN = new QName("http://www.w3.org/2001/XMLSchema", "schema");
-	private static WSDLFactory wsdlFactory ;
- 
-	public static String generateWSDL(final Service serviceConfig, final ESBServiceEndpointInfo serviceInfo)
+	private static final QName XSD_QN = new QName(
+			"http://www.w3.org/2001/XMLSchema", "schema");
+	private static WSDLFactory wsdlFactory;
+
+	public static String generateWSDL(final Service serviceConfig,
+			final ESBServiceEndpointInfo serviceInfo)
 			throws ConfigurationException {
-		final Definition def = getWSDLFactory().newDefinition() ;
-		final String namespace = serviceInfo.getNamespace() ;
+		final Definition def = getWSDLFactory().newDefinition();
+		final String namespace = serviceInfo.getNamespace();
 		def.setTargetNamespace(namespace);
 		def.addNamespace("tns", namespace);
 		def.addNamespace("soap", "http://schemas.xmlsoap.org/wsdl/soap/");
@@ -73,68 +79,81 @@
 
 		Message reqMessage = null;
 		Message resMessage = null;
-		Message faultMessage = null;
+		List<Message> faultMessages = null;
 
 		String inXsd = serviceConfig.getActions().getInXsd();
 		String outXsd = serviceConfig.getActions().getOutXsd();
 		String faultXsd = serviceConfig.getActions().getFaultXsd();
 
-		int nsSuffixCounter = 0 ;
+		int nsSuffixCounter = 0;
 		if (inXsd != null) {
 			try {
-				Document doc = YADOMUtil.parseStream(ClassUtil
-						.getResourceAsStream(inXsd, ESBContractGenerator.class),
-						false, false);
+				Document doc = YADOMUtil.parseStream(
+						ClassUtil.getResourceAsStream(inXsd,
+								ESBContractGenerator.class), false, false);
 				if (doc != null) {
 					reqMessage = addMessage(def, doc.getDocumentElement(),
-							serviceInfo.getRequestName(), "in", ++nsSuffixCounter);
+							serviceInfo.getRequestName(), "in",
+							++nsSuffixCounter);
 				}
 			} catch (Exception e) {
-				throw new ConfigurationException("File defined in inXsd attribute '" + serviceConfig.getActions().getInXsd() + "' not found in classpath.", e);
-			} 
+				throw new ConfigurationException(
+						"File defined in inXsd attribute '"
+								+ serviceConfig.getActions().getInXsd()
+								+ "' not found in classpath.", e);
+			}
 		}
 
 		if (outXsd != null) {
 			try {
-				Document doc = YADOMUtil.parseStream(ClassUtil
-						.getResourceAsStream(outXsd, ESBContractGenerator.class),
-						false, false);
+				Document doc = YADOMUtil.parseStream(
+						ClassUtil.getResourceAsStream(outXsd,
+								ESBContractGenerator.class), false, false);
 				if (doc != null) {
 					resMessage = addMessage(def, doc.getDocumentElement(),
-							serviceInfo.getResponseName(), "out", ++nsSuffixCounter);
+							serviceInfo.getResponseName(), "out",
+							++nsSuffixCounter);
 				}
 			} catch (Exception e) {
-				throw new ConfigurationException("File defined in outXsd attribute '" + serviceConfig.getActions().getOutXsd() + "' not found in classpath.", e);
-			} 
+				throw new ConfigurationException(
+						"File defined in outXsd attribute '"
+								+ serviceConfig.getActions().getOutXsd()
+								+ "' not found in classpath.", e);
+			}
 
 		}
 
 		if (faultXsd != null) {
-			// KEV
-			// Shouldn't there be more faults specified here?
 			try {
 				Document doc = YADOMUtil.parseStream(ClassUtil
-						.getResourceAsStream(faultXsd, ESBContractGenerator.class),
-						false, false);
+						.getResourceAsStream(faultXsd,
+								ESBContractGenerator.class), false, false);
 				if (doc != null) {
-					faultMessage = addMessage(def, doc.getDocumentElement(),
-							serviceInfo.getFaultName(), "fault", ++nsSuffixCounter);
+					faultMessages = addFaultMessage(def, doc
+							.getDocumentElement(), serviceInfo.getFaultName(),
+							"fault", ++nsSuffixCounter);
 				}
 			} catch (Exception e) {
-				throw new ConfigurationException("File defined in faultXsd attribute '" + serviceConfig.getActions().getFaultXsd() + "' not found in classpath.", e);
-			} 
+				throw new ConfigurationException(
+						"File defined in faultXsd attribute '"
+								+ serviceConfig.getActions().getFaultXsd()
+								+ "' not found in classpath.", e);
+			}
 
 		}
 
 		PortType portType = addPortType(def, serviceInfo, reqMessage,
-			resMessage, faultMessage);
+				resMessage, faultMessages);
+
 		Binding binding = addBinding(def, serviceInfo, portType);
 		addService(def, serviceInfo, binding);
 		StringWriter sw = new java.io.StringWriter();
 		try {
 			getWSDLFactory().newWSDLWriter().writeWSDL(def, sw);
 		} catch (WSDLException e) {
-			new ConfigurationException("Failed to generate wsdl for service:" + serviceConfig.getCategory() + "/" + serviceConfig.getName() , e);
+			new ConfigurationException("Failed to generate wsdl for service:"
+					+ serviceConfig.getCategory() + "/"
+					+ serviceConfig.getName(), e);
 		}
 		return sw.toString();
 	}
@@ -146,7 +165,8 @@
 		types.addExtensibilityElement(schemaImpl);
 	}
 
-	private static Message addMessage(Definition def, Element element, String msgName, String partName, int nsSuffixCounter) {
+	private static Message addMessage(Definition def, Element element,
+			String msgName, String partName, int nsSuffixCounter) {
 		String schemaNs = YADOMUtil
 				.getAttribute(element, "targetNamespace", "");
 		addSchema(def.getTypes(), element);
@@ -167,11 +187,43 @@
 		return msg;
 	}
 
-	private static PortType addPortType(Definition def, final ESBServiceEndpointInfo serviceInfo,
-			Message inMessage, Message outMessage, Message faultMessage) {
+	private static List<Message> addFaultMessage(Definition def,
+			Element element, String msgName, String partName,
+			int nsSuffixCounter) {
+		List<Message> faultMessages = new ArrayList<Message>();
+		String schemaNs = YADOMUtil
+				.getAttribute(element, "targetNamespace", "");
+		addSchema(def.getTypes(), element);
+		if (def.getNamespace(schemaNs) == null) {
+			def.addNamespace("ns" + nsSuffixCounter, schemaNs);
+		}
+		// add request message
+		NodeList nodes = YADOMUtil.getNodeList(element, "/schema/element");
+		for (int i = 0; i < nodes.getLength(); i++) {
+			final int nameIndex = i + 1;
+			Node node = nodes.item(0);
+			Message msg = def.createMessage();
+			msg.setQName(new QName(def.getTargetNamespace(), msgName
+					+ nameIndex));
+			msg.setUndefined(false);
+			Part part = def.createPart();
+			part.setName(partName + nameIndex);
+			part.setElementName(new QName(schemaNs, YADOMUtil.getAttribute(
+					(Element) node, "name", "")));
+			msg.addPart(part);
+			def.addMessage(msg);
+			faultMessages.add(msg);
+		}
+		return faultMessages;
+	}
+
+	private static PortType addPortType(Definition def,
+			final ESBServiceEndpointInfo serviceInfo, Message inMessage,
+			Message outMessage, List<Message> faultMessages) {
 		// add port type
 		PortType portType = def.createPortType();
-		portType.setQName(new QName(def.getTargetNamespace(), serviceInfo.getPortName())) ;
+		portType.setQName(new QName(def.getTargetNamespace(), serviceInfo
+				.getPortName()));
 		Operation op = def.createOperation();
 		op.setUndefined(false);
 		op.setName(serviceInfo.getOperationName());
@@ -188,10 +240,10 @@
 			op.setOutput(out);
 		}
 
-		if (faultMessage != null) {
+		for (Message message : faultMessages) {
 			Fault fault = def.createFault();
-			fault.setMessage(faultMessage);
-			fault.setName(faultMessage.getQName().getLocalPart());
+			fault.setMessage(message);
+			fault.setName(message.getQName().getLocalPart());
 			op.addFault(fault);
 		}
 		portType.addOperation(op);
@@ -200,12 +252,14 @@
 		return portType;
 	}
 
-	private static Binding addBinding(Definition def, final ESBServiceEndpointInfo serviceInfo, PortType portType) {
+	private static Binding addBinding(Definition def,
+			final ESBServiceEndpointInfo serviceInfo, PortType portType) {
 		// add binding
 		Binding binding = def.createBinding();
 		binding.setUndefined(false);
 		binding.setPortType(portType);
-		binding.setQName(new QName(def.getTargetNamespace(), serviceInfo.getBindingName())) ;
+		binding.setQName(new QName(def.getTargetNamespace(), serviceInfo
+				.getBindingName()));
 		SOAPBindingImpl soapBinding = new SOAPBindingImpl();
 		soapBinding.setStyle("document");
 		soapBinding.setTransportURI("http://schemas.xmlsoap.org/soap/http");
@@ -230,15 +284,17 @@
 			soapBody.setUse("literal");
 			boutput.addExtensibilityElement(soapBody);
 		}
-		if (op.getFaults().size() != 0) {
+		Iterator iterator = op.getFaults().values().iterator();
+		while (iterator.hasNext()) {
+			Fault fault = (Fault) iterator.next();
 			BindingFault bfault = def.createBindingFault();
-			Fault fault = (Fault) op.getFaults().values().iterator().next();
 			bfault.setName(fault.getName());
 			bop.addBindingFault(bfault);
 			SOAPFaultImpl soapFault = new SOAPFaultImpl();
 			soapFault.setName(fault.getName());
 			soapFault.setUse("literal");
-			bfault.addExtensibilityElement(soapFault);			
+			bfault.addExtensibilityElement(soapFault);
+
 		}
 		binding.addBindingOperation(bop);
 		def.addBinding(binding);
@@ -246,39 +302,39 @@
 
 	}
 
-	private static void addService(Definition def, final ESBServiceEndpointInfo serviceInfo, Binding binding) {
+	private static void addService(Definition def,
+			final ESBServiceEndpointInfo serviceInfo, Binding binding) {
 		// create service
 		javax.wsdl.Service service = def.createService();
-		service.setQName(new QName(def.getTargetNamespace(), serviceInfo.getServiceName()));
+		service.setQName(new QName(def.getTargetNamespace(), serviceInfo
+				.getServiceName()));
 		javax.wsdl.Port port = def.createPort();
 		port.setBinding(binding);
 		port.setName(serviceInfo.getPortName());
 		SOAPAddressImpl soapAddress = new SOAPAddressImpl();
-		soapAddress.setLocationURI("http://change_this_URI/"+serviceInfo.getServletPath());
+		soapAddress.setLocationURI("http://change_this_URI/"
+				+ serviceInfo.getServletPath());
 		port.addExtensibilityElement(soapAddress);
 		service.addPort(port);
 		def.addService(service);
 	}
-	
+
 	private synchronized static WSDLFactory getWSDLFactory()
-	    throws ConfigurationException
-	{
-	    if (wsdlFactory == null)
-	    {
-	        try
-	        {
-	            wsdlFactory = AccessController.doPrivileged(new PrivilegedExceptionAction<WSDLFactory>() {
-	                public WSDLFactory run() throws WSDLException
-	                {
-	                    return WSDLFactory.newInstance();
-	                }
-	            }) ;
-	        }
-	        catch (final PrivilegedActionException pae)
-	        {
-	            throw new ConfigurationException("Failed to instantiate the WSDL factory", pae.getCause()) ;
-	        }
-	    }
-	    return wsdlFactory ;
+			throws ConfigurationException {
+		if (wsdlFactory == null) {
+			try {
+				wsdlFactory = AccessController
+						.doPrivileged(new PrivilegedExceptionAction<WSDLFactory>() {
+							public WSDLFactory run() throws WSDLException {
+								return WSDLFactory.newInstance();
+							}
+						});
+			} catch (final PrivilegedActionException pae) {
+				throw new ConfigurationException(
+						"Failed to instantiate the WSDL factory", pae
+								.getCause());
+			}
+		}
+		return wsdlFactory;
 	}
 }

Added: labs/jbossesb/workspace/jimma/product/rosetta/src/org/jboss/internal/soa/esb/webservice/ESBServiceContractPublisher.java
===================================================================
--- labs/jbossesb/workspace/jimma/product/rosetta/src/org/jboss/internal/soa/esb/webservice/ESBServiceContractPublisher.java	                        (rev 0)
+++ labs/jbossesb/workspace/jimma/product/rosetta/src/org/jboss/internal/soa/esb/webservice/ESBServiceContractPublisher.java	2008-07-04 13:57:33 UTC (rev 20904)
@@ -0,0 +1,49 @@
+package org.jboss.internal.soa.esb.webservice;
+
+import java.util.Set;
+
+import javax.management.ObjectName;
+
+import org.jboss.internal.soa.esb.publish.ContractInfo;
+import org.jboss.internal.soa.esb.publish.ContractPublisher;
+import org.jboss.soa.esb.addressing.EPR;
+import org.jboss.wsf.spi.SPIProvider;
+import org.jboss.wsf.spi.SPIProviderResolver;
+import org.jboss.wsf.spi.deployment.Endpoint;
+import org.jboss.wsf.spi.management.EndpointRegistry;
+import org.jboss.wsf.spi.management.EndpointRegistryFactory;
+
+
+
+public class ESBServiceContractPublisher implements ContractPublisher {
+	String endpointName;
+	public ESBServiceContractPublisher(String jaxwsEndpoint) {
+		endpointName = jaxwsEndpoint;
+	}
+	
+	public ContractInfo getContractInfo(EPR epr) {
+		return null;
+	}
+
+	public String getEndpointAddress() {
+
+		SPIProvider spiProv = SPIProviderResolver.getInstance().getProvider();
+		EndpointRegistryFactory factory = spiProv
+				.getSPI(EndpointRegistryFactory.class);
+		EndpointRegistry registry = factory.getEndpointRegistry();
+		Set<ObjectName> objectNames = registry.getEndpoints();
+
+		for (ObjectName objectName : objectNames) {
+			String endpoint = objectName
+					.getKeyProperty(Endpoint.SEPID_PROPERTY_ENDPOINT);
+
+			if (endpoint != null && endpoint.equals(endpointName)) {
+				Endpoint ep = registry.getEndpoint(objectName);
+				return ep.getAddress();
+			}
+		}
+
+		return null;
+	}
+
+}

Modified: labs/jbossesb/workspace/jimma/product/rosetta/src/org/jboss/soa/esb/listeners/config/ServicePublisher.java
===================================================================
--- labs/jbossesb/workspace/jimma/product/rosetta/src/org/jboss/soa/esb/listeners/config/ServicePublisher.java	2008-07-04 10:55:41 UTC (rev 20903)
+++ labs/jbossesb/workspace/jimma/product/rosetta/src/org/jboss/soa/esb/listeners/config/ServicePublisher.java	2008-07-04 13:57:33 UTC (rev 20904)
@@ -10,6 +10,7 @@
 import org.jboss.internal.soa.esb.publish.ActionContractPublisher;
 import org.jboss.internal.soa.esb.publish.ContractPublisher;
 import org.jboss.internal.soa.esb.publish.Publish;
+import org.jboss.internal.soa.esb.webservice.ESBServiceContractPublisher;
 import org.jboss.soa.esb.listeners.config.xbeanmodel.ActionDocument.Action;
 import org.jboss.soa.esb.listeners.config.Generator.XMLBeansModel;
 import org.jboss.soa.esb.listeners.config.xbeanmodel.ServiceDocument.Service;
@@ -105,6 +106,10 @@
         publishers.clear();
         for (Service service : serviceConfigs) {
             ContractPublisher contractPublisher = getConractPublisher(service);
+            
+            if (contractPublisher == null && service.getActions().getInXsd() != null) {
+            	contractPublisher = new ESBServiceContractPublisher(service.getCategory() + "_" + service.getName());
+            }
             ServicePublisher servicePublisher = new ServicePublisher(service.getName(), service.getCategory(), contractPublisher);
 
             servicePublisher.setDescription(service.getDescription());

Modified: labs/jbossesb/workspace/jimma/product/rosetta/tests/src/org/jboss/internal/soa/esb/webservice/fault.xsd
===================================================================
--- labs/jbossesb/workspace/jimma/product/rosetta/tests/src/org/jboss/internal/soa/esb/webservice/fault.xsd	2008-07-04 10:55:41 UTC (rev 20903)
+++ labs/jbossesb/workspace/jimma/product/rosetta/tests/src/org/jboss/internal/soa/esb/webservice/fault.xsd	2008-07-04 13:57:33 UTC (rev 20904)
@@ -6,4 +6,12 @@
       <xs:element name="faultString" type="xs:string"/>
     </xs:sequence>
   </xs:complexType>
+    <xs:element name="sayFault2" type="x1:fault2"/>
+  <xs:complexType name="fault2">
+    <xs:sequence>
+      <xs:element name="code" type="xs:int"/>
+      <xs:element name="descrption" type="xs:string"/>
+    </xs:sequence>
+  </xs:complexType>
+  
 </xs:schema>
\ No newline at end of file

Modified: labs/jbossesb/workspace/jimma/product/tools/console/contract-web/src/main/webapp/index.jsp
===================================================================
--- labs/jbossesb/workspace/jimma/product/tools/console/contract-web/src/main/webapp/index.jsp	2008-07-04 10:55:41 UTC (rev 20903)
+++ labs/jbossesb/workspace/jimma/product/tools/console/contract-web/src/main/webapp/index.jsp	2008-07-04 13:57:33 UTC (rev 20904)
@@ -5,7 +5,8 @@
 <%@ page import="org.jboss.soa.esb.addressing.EPR" %>
 <%@ page import="java.net.URI" %>
 <%@ page import="org.jboss.soa.esb.services.registry.RegistryException" %>
-<%@ page import="java.util.ArrayList" %>
+<%@ page import="java.util.ArrayList" %>
+<%@ page import="org.jboss.internal.soa.esb.webservice.ESBServiceContractPublisher" %>
 <html>
 <head>
     <title>JBoss ESB - Service List</title>
@@ -53,7 +54,7 @@
             <ul>
                 <li><b>Endpoint</b>: <%=eprURI%></li>
                 <%
-                    if(publisher.getContractPublisher() != null) {
+                    if(publisher.getContractPublisher() != null && !(publisher.getContractPublisher() instanceof ESBServiceContractPublisher)) {
                 %>
                 <li><b>Contract</b>: <a href="<%=relContractURI%>"><%=contractURI%></a></li>
                 <%
@@ -64,10 +65,25 @@
                     }
                 %>
             </ul>
-        </fieldset>
+        </fieldset>
+        <% 
+          if (publisher.getContractPublisher() instanceof ESBServiceContractPublisher) {
+              ESBServiceContractPublisher contractPublisher = (ESBServiceContractPublisher)publisher.getContractPublisher();
+        %>
+         <fieldset>
+            <legend><b>HTTP</b></legend>
+
+            <ul>
+                <li><b>Endpoint</b>: <%=contractPublisher.getEndpointAddress()%></li>
+                <li><b>Contract</b>: <a href="<%=contractPublisher.getEndpointAddress()%>?wsdl"><%=contractPublisher.getEndpointAddress()%>?wsdl</a></li>
+            </ul>
+        </fieldset>
         <%
             }
         %>
+        <%
+            }
+        %>
     </fieldset>
     <%
         }




More information about the jboss-svn-commits mailing list