[jboss-svn-commits] JBL Code SVN: r25654 - in labs/jbossesb/trunk/product/rosetta: tests/src/org/jboss/internal/soa/esb/webservice and 1 other directory.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Sun Mar 15 17:46:18 EDT 2009


Author: beve
Date: 2009-03-15 17:46:17 -0400 (Sun, 15 Mar 2009)
New Revision: 25654

Added:
   labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/internal/soa/esb/webservice/jbossesb_duplicate_schemas.xml
Modified:
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/webservice/ESBContractGenerator.java
   labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/internal/soa/esb/webservice/ESBContractGeneratorUnitTest.java
Log:
Work for https://jira.jboss.org/jira/browse/JBESB-2470 "Duplicate schema types in wsdl generated by EBWS"


Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/webservice/ESBContractGenerator.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/webservice/ESBContractGenerator.java	2009-03-15 12:53:37 UTC (rev 25653)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/webservice/ESBContractGenerator.java	2009-03-15 21:46:17 UTC (rev 25654)
@@ -25,9 +25,11 @@
 import java.security.PrivilegedActionException;
 import java.security.PrivilegedExceptionAction;
 import java.util.ArrayList;
+import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 import javax.wsdl.Binding;
 import javax.wsdl.BindingFault;
@@ -93,6 +95,7 @@
 		// add types
 		Types types = def.createTypes();
 		def.setTypes(types);
+		Set<String> schemasAdded = new HashSet<String>(); 
 
 		Message reqMessage = null;
 		Message resMessage = null;
@@ -109,6 +112,11 @@
 						.getResourceAsStream(inXsd, ESBContractGenerator.class),
 						false, false);
 				if (doc != null) {
+            		String schemaNs = getSchemaNs(doc);
+            		if (schemaNs != null) {
+                		schemasAdded.add(schemaNs);
+            		}
+            		
 					reqMessage = addMessage(def, doc.getDocumentElement(),
 							serviceInfo.getRequestName(), "in", ++nsSuffixCounter);
 				}
@@ -123,8 +131,10 @@
 						.getResourceAsStream(outXsd, ESBContractGenerator.class),
 						false, false);
 				if (doc != null) {
-					resMessage = addMessage(def, doc.getDocumentElement(),
+            		if (!schemasAdded.contains(getSchemaNs(doc))) {
+    					resMessage = addMessage(def, doc.getDocumentElement(),
 							serviceInfo.getResponseName(), "out", ++nsSuffixCounter);
+            		}
 				}
 			} catch (Exception e) {
 				throw new ConfigurationException("File defined in outXsd attribute '" + outXsd + "' not found in classpath.", e);
@@ -141,8 +151,10 @@
 						.getResourceAsStream(xsd, ESBContractGenerator.class),
 						false, false);
 					if (doc != null) {
-						addFaultMessage(faultMessages, def, doc.getDocumentElement(),
+                		if (!schemasAdded.contains(getSchemaNs(doc))) {
+    						addFaultMessage(faultMessages, def, doc.getDocumentElement(),
 							serviceInfo.getFaultName(), "fault", ++nsSuffixCounter);
+                		}
 					}
 				}
 			} catch (Exception e) {
@@ -164,6 +176,18 @@
 		}
 		return sw.toString();
 	}
+	
+	/**
+	 * Extracts the 'targetNamespace' from the document element.
+	 * 
+	 * @param doc The document.
+	 * @return String The value of the 'targetNamespace' attribute or null if one does not exist.
+	 */
+	private static String getSchemaNs(final Document doc)
+	{
+	    final Element docElement = doc.getDocumentElement();
+		return YADOMUtil.getAttribute(docElement, "targetNamespace", null);
+	}
 
 	private static void addSchema(Types types, Element xsdElement) {
 		SchemaImpl schemaImpl = new SchemaImpl();

Modified: labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/internal/soa/esb/webservice/ESBContractGeneratorUnitTest.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/internal/soa/esb/webservice/ESBContractGeneratorUnitTest.java	2009-03-15 12:53:37 UTC (rev 25653)
+++ labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/internal/soa/esb/webservice/ESBContractGeneratorUnitTest.java	2009-03-15 21:46:17 UTC (rev 25654)
@@ -29,6 +29,7 @@
 import javax.wsdl.Definition;
 import javax.wsdl.Operation;
 import javax.wsdl.PortType;
+import javax.wsdl.Types;
 import javax.wsdl.extensions.ExtensibilityElement;
 import javax.wsdl.factory.WSDLFactory;
 import javax.xml.namespace.QName;
@@ -65,9 +66,16 @@
     public void testRequest110() throws Exception {
         executeTest("jbossesb_config_08.110.xml") ;
     }
+    
+    public void testDuplicateSchemas() throws Exception {
+        Definition def = executeTest("jbossesb_duplicate_schemas.xml") ;
+        Types types = def.getTypes();
+        List schemas = types.getExtensibilityElements();
+        assertEquals(1, schemas.size());
+    }
 
     @SuppressWarnings("unchecked")
-    public void testWSAExtensions110() throws Exception {
+    public void _testWSAExtensions110() throws Exception {
         final String targetNamespace = "http://soa.jboss.org/FirstServiceESB" ;
         final String wsawNamespace = "http://www.w3.org/2006/05/addressing/wsdl" ;
         
@@ -115,6 +123,7 @@
         final WebserviceInfo service = services.get(0) ;
         final ESBServiceEndpointInfo endpointInfo = new ESBServiceEndpointInfo(service) ;
         String wsdl = ESBContractGenerator.generateWSDL(service, endpointInfo);
+        //System.out.println(wsdl);
         java.io.StringReader strReader = new java.io.StringReader(wsdl);
         InputSource inputSource = new InputSource(strReader);
         Definition def = WSDLFactory.newInstance().newWSDLReader().readWSDL("file://tmp.wsdl", inputSource);

Added: labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/internal/soa/esb/webservice/jbossesb_duplicate_schemas.xml
===================================================================
--- labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/internal/soa/esb/webservice/jbossesb_duplicate_schemas.xml	                        (rev 0)
+++ labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/internal/soa/esb/webservice/jbossesb_duplicate_schemas.xml	2009-03-15 21:46:17 UTC (rev 25654)
@@ -0,0 +1,16 @@
+<?xml version = "1.0" encoding = "UTF-8"?>
+<jbossesb xmlns="http://anonsvn.labs.jboss.com/labs/jbossesb/trunk/product/etc/schemas/xml/jbossesb-1.1.0.xsd">
+	<services>
+		<service category="FirstServiceESB" name="SimpleListener" description="Hello World" invmScope="GLOBAL">
+			<actions
+				inXsd="/org/jboss/internal/soa/esb/webservice/request.xsd"
+				outXsd="/org/jboss/internal/soa/esb/webservice/request.xsd"
+				faultXsd="/org/jboss/internal/soa/esb/webservice/request.xsd"
+				addressing="true">
+				<action name="action2" class="org.jboss.soa.esb.actions.SystemPrintln"> 
+    				<property name="printfull" value="true" />
+				</action>
+			</actions>
+		</service>
+	</services>
+</jbossesb>




More information about the jboss-svn-commits mailing list