Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Fixed
-
Java-SCA-1.3
-
None
-
None
-
Patch Available
Description
I attempted to package a WSDL in a contribution that was previously generated using the WSDL deployment process of binding.ws and received a ContributionException with the following cause:
org.apache.tuscany.sca.interfacedef.wsdl.impl.InvalidWSDLException: The fault message MUST have a single part .
In this case I was attempting to use interface.wsdl with empty binding.ws with the following SCDL:
<?xml version="1.0" encoding="UTF-8"?>
<composite xmlns="http://www.osoa.org/xmlns/sca/1.0"
targetNamespace="http://www.ibm.com/samples/sca/calculator"
name="CalculatorLocatorComposite">
<component name="CalculatorLocatorComponent">
<implementation.java class="calculator.CalculatorLocatorImpl"/>
<reference name="calculator" target="CalculatorComponent">
<interface.wsdl interface="http://calculator/#wsdl.interface(CalculatorService)"/>
<binding.ws/>
</reference>
</component>
</composite>
The failure occurs during wsdlFactory.createWSDLInterface in WSDLInterfaceProcessor
private WSDLInterface resolveWSDLInterface(WSDLInterface wsdlInterface, ModelResolver resolver) throws ContributionResolveException {
if (wsdlInterface != null && wsdlInterface.isUnresolved()) {
// Resolve the WSDL interface
wsdlInterface = resolver.resolveModel(WSDLInterface.class, wsdlInterface);
if (wsdlInterface.isUnresolved()) {
// If the WSDL interface has never been resolved yet, do it now
// First, resolve the WSDL definition for the given namespace
WSDLDefinition wsdlDefinition = wsdlFactory.createWSDLDefinition();
wsdlDefinition.setUnresolved(true);
wsdlDefinition.setNamespace(wsdlInterface.getName().getNamespaceURI());
WSDLDefinition resolved = resolver.resolveModel(WSDLDefinition.class, wsdlDefinition);
if (!resolved.isUnresolved()) {
wsdlDefinition.setDefinition(resolved.getDefinition());
wsdlDefinition.setLocation(resolved.getLocation());
wsdlDefinition.setURI(resolved.getURI());
wsdlDefinition.getImportedDefinitions().addAll(resolved.getImportedDefinitions());
wsdlDefinition.getXmlSchemas().addAll(resolved.getXmlSchemas());
wsdlDefinition.setUnresolved(false);
WSDLObject<PortType> portType = wsdlDefinition.getWSDLObject(PortType.class, wsdlInterface.getName());
if (portType != null) {
// Introspect the WSDL portType and add the resulting
// WSDLInterface to the resolver
try
catch (InvalidInterfaceException e)
{ ContributionResolveException ce = new ContributionResolveException(e); error("ContributionResolveException", wsdlFactory, ce); //throw ce; }
}
I am attaching the generated WSDL.
Attachments
Attachments
Issue Links
- duplicates
-
TUSCANY-2398 Problem with using interface.java on reference when using interface.wsdl in service with a doc/lit/bare wsdl
- Resolved