Author: alessio.soldano(a)jboss.com
Date: 2007-11-02 10:25:37 -0400 (Fri, 02 Nov 2007)
New Revision: 4974
Modified:
stack/native/branches/asoldano/trunk/src/main/java/org/jboss/ws/tools/wsdl/WSDL11Reader.java
Log:
WSDL Import loop check, prevents stack overflow exception with bad wsdl files
Modified:
stack/native/branches/asoldano/trunk/src/main/java/org/jboss/ws/tools/wsdl/WSDL11Reader.java
===================================================================
---
stack/native/branches/asoldano/trunk/src/main/java/org/jboss/ws/tools/wsdl/WSDL11Reader.java 2007-11-02
14:24:04 UTC (rev 4973)
+++
stack/native/branches/asoldano/trunk/src/main/java/org/jboss/ws/tools/wsdl/WSDL11Reader.java 2007-11-02
14:25:37 UTC (rev 4974)
@@ -31,10 +31,12 @@
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
+import java.util.Set;
import javax.wsdl.Binding;
import javax.wsdl.BindingInput;
@@ -151,6 +153,8 @@
private Map<String, List<Binding>> bindingsByNamespace = new
HashMap<String, List<Binding>>();
private Map<String, List<PortType>> portTypesByNamespace = new
HashMap<String, List<PortType>>();
private Map<String, List<Message>> messagesByNamespace = new
HashMap<String, List<Message>>();
+
+ private Set<Definition> importedDefinitions = new HashSet<Definition>();
/**
* Takes a WSDL11 Definition element and converts into
@@ -185,6 +189,7 @@
private void processTopLevelElements(Definition srcWsdl)
{
String targetNS = srcWsdl.getTargetNamespace();
+ importedDefinitions.add(srcWsdl);
// Messages
Collection<Message> messages = srcWsdl.getMessages().values();
@@ -248,7 +253,10 @@
for (Import imp : imports)
{
Definition impWsdl = imp.getDefinition();
- processTopLevelElements(impWsdl);
+ if (!importedDefinitions.contains(impWsdl))
+ {
+ processTopLevelElements(impWsdl);
+ }
}
}
}
Show replies by date