Hi Keith,

Can you open a Jira for this issue? I'll see if I can find some time to 
debug before the end of the week.

Thanks,

Lawrence





Keith <[EMAIL PROTECTED]> 
04/02/2008 10:39 PM
Please respond to
[email protected]


To
[email protected]
cc

Subject
Schema resolving issue in Axis2






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]


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to