Hi all,

This is regarding http://issues.apache.org/jira/browse/AXIS2-3379. I
have attached both the WSDL and the schema for this scenario. The WSDL
is available at
http://localhost:8080/axis2/services/calculatorImportSchema?wsdl2 and
the schema is available at
http://localhost:8080/axis2/services/calculatorImportSchema?xsd=xsd0.xsd.

It looks like a problems occurs because the schema import. I set
http://localhost:8080/axis2/services/calculatorImportSchema?wsdl2 as the
baseURI hence this should resolve to the correct schemaLocation where
the schema is located at. However  I do get an error when I try to
perform the following operation, here messageReference is an
InterfaceMessageReference.

String messageContentModelName = messageReference.getMessageCont
entModel();
        QName elementQName = null;

        if
(WSDL2Constants.NMTOKEN_ELEMENT.equals(messageContentModelName)) {
            ElementDeclaration elementDeclaration =
messageReference.getElementDeclaration();
            if (elementDeclaration == null) {
                InterfaceMessageReferenceElement messageReferenceElement =
                        messageReference.toElement();
                QName qName =
messageReferenceElement.getElement().getQName();
                throw new AxisFault("Unable to find element " +
qName.toString() + " reffered to by operation " +
axisOperation.getName().getLocalPart());
            }
            elementQName = elementDeclaration.getName();
        } else if
(WSDL2Constants.NMTOKEN_ANY.equals(messageContentModelName)) {
            elementQName = Constants.XSD_ANY;
        }

When the above is performed I get a AxisFault because the
elementDeclaration is null. And Axis2 fails saying
org.apache.axis2.AxisFault: org.apache.axis2.AxisFault: Unable to find
element {http://charitha.org/}addition reffered to by operation addition

This is clearly a problem with schema resolving. I'm not sure weather
this is a woden bug or an issue in the way axis2 reads the WSDL. Here is
the code we use to read the WSDL,

private Description readInTheWSDLFile(String wsdlURI) throws
WSDLException, AxisFault {

        DocumentBuilderFactory documentBuilderFactory =
DocumentBuilderFactory
                .newInstance();
        documentBuilderFactory.setNamespaceAware(true);
        DocumentBuilder documentBuilder;
        Document document;

        try {
            documentBuilder = documentBuilderFactory.newDocumentBuilder();
            document = documentBuilder.parse(wsdlURI);
        } catch (ParserConfigurationException e) {
            throw AxisFault.makeFault(e);
        } catch (IOException e) {
            throw AxisFault.makeFault(e);
        } catch (SAXException e) {
            throw AxisFault.makeFault(e);

        }
        return readInTheWSDLFile(document);
    }

private Description readInTheWSDLFile(Document document) throws
WSDLException {
        WSDLReader reader = DOMWSDLFactory.newInstance().newWSDLReader();
        if (customWSDLResolver != null) {
            reader.setURIResolver(customWSDLResolver);
        }
        // This turns on WSDL validation which is set off by default.
        reader.setFeature(WSDLReader.FEATURE_VALIDATION, true);

        WSDLSource wsdlSource = reader.createWSDLSource();
        wsdlSource.setSource(document.getDocumentElement());
        if (getBaseUri() != null && !"".equals(getBaseUri())) {
            try {
                wsdlSource.setBaseURI(new URI(getBaseUri()));
            } catch (URISyntaxException e) {
                AxisFault.makeFault(e);
            }
        }
        if (log.isDebugEnabled()) {
            log.debug("Reading 2.0 WSDL with wsdl uri = " + wsdlURI);
            log.debug("  the stack at this point is: " + stackToString());
        }
        return reader.readWSDL(wsdlSource);
    }

Your help in this regard is appreciated.

Thanks,
Keith.

Keith Chapman
Software Engineer
WSO2 Inc.
Oxygenating the Web Service Platform.
http://wso2.org/

blog: http://www.keith-chapman.org
<wsdl2:description xmlns:wsdl2="http://www.w3.org/ns/wsdl"; 
xmlns:tns="http://charitha.org/"; xmlns:wsoap="http://www.w3.org/ns/wsdl/soap"; 
xmlns:wrpc="http://www.w3.org/ns/wsdl/rpc"; xmlns:ns0="http://charitha.org"; 
xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl"; 
xmlns:wsdlx="http://www.w3.org/ns/wsdl-extensions"; 
xmlns:xsd="http://www.w3.org/2001/XMLSchema"; 
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"; 
xmlns:whttp="http://www.w3.org/ns/wsdl/http"; 
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"; 
targetNamespace="http://charitha.org/";><wsdl2:documentation>This is a sample 
wsdl for testing contract first 
approach</wsdl2:documentation><wsdl2:types><xsd:schema 
attributeFormDefault="unqualified" elementFormDefault="unqualified" 
targetNamespace="http://charitha.org";>
<xsd:import namespace="http://charitha.org/"; 
schemaLocation="calculatorImportSchema?xsd=xsd0.xsd"/>
</xsd:schema></wsdl2:types><wsdl2:interface 
name="calculatorportType"><wsdl2:operation name="addition" 
style="http://www.w3.org/ns/wsdl/style/rpc http://www.w3.org/ns/wsdl/style/iri 
http://www.w3.org/ns/wsdl/style/multipart"; wrpc:signature="x #in y #in 
addreturn #return " pattern="http://www.w3.org/ns/wsdl/in-out";><wsdl2:input 
element="tns:addition" wsaw:Action="urn:addition"/><wsdl2:output 
element="tns:additionResponse" 
wsaw:Action="http://charitha.org/calculatorportType/additionResponse"/></wsdl2:operation><wsdl2:operation
 name="multiplication" style="http://www.w3.org/ns/wsdl/style/rpc 
http://www.w3.org/ns/wsdl/style/iri http://www.w3.org/ns/wsdl/style/multipart"; 
wrpc:signature="a #in b #in multiplyreturn #return " 
pattern="http://www.w3.org/ns/wsdl/in-out";><wsdl2:input 
element="tns:multiplication" wsaw:Action="urn:multiplication"/><wsdl2:output 
element="tns:multiplicationResponse" 
wsaw:Action="http://charitha.org/calculatorportType/multiplicationResponse"/></wsdl2:operati
 on><wsdl2:operation name="division" style="http://www.w3.org/ns/wsdl/style/rpc 
http://www.w3.org/ns/wsdl/style/iri http://www.w3.org/ns/wsdl/style/multipart"; 
wrpc:signature="k #in l #in divreturn #return " 
pattern="http://www.w3.org/ns/wsdl/in-out";><wsdl2:input element="tns:division" 
wsaw:Action="urn:division"/><wsdl2:output element="tns:divisionResponse" 
wsaw:Action="http://charitha.org/calculatorportType/divisionResponse"/></wsdl2:operation></wsdl2:interface><wsdl2:binding
 name="calculatorSOAP" interface="tns:calculatorportType" 
type="http://www.w3.org/ns/wsdl/soap"; wsoap:version="1.1"><wsdl2:operation 
ref="tns:addition" wsoap:action="urn:addition"/><wsdl2:operation 
ref="tns:multiplication" wsoap:action="urn:multiplication"/><wsdl2:operation 
ref="tns:division" wsoap:action="urn:division"/></wsdl2:binding><wsdl2:service 
name="calculatorImportSchema" 
interface="tns:calculatorportType"><wsdl2:endpoint name="calculatorSOAP11_http" 
binding="tns:calculatorSOAP" address="http://l
 
ocalhost:9762/services/calculatorImportSchema"/></wsdl2:service></wsdl2:description>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"; 
xmlns:tns="http://charitha.org/"; attributeFormDefault="unqualified" 
elementFormDefault="qualified" targetNamespace="http://charitha.org/";>
<xsd:element name="division">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="k" type="xsd:double"/>
<xsd:element name="l" type="xsd:double"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="divisionResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="divreturn" type="xsd:double"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="addition">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="x" type="xsd:int"/>
<xsd:element name="y" type="xsd:int"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="additionResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="addreturn" type="xsd:int"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="multiplication">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="a" type="xsd:int"/>
<xsd:element name="b" type="xsd:int"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="multiplicationResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="multiplyreturn" type="xsd:int"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to