// import the service or reference interface portType
List<WSDLDefinition> imports = new ArrayList<WSDLDefinition>();
Interface interfaze = wsBinding.getBindingInterfaceContract().getInterface();
if (interfaze instanceof WSDLInterface) {
PortType portType = ((WSDLInterface)interfaze).getPortType();
boolean ok = importPortType(portType, wsdlDefinition, newDef, imports);
if (!ok) {
error(monitor, "PortTypeNotFound", wsBinding, portType.getQName().toString(),
component.getName(), contract.getName());
}
}
// import an existing binding if specified
Binding binding = wsBinding.getBinding();
if (binding != null) {
boolean ok = importBinding(binding, wsdlDefinition, newDef, imports);
if (ok) {
boolean ok2 = importPortType(binding.getPortType(), wsdlDefinition, newDef, imports);
if (!ok2) {
error(monitor, "PortTypeNotFound", wsBinding, binding.getPortType().getQName().toString(),
component.getName(), contract.getName());
}
} else {
error(monitor, "BindingNotFound", wsBinding, binding.getQName().toString(),
component.getName(), contract.getName());
}
}
// import bindings and portTypes needed by services and ports
QName serviceQName = wsBinding.getServiceName();
String portName = wsBinding.getPortName();
if (serviceQName != null) {
Service service = def.getService(serviceQName);
if (portName != null) {
Port port = service.getPort(portName);
Port newPort = copyPort(newDef, port, wsBinding);
if (newPort != null) {
importBinding(port.getBinding(), wsdlDefinition, newDef, imports);
ports.add(newPort);
} else {
error(monitor, "InvalidPort", wsBinding, serviceQName.toString(), portName,
component.getName(), contract.getName());
}
} else {
for (Object port : service.getPorts().values()) {
Port newPort = copyPort(newDef, (Port)port, wsBinding);
if (newPort != null) {
importBinding(((Port)port).getBinding(), wsdlDefinition, newDef, imports);
ports.add(newPort);
} else {
// not an error, just ignore the port
warning(monitor, "IgnoringPort", wsBinding, serviceQName.toString(), ((Port)port).getName(),
component.getName(), contract.getName());
}
}
if (ports.size() == 0) {
error(monitor, "NoValidPorts", wsBinding, serviceQName.toString(),
component.getName(), contract.getName());
}
}
}
// replace original WSDL definition by the generated definition
def = newDef;
} else {
// The WSDL definition was generated by Interface2WSDLGenerator.
// Reuse it instead of creating a new definition here.
}
// add a service and ports to the generated definition
WSDLDefinitionGenerator helper =
new WSDLDefinitionGenerator(BindingWSDLGenerator.requiresSOAP12(wsBinding));
WSDLInterface wi = (WSDLInterface)wsBinding.getBindingInterfaceContract().getInterface();
PortType portType = wi.getPortType();
Service service = helper.createService(def, portType);
if (wsBinding.getBinding() == null && ports.size() == 0) {
Binding binding = helper.createBinding(def, portType);
if (BindingWSDLGenerator.requiresSOAP12(wsBinding)) {
def.addNamespace("soap12", "http://schemas.xmlsoap.org/wsdl/soap12/");