Polishing.

Related: #1316.
This commit is contained in:
Greg L. Turnquist
2023-01-25 14:01:33 -06:00
parent b4536efc33
commit 00882340c7
5 changed files with 73 additions and 47 deletions

View File

@@ -16,7 +16,6 @@
package org.springframework.ws.wsdl.wsdl11.provider;
import java.util.Iterator;
import java.util.List;
import javax.wsdl.Definition;
@@ -68,7 +67,9 @@ public abstract class AbstractPortTypesProvider implements PortTypesProvider {
*/
@Override
public void addPortTypes(Definition definition) throws WSDLException {
Assert.notNull(getPortTypeName(), "'portTypeName' is required");
PortType portType = definition.createPortType();
populatePortType(definition, portType);
createOperations(definition, portType);
@@ -86,6 +87,7 @@ public abstract class AbstractPortTypesProvider implements PortTypesProvider {
* @see #setPortTypeName(String)
*/
protected void populatePortType(Definition definition, PortType portType) throws WSDLException {
QName portTypeName = new QName(definition.getTargetNamespace(), getPortTypeName());
if (logger.isDebugEnabled()) {
logger.debug("Creating port type [" + portTypeName + "]");
@@ -94,7 +96,9 @@ public abstract class AbstractPortTypesProvider implements PortTypesProvider {
}
private void createOperations(Definition definition, PortType portType) throws WSDLException {
MultiValueMap<String, Message> operations = new LinkedMultiValueMap<String, Message>();
MultiValueMap<String, Message> operations = new LinkedMultiValueMap<>();
for (Object messageValue : definition.getMessages().values()) {
Message message = (Message) messageValue;
String operationName = getOperationName(message);
@@ -102,10 +106,13 @@ public abstract class AbstractPortTypesProvider implements PortTypesProvider {
operations.add(operationName, message);
}
}
if (operations.isEmpty() && logger.isWarnEnabled()) {
logger.warn("No operations were created, make sure the WSDL contains messages");
}
for (String operationName : operations.keySet()) {
Operation operation = definition.createOperation();
operation.setName(operationName);
List<Message> messages = operations.get(operationName);
@@ -218,6 +225,7 @@ public abstract class AbstractPortTypesProvider implements PortTypesProvider {
* @return the operation type for the operation
*/
protected OperationType getOperationType(Operation operation) {
if (operation.getInput() != null && operation.getOutput() != null) {
return OperationType.REQUEST_RESPONSE;
} else if (operation.getInput() != null && operation.getOutput() == null) {

View File

@@ -16,23 +16,7 @@
package org.springframework.ws.wsdl.wsdl11.provider;
import java.util.Iterator;
import javax.wsdl.Binding;
import javax.wsdl.BindingFault;
import javax.wsdl.BindingInput;
import javax.wsdl.BindingOperation;
import javax.wsdl.BindingOutput;
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;
import javax.wsdl.Service;
import javax.wsdl.WSDLException;
import javax.wsdl.*;
import javax.xml.namespace.QName;
import org.apache.commons.logging.Log;
@@ -65,6 +49,7 @@ public class DefaultConcretePartProvider implements BindingsProvider, ServicesPr
/** Sets the service name. */
public void setServiceName(String serviceName) {
Assert.hasText(serviceName, "'serviceName' must not be null");
this.serviceName = serviceName;
}
@@ -76,6 +61,7 @@ public class DefaultConcretePartProvider implements BindingsProvider, ServicesPr
/** Sets the suffix to append to the port type name to obtain the binding name. */
public void setBindingSuffix(String bindingSuffix) {
Assert.notNull(bindingSuffix, "'bindingSuffix' must not be null");
this.bindingSuffix = bindingSuffix;
}
@@ -97,17 +83,21 @@ public class DefaultConcretePartProvider implements BindingsProvider, ServicesPr
*/
@Override
public void addBindings(Definition definition) throws WSDLException {
for (Object portValue : definition.getPortTypes().values()) {
PortType portType = (PortType) portValue;
Binding binding = definition.createBinding();
binding.setPortType(portType);
populateBinding(definition, binding);
createBindingOperations(definition, binding);
binding.setUndefined(false);
if (binding.getQName() != null) {
definition.addBinding(binding);
}
}
if (definition.getBindings().isEmpty() && logger.isWarnEnabled()) {
logger.warn("No bindings were created, make sure the WSDL contains port types");
}
@@ -124,8 +114,11 @@ public class DefaultConcretePartProvider implements BindingsProvider, ServicesPr
* @param binding the WSDL4J {@code Binding}
*/
protected void populateBinding(Definition definition, Binding binding) throws WSDLException {
QName portTypeName = binding.getPortType().getQName();
if (portTypeName != null) {
QName bindingName = new QName(portTypeName.getNamespaceURI(), portTypeName.getLocalPart() + getBindingSuffix());
if (logger.isDebugEnabled()) {
logger.debug("Creating binding [" + bindingName + "]");
@@ -135,12 +128,16 @@ public class DefaultConcretePartProvider implements BindingsProvider, ServicesPr
}
private void createBindingOperations(Definition definition, Binding binding) throws WSDLException {
PortType portType = binding.getPortType();
for (Object operationValue : portType.getOperations()) {
Operation operation = (Operation) operationValue;
BindingOperation bindingOperation = definition.createBindingOperation();
bindingOperation.setOperation(operation);
populateBindingOperation(definition, bindingOperation);
if (OperationType.REQUEST_RESPONSE.equals(operation.getStyle())) {
createBindingInput(definition, operation, bindingOperation);
createBindingOutput(definition, operation, bindingOperation);
@@ -152,6 +149,7 @@ public class DefaultConcretePartProvider implements BindingsProvider, ServicesPr
createBindingOutput(definition, operation, bindingOperation);
createBindingInput(definition, operation, bindingOperation);
}
for (Object faultValue : operation.getFaults().values()) {
Fault fault = (Fault) faultValue;
BindingFault bindingFault = definition.createBindingFault();
@@ -160,6 +158,7 @@ public class DefaultConcretePartProvider implements BindingsProvider, ServicesPr
bindingOperation.addBindingFault(bindingFault);
}
}
binding.addBindingOperation(bindingOperation);
}
}
@@ -181,6 +180,7 @@ public class DefaultConcretePartProvider implements BindingsProvider, ServicesPr
private void createBindingInput(Definition definition, Operation operation, BindingOperation bindingOperation)
throws WSDLException {
BindingInput bindingInput = definition.createBindingInput();
populateBindingInput(definition, bindingInput, operation.getInput());
bindingOperation.setBindingInput(bindingInput);
@@ -188,6 +188,7 @@ public class DefaultConcretePartProvider implements BindingsProvider, ServicesPr
private void createBindingOutput(Definition definition, Operation operation, BindingOperation bindingOperation)
throws WSDLException {
BindingOutput bindingOutput = definition.createBindingOutput();
populateBindingOutput(definition, bindingOutput, operation.getOutput());
bindingOperation.setBindingOutput(bindingOutput);
@@ -247,15 +248,19 @@ public class DefaultConcretePartProvider implements BindingsProvider, ServicesPr
*/
@Override
public void addServices(Definition definition) throws WSDLException {
Assert.notNull(getServiceName(), "'serviceName' is required");
Service service;
if (definition.getServices().isEmpty()) {
service = definition.createService();
} else {
service = (Service) definition.getServices().values().iterator().next();
}
populateService(definition, service);
createPorts(definition, service);
if (service.getQName() != null) {
definition.addService(service);
}
@@ -271,6 +276,7 @@ public class DefaultConcretePartProvider implements BindingsProvider, ServicesPr
* @throws WSDLException in case of errors
*/
protected void populateService(Definition definition, Service service) throws WSDLException {
if (StringUtils.hasText(definition.getTargetNamespace()) && StringUtils.hasText(getServiceName())) {
QName serviceName = new QName(definition.getTargetNamespace(), getServiceName());
if (logger.isDebugEnabled()) {
@@ -281,6 +287,7 @@ public class DefaultConcretePartProvider implements BindingsProvider, ServicesPr
}
private void createPorts(Definition definition, Service service) throws WSDLException {
for (Object bindingValue : definition.getBindings().values()) {
Binding binding = (Binding) bindingValue;
Port port = null;
@@ -302,6 +309,7 @@ public class DefaultConcretePartProvider implements BindingsProvider, ServicesPr
service.addPort(port);
}
}
if (service.getPorts().isEmpty() && logger.isWarnEnabled()) {
logger.warn("No ports were created, make sure the WSDL contains bindings");
}
@@ -318,8 +326,8 @@ public class DefaultConcretePartProvider implements BindingsProvider, ServicesPr
* @throws WSDLException in case of errors
*/
protected void populatePort(Definition definition, Port port) throws WSDLException {
String portName = port.getBinding().getQName().getLocalPart();
port.setName(portName);
}
}

View File

@@ -16,8 +16,6 @@
package org.springframework.ws.wsdl.wsdl11.provider;
import java.util.Iterator;
import javax.wsdl.Definition;
import javax.wsdl.Message;
import javax.wsdl.Part;
@@ -48,6 +46,7 @@ public class DefaultMessagesProvider implements MessagesProvider {
@Override
public void addMessages(Definition definition) throws WSDLException {
Types types = definition.getTypes();
Assert.notNull(types, "No types element present in definition");
for (Object element : types.getExtensibilityElements()) {
@@ -59,20 +58,27 @@ public class DefaultMessagesProvider implements MessagesProvider {
}
}
}
if (definition.getMessages().isEmpty() && logger.isWarnEnabled()) {
logger.warn("No messages were created, make sure the referenced schema(s) contain elements");
}
}
private void createMessages(Definition definition, Element schemaElement) throws WSDLException {
String schemaTargetNamespace = schemaElement.getAttribute("targetNamespace");
Assert.hasText(schemaTargetNamespace, "No targetNamespace defined on schema");
if (logger.isDebugEnabled()) {
logger.debug("Looking for elements in schema with target namespace [" + schemaTargetNamespace + "]");
}
NodeList children = schemaElement.getChildNodes();
for (int i = 0; i < children.getLength(); i++) {
Node child = children.item(i);
if (child.getNodeType() == Node.ELEMENT_NODE) {
Element childElement = (Element) child;
if (isMessageElement(childElement)) {
@@ -109,6 +115,7 @@ public class DefaultMessagesProvider implements MessagesProvider {
* @return {@code true} if to be included as message; {@code false} otherwise
*/
protected boolean isMessageElement(Element element) {
return "element".equals(element.getLocalName())
&& "http://www.w3.org/2001/XMLSchema".equals(element.getNamespaceURI());
}
@@ -124,6 +131,7 @@ public class DefaultMessagesProvider implements MessagesProvider {
* @throws WSDLException in case of errors
*/
protected void populateMessage(Definition definition, Message message, QName elementName) throws WSDLException {
QName messageName = new QName(definition.getTargetNamespace(), elementName.getLocalPart());
if (logger.isDebugEnabled()) {
logger.debug("Creating message [" + messageName + "]");
@@ -142,8 +150,8 @@ public class DefaultMessagesProvider implements MessagesProvider {
* @see Part#setElementName(javax.xml.namespace.QName)
*/
protected void populatePart(Definition definition, Part part, QName elementName) throws WSDLException {
part.setElementName(elementName);
part.setName(elementName.getLocalPart());
}
}

View File

@@ -16,20 +16,9 @@
package org.springframework.ws.wsdl.wsdl11.provider;
import java.util.Iterator;
import java.util.Properties;
import javax.wsdl.Binding;
import javax.wsdl.BindingFault;
import javax.wsdl.BindingInput;
import javax.wsdl.BindingOperation;
import javax.wsdl.BindingOutput;
import javax.wsdl.Definition;
import javax.wsdl.Fault;
import javax.wsdl.Input;
import javax.wsdl.Output;
import javax.wsdl.Port;
import javax.wsdl.WSDLException;
import javax.wsdl.*;
import javax.wsdl.extensions.ExtensibilityElement;
import javax.wsdl.extensions.ExtensionRegistry;
import javax.wsdl.extensions.soap.SOAPAddress;
@@ -94,6 +83,7 @@ public class Soap11Provider extends DefaultConcretePartProvider {
* @param soapActions the soap
*/
public void setSoapActions(Properties soapActions) {
Assert.notNull(soapActions, "'soapActions' must not be null");
this.soapActions = soapActions;
}
@@ -113,6 +103,7 @@ public class Soap11Provider extends DefaultConcretePartProvider {
* @param transportUri the binding transport value
*/
public void setTransportUri(String transportUri) {
Assert.notNull(transportUri, "'transportUri' must not be null");
this.transportUri = transportUri;
}
@@ -140,6 +131,7 @@ public class Soap11Provider extends DefaultConcretePartProvider {
*/
@Override
protected void populateBinding(Definition definition, Binding binding) throws WSDLException {
definition.addNamespace(SOAP_11_NAMESPACE_PREFIX, SOAP_11_NAMESPACE_URI);
super.populateBinding(definition, binding);
SOAPBinding soapBinding = (SOAPBinding) createSoapExtension(definition, Binding.class, "binding");
@@ -161,6 +153,7 @@ public class Soap11Provider extends DefaultConcretePartProvider {
* @see #DEFAULT_TRANSPORT_URI
*/
protected void populateSoapBinding(SOAPBinding soapBinding, Binding binding) throws WSDLException {
soapBinding.setStyle("document");
soapBinding.setTransportURI(getTransportUri());
}
@@ -180,6 +173,7 @@ public class Soap11Provider extends DefaultConcretePartProvider {
@Override
protected void populateBindingFault(Definition definition, BindingFault bindingFault, Fault fault)
throws WSDLException {
super.populateBindingFault(definition, bindingFault, fault);
SOAPFault soapFault = (SOAPFault) createSoapExtension(definition, BindingFault.class, "fault");
populateSoapFault(bindingFault, soapFault);
@@ -198,6 +192,7 @@ public class Soap11Provider extends DefaultConcretePartProvider {
* @see SOAPFault#setUse(String)
*/
protected void populateSoapFault(BindingFault bindingFault, SOAPFault soapFault) throws WSDLException {
soapFault.setName(bindingFault.getName());
soapFault.setUse("literal");
}
@@ -217,6 +212,7 @@ public class Soap11Provider extends DefaultConcretePartProvider {
@Override
protected void populateBindingInput(Definition definition, BindingInput bindingInput, Input input)
throws WSDLException {
super.populateBindingInput(definition, bindingInput, input);
SOAPBody soapBody = (SOAPBody) createSoapExtension(definition, BindingInput.class, "body");
populateSoapBody(soapBody);
@@ -252,6 +248,7 @@ public class Soap11Provider extends DefaultConcretePartProvider {
@Override
protected void populateBindingOperation(Definition definition, BindingOperation bindingOperation)
throws WSDLException {
super.populateBindingOperation(definition, bindingOperation);
SOAPOperation soapOperation = (SOAPOperation) createSoapExtension(definition, BindingOperation.class, "operation");
populateSoapOperation(soapOperation, bindingOperation);
@@ -272,6 +269,7 @@ public class Soap11Provider extends DefaultConcretePartProvider {
*/
protected void populateSoapOperation(SOAPOperation soapOperation, BindingOperation bindingOperation)
throws WSDLException {
String bindingOperationName = bindingOperation.getName();
String soapAction = getSoapActions().getProperty(bindingOperationName, "");
soapOperation.setSoapActionURI(soapAction);
@@ -292,6 +290,7 @@ public class Soap11Provider extends DefaultConcretePartProvider {
@Override
protected void populateBindingOutput(Definition definition, BindingOutput bindingOutput, Output output)
throws WSDLException {
super.populateBindingOutput(definition, bindingOutput, output);
SOAPBody soapBody = (SOAPBody) createSoapExtension(definition, BindingOutput.class, "body");
populateSoapBody(soapBody);
@@ -311,7 +310,9 @@ public class Soap11Provider extends DefaultConcretePartProvider {
*/
@Override
protected void populatePort(Definition definition, Port port) throws WSDLException {
for (Object extensibilityElement : port.getBinding().getExtensibilityElements()) {
if (extensibilityElement instanceof SOAPBinding) {
// this is a SOAP 1.1 binding, create a SOAP Address for it
super.populatePort(definition, port);

View File

@@ -16,20 +16,9 @@
package org.springframework.ws.wsdl.wsdl11.provider;
import java.util.Iterator;
import java.util.Properties;
import javax.wsdl.Binding;
import javax.wsdl.BindingFault;
import javax.wsdl.BindingInput;
import javax.wsdl.BindingOperation;
import javax.wsdl.BindingOutput;
import javax.wsdl.Definition;
import javax.wsdl.Fault;
import javax.wsdl.Input;
import javax.wsdl.Output;
import javax.wsdl.Port;
import javax.wsdl.WSDLException;
import javax.wsdl.*;
import javax.wsdl.extensions.ExtensibilityElement;
import javax.wsdl.extensions.soap12.SOAP12Address;
import javax.wsdl.extensions.soap12.SOAP12Binding;
@@ -93,6 +82,7 @@ public class Soap12Provider extends DefaultConcretePartProvider {
* @param soapActions the soap
*/
public void setSoapActions(Properties soapActions) {
Assert.notNull(soapActions, "'soapActions' must not be null");
this.soapActions = soapActions;
}
@@ -112,6 +102,7 @@ public class Soap12Provider extends DefaultConcretePartProvider {
* @param transportUri the binding transport value
*/
public void setTransportUri(String transportUri) {
Assert.notNull(transportUri, "'transportUri' must not be null");
this.transportUri = transportUri;
}
@@ -141,6 +132,7 @@ public class Soap12Provider extends DefaultConcretePartProvider {
*/
@Override
protected void populateBinding(Definition definition, Binding binding) throws WSDLException {
definition.addNamespace(SOAP_12_NAMESPACE_PREFIX, SOAP_12_NAMESPACE_URI);
super.populateBinding(definition, binding);
SOAP12Binding soapBinding = (SOAP12Binding) createSoapExtension(definition, Binding.class, "binding");
@@ -162,6 +154,7 @@ public class Soap12Provider extends DefaultConcretePartProvider {
* @see #DEFAULT_TRANSPORT_URI
*/
protected void populateSoapBinding(SOAP12Binding soapBinding, Binding binding) throws WSDLException {
soapBinding.setStyle("document");
soapBinding.setTransportURI(getTransportUri());
}
@@ -182,6 +175,7 @@ public class Soap12Provider extends DefaultConcretePartProvider {
@Override
protected void populateBindingFault(Definition definition, BindingFault bindingFault, Fault fault)
throws WSDLException {
super.populateBindingFault(definition, bindingFault, fault);
SOAP12Fault soapFault = (SOAP12Fault) createSoapExtension(definition, BindingFault.class, "fault");
populateSoapFault(bindingFault, soapFault);
@@ -200,6 +194,7 @@ public class Soap12Provider extends DefaultConcretePartProvider {
* @see javax.wsdl.extensions.soap.SOAPFault#setUse(String)
*/
protected void populateSoapFault(BindingFault bindingFault, SOAP12Fault soapFault) throws WSDLException {
soapFault.setName(bindingFault.getName());
soapFault.setUse("literal");
}
@@ -220,6 +215,7 @@ public class Soap12Provider extends DefaultConcretePartProvider {
@Override
protected void populateBindingInput(Definition definition, BindingInput bindingInput, Input input)
throws WSDLException {
super.populateBindingInput(definition, bindingInput, input);
SOAP12Body soapBody = (SOAP12Body) createSoapExtension(definition, BindingInput.class, "body");
populateSoapBody(soapBody);
@@ -255,6 +251,7 @@ public class Soap12Provider extends DefaultConcretePartProvider {
@Override
protected void populateBindingOperation(Definition definition, BindingOperation bindingOperation)
throws WSDLException {
super.populateBindingOperation(definition, bindingOperation);
SOAP12Operation soapOperation = (SOAP12Operation) createSoapExtension(definition, BindingOperation.class,
"operation");
@@ -276,6 +273,7 @@ public class Soap12Provider extends DefaultConcretePartProvider {
*/
protected void populateSoapOperation(SOAP12Operation soapOperation, BindingOperation bindingOperation)
throws WSDLException {
String bindingOperationName = bindingOperation.getName();
String soapAction = getSoapActions().getProperty(bindingOperationName, "");
soapOperation.setSoapActionURI(soapAction);
@@ -297,6 +295,7 @@ public class Soap12Provider extends DefaultConcretePartProvider {
@Override
protected void populateBindingOutput(Definition definition, BindingOutput bindingOutput, Output output)
throws WSDLException {
super.populateBindingOutput(definition, bindingOutput, output);
SOAP12Body soapBody = (SOAP12Body) createSoapExtension(definition, BindingOutput.class, "body");
populateSoapBody(soapBody);
@@ -316,7 +315,9 @@ public class Soap12Provider extends DefaultConcretePartProvider {
*/
@Override
protected void populatePort(Definition definition, Port port) throws WSDLException {
for (Object extensibilityElement : port.getBinding().getExtensibilityElements()) {
if (extensibilityElement instanceof SOAP12Binding) {
// this is a SOAP 1.2 binding, create a SOAP Address for it
super.populatePort(definition, port);