[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