diff --git a/core/src/main/java/org/springframework/ws/wsdl/wsdl11/SimpleWsdl11Definition.java b/core/src/main/java/org/springframework/ws/wsdl/wsdl11/SimpleWsdl11Definition.java index a4d248b1..e08eeee4 100644 --- a/core/src/main/java/org/springframework/ws/wsdl/wsdl11/SimpleWsdl11Definition.java +++ b/core/src/main/java/org/springframework/ws/wsdl/wsdl11/SimpleWsdl11Definition.java @@ -19,14 +19,15 @@ package org.springframework.ws.wsdl.wsdl11; import java.io.IOException; import javax.xml.transform.Source; +import org.xml.sax.SAXException; +import org.xml.sax.XMLReader; +import org.xml.sax.helpers.XMLReaderFactory; + import org.springframework.beans.factory.InitializingBean; import org.springframework.core.io.Resource; import org.springframework.util.Assert; import org.springframework.ws.wsdl.WsdlDefinitionException; import org.springframework.xml.transform.ResourceSource; -import org.xml.sax.SAXException; -import org.xml.sax.XMLReader; -import org.xml.sax.helpers.XMLReaderFactory; /** * The default {@link Wsdl11Definition} implementation. @@ -88,4 +89,9 @@ public class SimpleWsdl11Definition implements Wsdl11Definition, InitializingBea this.wsdlResource = wsdlResource; } + public String toString() { + return "SimpleWsdl11Definition " + wsdlResource; + } + + } \ No newline at end of file diff --git a/core/src/main/java/org/springframework/ws/wsdl/wsdl11/Wsdl4jDefinition.java b/core/src/main/java/org/springframework/ws/wsdl/wsdl11/Wsdl4jDefinition.java index cf14cff9..2f6235b4 100644 --- a/core/src/main/java/org/springframework/ws/wsdl/wsdl11/Wsdl4jDefinition.java +++ b/core/src/main/java/org/springframework/ws/wsdl/wsdl11/Wsdl4jDefinition.java @@ -23,10 +23,11 @@ import javax.wsdl.xml.WSDLWriter; import javax.xml.transform.Source; import javax.xml.transform.dom.DOMSource; +import org.w3c.dom.Document; + import org.springframework.util.Assert; import org.springframework.util.StringUtils; import org.springframework.ws.wsdl.WsdlDefinitionException; -import org.w3c.dom.Document; /** * Implementation of the Wsdl11Definition based on WSDL4J. A {@link javax.wsdl.Definition} can be given as @@ -66,7 +67,9 @@ public class Wsdl4jDefinition implements Wsdl11Definition { /** Returns the WSDL4J Definition. */ public Definition getDefinition() { - return definition; + synchronized (monitor) { + return definition; + } } /** Set the WSDL4J Definition. */ diff --git a/core/src/main/java/org/springframework/ws/wsdl/wsdl11/builder/AbstractBindingWsdl4jDefinitionBuilder.java b/core/src/main/java/org/springframework/ws/wsdl/wsdl11/builder/AbstractBindingWsdl4jDefinitionBuilder.java index 727e55e7..b728d495 100644 --- a/core/src/main/java/org/springframework/ws/wsdl/wsdl11/builder/AbstractBindingWsdl4jDefinitionBuilder.java +++ b/core/src/main/java/org/springframework/ws/wsdl/wsdl11/builder/AbstractBindingWsdl4jDefinitionBuilder.java @@ -26,6 +26,7 @@ import javax.wsdl.Definition; import javax.wsdl.Fault; import javax.wsdl.Input; import javax.wsdl.Operation; +import javax.wsdl.OperationType; import javax.wsdl.Output; import javax.wsdl.Port; import javax.wsdl.PortType; @@ -101,15 +102,19 @@ public abstract class AbstractBindingWsdl4jDefinitionBuilder extends AbstractWsd BindingOperation bindingOperation = definition.createBindingOperation(); bindingOperation.setOperation(operation); populateBindingOperation(bindingOperation, operation); - if (operation.getInput() != null) { - BindingInput bindingInput = definition.createBindingInput(); - populateBindingInput(bindingInput, operation.getInput()); - bindingOperation.setBindingInput(bindingInput); + if (operation.getStyle() == null || operation.getStyle().equals(OperationType.REQUEST_RESPONSE)) { + createBindingInput(definition, operation, bindingOperation); + createBindingOutput(definition, operation, bindingOperation); } - if (operation.getOutput() != null) { - BindingOutput bindingOutput = definition.createBindingOutput(); - populateBindingOutput(bindingOutput, operation.getOutput()); - bindingOperation.setBindingOutput(bindingOutput); + else if (operation.getStyle().equals(OperationType.ONE_WAY)) { + createBindingInput(definition, operation, bindingOperation); + } + else if (operation.getStyle().equals(OperationType.NOTIFICATION)) { + createBindingOutput(definition, operation, bindingOperation); + } + else if (operation.getStyle().equals(OperationType.SOLICIT_RESPONSE)) { + createBindingOutput(definition, operation, bindingOperation); + createBindingInput(definition, operation, bindingOperation); } for (Iterator faultIterator = operation.getFaults().values().iterator(); faultIterator.hasNext();) { Fault fault = (Fault) faultIterator.next(); @@ -121,6 +126,20 @@ public abstract class AbstractBindingWsdl4jDefinitionBuilder extends AbstractWsd } } + private void createBindingOutput(Definition definition, Operation operation, BindingOperation bindingOperation) + throws WSDLException { + BindingOutput bindingOutput = definition.createBindingOutput(); + populateBindingOutput(bindingOutput, operation.getOutput()); + bindingOperation.setBindingOutput(bindingOutput); + } + + private void createBindingInput(Definition definition, Operation operation, BindingOperation bindingOperation) + throws WSDLException { + BindingInput bindingInput = definition.createBindingInput(); + populateBindingInput(bindingInput, operation.getInput()); + bindingOperation.setBindingInput(bindingInput); + } + /** * Called after the {@link BindingOperation} has been created, but before any sub-elements are added. Subclasses can * implement this method to define the binding name, or add extensions to it.