[jboss-svn-commits] JBL Code SVN: r25726 - in labs/jbossesb/trunk/product: rosetta/src/org/jboss/internal/soa/esb/webservice and 1 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Thu Mar 19 04:43:10 EDT 2009
Author: beve
Date: 2009-03-19 04:43:09 -0400 (Thu, 19 Mar 2009)
New Revision: 25726
Modified:
labs/jbossesb/trunk/product/build-distr.xml
labs/jbossesb/trunk/product/ivy.xml
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/build-distr.xml
===================================================================
--- labs/jbossesb/trunk/product/build-distr.xml 2009-03-19 08:43:07 UTC (rev 25725)
+++ labs/jbossesb/trunk/product/build-distr.xml 2009-03-19 08:43:09 UTC (rev 25726)
@@ -138,6 +138,7 @@
<!-- Mina -->
<fileset dir="${lib.dir}" includes="mina-*.jar"/>
<fileset dir="${lib.dir}" includes="slf4j-*.jar"/>
+ <fileset dir="${lib.dir}" includes="xmlunit-*.jar"/>
</copy>
<copy todir="${build.dir}/jbossesb.sar">
<fileset dir="${installation.files.dir}/jUDDI-registry" includes="juddi.war"/>
Modified: labs/jbossesb/trunk/product/ivy.xml
===================================================================
--- labs/jbossesb/trunk/product/ivy.xml 2009-03-19 08:43:07 UTC (rev 25725)
+++ labs/jbossesb/trunk/product/ivy.xml 2009-03-19 08:43:09 UTC (rev 25726)
@@ -78,5 +78,8 @@
<dependency org="sun-jaxws" name="jaxws-tools" rev="2.1.1"/>
<dependency org="sun-jaxws" name="jaxws-rt" rev="2.1.1"/>
<dependency org="sun-jaxb" name="jaxb-xjc" rev="2.1.4"/>
+
+ <!-- xmlunit -->
+ <dependency org="xmlunit" name="xmlunit" rev="1.2"/>
</dependencies>
</ivy-module>
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-19 08:43:07 UTC (rev 25725)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/webservice/ESBContractGenerator.java 2009-03-19 08:43:09 UTC (rev 25726)
@@ -19,6 +19,7 @@
*/
package org.jboss.internal.soa.esb.webservice;
+import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.security.AccessController;
@@ -52,7 +53,14 @@
import javax.wsdl.extensions.soap.SOAPOperation;
import javax.wsdl.factory.WSDLFactory;
import javax.xml.namespace.QName;
+import javax.xml.transform.Result;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerException;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamResult;
+import org.custommonkey.xmlunit.XMLUnit;
import org.jboss.soa.esb.ConfigurationException;
import org.jboss.soa.esb.Service;
import org.jboss.soa.esb.dom.YADOMUtil;
@@ -62,6 +70,7 @@
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
+import org.xml.sax.SAXException;
import com.ibm.wsdl.extensions.schema.SchemaImpl;
import com.ibm.wsdl.extensions.soap.SOAPAddressImpl;
@@ -79,7 +88,7 @@
private static final QName WSAW_ACTION_QN = new QName(WSAW_NAMESPACE, "Action", WSAW_PREFIX) ;
private static final QName WSAW_USING_ADDRESSING_QN = new QName(WSAW_NAMESPACE, "UsingAddressing", WSAW_PREFIX) ;
private static WSDLFactory wsdlFactory ;
-
+
public static String generateWSDL(final WebserviceInfo serviceConfig, final ESBServiceEndpointInfo serviceInfo)
throws ConfigurationException {
final Definition def = getWSDLFactory().newDefinition() ;
@@ -95,6 +104,8 @@
// add types
Types types = def.createTypes();
def.setTypes(types);
+
+ // Keeps track of schema types added to avoid duplicates.
Set<String> schemasAdded = new HashSet<String>();
Message reqMessage = null;
@@ -112,15 +123,8 @@
.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);
+ serviceInfo.getRequestName(), "in", ++nsSuffixCounter, schemasAdded);
}
} catch (Exception e) {
throw new ConfigurationException("File defined in inXsd attribute '" + inXsd + "' not found in classpath.", e);
@@ -133,10 +137,8 @@
.getResourceAsStream(outXsd, ESBContractGenerator.class),
false, false);
if (doc != null) {
- //if (!schemasAdded.contains(getSchemaNs(doc))) {
- resMessage = addMessage(def, doc.getDocumentElement(),
- serviceInfo.getResponseName(), "out", ++nsSuffixCounter);
- //}
+ resMessage = addMessage(def, doc.getDocumentElement(),
+ serviceInfo.getResponseName(), "out", ++nsSuffixCounter, schemasAdded);
}
} catch (Exception e) {
throw new ConfigurationException("File defined in outXsd attribute '" + outXsd + "' not found in classpath.", e);
@@ -153,10 +155,8 @@
.getResourceAsStream(xsd, ESBContractGenerator.class),
false, false);
if (doc != null) {
- //if (!schemasAdded.contains(getSchemaNs(doc))) {
- addFaultMessage(faultMessages, def, doc.getDocumentElement(),
- serviceInfo.getFaultName(), "fault", ++nsSuffixCounter);
- //}
+ addFaultMessage(faultMessages, def, doc.getDocumentElement(),
+ serviceInfo.getFaultName(), "fault", ++nsSuffixCounter, schemasAdded);
}
}
} catch (Exception e) {
@@ -179,29 +179,47 @@
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, Set<String> schemasAdded) throws SAXException, IOException, TransformerException {
+ if (add(xsdElement, schemasAdded))
+ {
+ SchemaImpl schemaImpl = new SchemaImpl();
+ schemaImpl.setElement(xsdElement);
+ schemaImpl.setElementType(XSD_QN);
+ types.addExtensibilityElement(schemaImpl);
+ }
}
- private static void addSchema(Types types, Element xsdElement) {
- SchemaImpl schemaImpl = new SchemaImpl();
- schemaImpl.setElement(xsdElement);
- schemaImpl.setElementType(XSD_QN);
- types.addExtensibilityElement(schemaImpl);
- }
+ private static boolean add(final Element schemaElement, final Set<String> schemasAdded) throws SAXException, IOException, TransformerException
+ {
+ TransformerFactory factory = TransformerFactory.newInstance();
+ Transformer transformer = factory.newTransformer();
+ StringWriter writer = new StringWriter();
+ Result result = new StreamResult(writer);
+ transformer.transform(new DOMSource(schemaElement), result);
+ String newType = writer.toString();
+ if (schemasAdded.size() == 0)
+ {
+ return schemasAdded.add(newType);
+ }
+ else
+ {
+ XMLUnit.setIgnoreWhitespace(true);
+ for (String existingType : schemasAdded)
+ {
+ if (!XMLUnit.compareXML(existingType, newType).identical())
+ {
+ return schemasAdded.add(newType);
+ }
+ }
+ }
+
+ return false;
+ }
- 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, Set<String> schemasAdded) throws SAXException, IOException, TransformerException {
String schemaNs = YADOMUtil
.getAttribute(element, "targetNamespace", "");
- addSchema(def.getTypes(), element);
+ addSchema(def.getTypes(), element, schemasAdded);
if (def.getNamespace(schemaNs) == null) {
def.addNamespace("ns" + nsSuffixCounter, schemaNs);
}
@@ -221,10 +239,10 @@
private static void addFaultMessage(final List<Message> faultMessages,
Definition def, Element element, String msgName, String partName,
- int nsSuffixCounter) {
+ int nsSuffixCounter, Set<String> schemasAdded) throws SAXException, IOException, TransformerException {
String schemaNs = YADOMUtil
.getAttribute(element, "targetNamespace", "");
- addSchema(def.getTypes(), element);
+ addSchema(def.getTypes(), element, schemasAdded);
if (def.getNamespace(schemaNs) == null) {
def.addNamespace("ns" + nsSuffixCounter, schemaNs);
}
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-19 08:43:07 UTC (rev 25725)
+++ labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/internal/soa/esb/webservice/ESBContractGeneratorUnitTest.java 2009-03-19 08:43:09 UTC (rev 25726)
@@ -23,11 +23,7 @@
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
-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.Definition;
@@ -44,14 +40,8 @@
import org.jboss.soa.esb.listeners.config.Generator;
import org.jboss.soa.esb.listeners.config.WebserviceInfo;
import org.jboss.soa.esb.util.ClassUtil;
-import org.jboss.util.xml.DOMUtils;
-import org.milyn.xml.DomUtils;
-import org.w3c.dom.Element;
-import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
-import com.ibm.wsdl.extensions.schema.SchemaImpl;
-
public class ESBContractGeneratorUnitTest extends TestCase {
public void testRequestResponseFault() throws Exception {
executeTest("jbossesb_config_06.xml") ;
@@ -77,15 +67,16 @@
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());
+ assertEquals(1, types.getExtensibilityElements().size());
+
+ def = executeTest("jbossesb_duplicate_schemas2.xml") ;
+ types = def.getTypes();
+ assertEquals(2, types.getExtensibilityElements().size());
}
- */
-
+
@SuppressWarnings("unchecked")
public void _testWSAExtensions110() throws Exception {
final String targetNamespace = "http://soa.jboss.org/FirstServiceESB" ;
More information about the jboss-svn-commits
mailing list