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

Reply via email to