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]