This is my current configuration:
<?xml version="1.0" encoding="UTF-8"?> <xsd:schema xmlns="http://stock.com/schemas/services/stock" xmlns:tns="http://stock.com/schemas/services/stock" xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="http://stock.com/schemas/services/stock"> <xsd:element name="Stock"> <xsd:complexType> <xsd:sequence> <xsd:element name="ticker" nillable="true" type="xsd:string"/> <xsd:element maxOccurs="unbounded" minOccurs="0" name="quotes" nillable="true" type="Quote"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:complexType name="Quote"> ........ </xsd:complexType> ....... <xsd:element name="gethighBetaStockResponse"> <xsd:complexType> <xsd:sequence> <xsd:element name="stock" ref="Stock" minOccurs="1" maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType> </xsd:element>
<?xml version="1.0" encoding="UTF-8"?><definitions targetNamespace="http://stock.com/schemas/services/stock/wsdl" .....xmlns:external="http://stock.com/schemas/services/stock" <import namespace="http://stock.com/schemas/services/stock" location="Stock.xsd" /> <message name="getStockQuoteResp"> <part name="parameters" element="external:getStockQuoteResponse" /> </message>
However,the moment ref="Stock" is changed to type="Stock",the wsdl2java starts giving Type {http://stock.com/schemas/services/stock}Stock is referenced but not defined.
Somehow it seems a clash between wsdl and xsd imports - but I just cant resolve it.Help is appreciated.
You have a couple of problems here.
First, the XSD has an issue where an element is both named or referenced; in your case should be referenced.
Change:
<xsd:element name="stock" ref="Stock" minOccurs="1" maxOccurs="unbounded"/>
To:
<xsd:element name="stock" type="Stock" minOccurs="1" maxOccurs="unbounded"/>
And:
Stock
Stock
So:
<xsd:element name="Stock"> <xsd:complexType>
To:
<xsd:complexType name="Stock">
Make sure you fix the xml closing tags.
The second problem is that the correct way to reference an external XSD is to use XSD schema with import/include within a wsdl:types element. wsdl:import is reserved to referencing other WSDL files. More information is available by going through the WS-I specification, section WSDL and Schema Import. Based on WS-I, your case would be:
INCORRECT: (the way you showed it)
<?xml version="1.0" encoding="UTF-8"?> <definitions targetNamespace="http://stock.com/schemas/services/stock/wsdl" .....xmlns:external="http://stock.com/schemas/services/stock" <import namespace="http://stock.com/schemas/services/stock" location="Stock.xsd" /> <message name="getStockQuoteResp"> <part name="parameters" element="external:getStockQuoteResponse" /> </message> </definitions>
CORRECT:
<?xml version="1.0" encoding="UTF-8"?> <definitions targetNamespace="http://stock.com/schemas/services/stock/wsdl" .....xmlns:external="http://stock.com/schemas/services/stock" <types> <schema xmlns="http://www.w3.org/2001/XMLSchema"> <import namespace="http://stock.com/schemas/services/stock" schemaLocation="Stock.xsd" /> </schema> </types> <message name="getStockQuoteResp"> <part name="parameters" element="external:getStockQuoteResponse" /> </message> </definitions>
SOME processors may support both syntaxes. The XSD you put out shows issues, make sure you first validate the XSD.
It would be better if you go the WS-I way when it comes to WSDL authoring.
Other issues may be related to the use of relative vs. absolute URIs in locating external content.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With