Ok, a bit more success now following the various exchanges.

I made two changes to Interface2WSDLGenerator.

1/ I flipped a flag to run the JAXB schema generated against the
wrappers instead of just against the wrapped types
2/ I wrote some code to merge the resulting DOMs if there is a no namespace.

I'm extending the itest/wsdlgen scenario with a helloworld service
that references types as follows

src/main/java
   helloworld/
       ABean.java - a plain POJO
       HelloworldService.java - WSDL will be in namspace ""http://helloworld/";
      pacakge-info.java - force ABean into namespace "http://test";
   anotherpackage
       BBean.java - a plain POJO
       CBean.java - has @XmlType(name="")

This now gives rise to

<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions name="HelloWorldServiceService"
        targetNamespace="http://helloworld/"; xmlns:tns="http://helloworld/";
        xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/";
xmlns:xs="http://www.w3.org/2001/XMLSchema";
        xmlns:SOAP="http://schemas.xmlsoap.org/wsdl/soap/";
xmlns:SOAP11="http://schemas.xmlsoap.org/wsdl/soap/";>
        <wsdl:types>
                <xs:schema targetNamespace="http://helloworld/"; version="1.0"
                        xmlns:ns1="http://test"; xmlns:tns="http://helloworld/";
xmlns:xs="http://www.w3.org/2001/XMLSchema";>
                        <xs:import namespace="http://test"; />
                        <xs:import namespace="http://helloworld/"; />
                        <xs:element name="getGreetings" type="tns:getGreetings" 
/>
                        <xs:element name="getGreetingsBBean" 
type="tns:getGreetingsBBean" />
                        <xs:element name="getGreetingsBBeanResponse"
type="tns:getGreetingsBBeanResponse" />
                        <xs:element name="getGreetingsBean" 
type="tns:getGreetingsBean" />
                        <xs:element name="getGreetingsBeanArray" 
type="tns:getGreetingsBeanArray" />
                        <xs:element name="getGreetingsBeanArrayResponse"
type="tns:getGreetingsBeanArrayResponse" />
                        <xs:element name="getGreetingsBeanResponse"
type="tns:getGreetingsBeanResponse" />
                        <xs:element name="getGreetingsCBean" 
type="tns:getGreetingsCBean" />
                        <xs:element name="getGreetingsCBeanResponse"
type="tns:getGreetingsCBeanResponse" />

                        <xs:element name="getGreetingsResponse" 
type="tns:getGreetingsResponse" />
                        <xs:complexType name="getGreetingsBeanArrayResponse">
                                <xs:sequence>
                                        <xs:element minOccurs="0" name="return" 
type="xs:string" />
                                </xs:sequence>
                        </xs:complexType>
                        <xs:complexType name="getGreetingsBeanArray">
                                <xs:sequence>
                                        <xs:element maxOccurs="unbounded" 
minOccurs="0" name="arg0"
                                                nillable="true" 
type="ns1:aBean" />
                                </xs:sequence>
                        </xs:complexType>
                        <xs:complexType name="getGreetingsBean">
                                <xs:sequence>
                                        <xs:element minOccurs="0" name="arg0" 
type="ns1:aBean" />
                                </xs:sequence>
                        </xs:complexType>
                        <xs:complexType name="getGreetingsCBean">
                                <xs:sequence>
                                        <xs:element minOccurs="0" name="arg0">
                                                <xs:complexType>
                                                        <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:element>
                                </xs:sequence>
                        </xs:complexType>
                        <xs:complexType name="getGreetingsBBeanResponse">
                                <xs:sequence>
                                        <xs:element minOccurs="0" name="return" 
type="xs:string" />
                                </xs:sequence>
                        </xs:complexType>
                        <xs:complexType name="getGreetingsBeanResponse">
                                <xs:sequence>
                                        <xs:element minOccurs="0" name="return" 
type="xs:string" />
                                </xs:sequence>
                        </xs:complexType>
                        <xs:complexType name="getGreetingsResponse">
                                <xs:sequence>
                                        <xs:element minOccurs="0" name="return" 
type="xs:string" />
                                </xs:sequence>
                        </xs:complexType>
                        <xs:complexType name="getGreetings">
                                <xs:sequence>
                                        <xs:element minOccurs="0" name="arg0" 
type="xs:string" />
                                </xs:sequence>
                        </xs:complexType>
                        <xs:complexType name="getGreetingsCBeanResponse">
                                <xs:sequence>
                                        <xs:element minOccurs="0" name="return" 
type="xs:string" />
                                </xs:sequence>
                        </xs:complexType>
                        <xs:complexType name="getGreetingsBBean">
                                <xs:sequence>
                                        <xs:element minOccurs="0" name="arg0" 
type="bBean" />
                                </xs:sequence>
                        </xs:complexType>

                        <xs:complexType name="bBean">
                                <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:schema>
                <xs:schema targetNamespace="http://test"; version="1.0"
                        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:schema>

Still more work to do to update any reference from the merged schema
that occur from anything but the default schema but at least i can see
the light.

Regards

Simon

Reply via email to