Generated WSDL fails to resolve when packaged in contribution
--------------------------------------------------------------
Key: TUSCANY-2558
URL: https://issues.apache.org/jira/browse/TUSCANY-2558
Project: Tuscany
Issue Type: Bug
Affects Versions: Java-SCA-1.3
Reporter: Lou Amodeo
Attachments: calculator.CalculatorService.wsdl
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 {
wsdlDefinition.setDefinition(portType.getDefinition());
wsdlInterface =
wsdlFactory.createWSDLInterface(portType.getElement(), wsdlDefinition,
resolver);
wsdlInterface.setWsdlDefinition(wsdlDefinition);
resolver.addModel(wsdlInterface);
} catch (InvalidInterfaceException e) {
ContributionResolveException ce = new
ContributionResolveException(e);
error("ContributionResolveException",
wsdlFactory, ce);
//throw ce;
}
}
I am attaching the generated WSDL.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.