FYI: The WSDL 2.0 is much clearer on how to import XSDs including the inline
ones.
http://www.w3.org/TR/wsdl20-primer/#adv-multiple-inline-schemas
Thanks,
Raymond
--------------------------------------------------
From: "Raymond Feng" <enjoyj...@gmail.com>
Sent: Thursday, May 07, 2009 10:17 AM
To: <user@tuscany.apache.org>
Subject: Re: Wrong generated WSDL
The <xsd:import> is tricky, especially in a schema that is inlined within
a WSDL file. For example, the WSDL may have the following inline schemas:
<wsdl:definitions ...>
<wsdl:types>
<xsd:schema targetNamespace="http://ns1">
<xsd:import namespace="http://ns2/> <!-- importing the 2nd
inline schema -->
<xsd:import/> <!-- importing the schema with no target
namespace -->
</xsd:schema>
<xsd:schema targetNamespace="http://ns2">
...
</xsd:schema>
<xsd:schema> <!-- no target namespace -->
...
</xsd:schema>
</wsdl:types>
</wsdl:definitions>
Please note there is no schemaLocation as the WSDL spec doesn't define how
to reference an inline schema and the resolution is parser dependent.
I'll check our WSDL generation code to see if it follows the above
example.
Raymond
--------------------------------------------------
From: "Simon Laws" <simonsl...@googlemail.com>
Sent: Thursday, May 07, 2009 8:50 AM
To: <user@tuscany.apache.org>
Subject: Re: Wrong generated WSDL
So what I find with a quick test is the following.
With a bean..
package helloworld;
public class ABean {
protected String field1;
protected String field2;
An a service inteface..
public interface HelloWorldService {
public String getGreetings(String name);
public String getGreetingsBean(ABean bean);
public String getGreetingsBeanArray(ABean[] bean);
}
And a package-info.java
@javax.xml.bind.annotation.XmlSchema(namespace="http://test")
package helloworld;
I get the following generated WSDL types from Tuscany...
<wsdl:types>
<xs:schema targetNamespace="http://test" version="1.0"
xmlns:tns="http://test"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType name="aBean">
<xs:sequence>
<xs:element minOccurs="0" name="field1" type="xs:string"
/>
<xs:element minOccurs="0" name="field2" type="xs:string"
/>
</xs:sequence>
</xs:complexType>
<xs:complexType final="#all" name="aBeanArray">
<xs:sequence>
<xs:element maxOccurs="unbounded" minOccurs="0"
name="item" nillable="true" type="tns:aBean" />
</xs:sequence>
</xs:complexType>
</xs:schema>
<xs:schema attributeFormDefault="qualified"
elementFormDefault="unqualified"
targetNamespace="http://helloworld/"
xmlns:ns0="http://test"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:import namespace="http://test" />
<xs:element name="getGreetingsBean">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="arg0"
nillable="true" type="ns0:aBean" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="getGreetings">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="arg0"
nillable="true" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="getGreetingsResponse">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="return"
nillable="true" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="getGreetingsBeanResponse">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="return"
nillable="true" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="getGreetingsBeanArrayResponse">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="return"
nillable="true" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="getGreetingsBeanArray">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded"
minOccurs="0" name="arg0" nillable="true"
type="ns0:aBean" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
</wsdl:types>
Which validates for me. Haven't actually tries generating a client
from it but it looks OK. So if you can live with this this should get
you going. I'm not sure how to get vectors to work.
We do need a JIRA to cover this very common case as it's a real
gotcha. I note that https://issues.apache.org/jira/browse/TUSCANY-2853
was actually closed when in reality we just use a work around. I'll
reopen it and add some notes.
Simon