I'm not sure if this is a Jaxb problem or not, but when I define the
complex type outside of my element and reference the type from my
element, the element does not get a class generated. Ie:
<xsd:element name="GetWeatherByZipCode"
type="tns:GetWeatherByZipCodeBody" />
<xsd:complexType name="GetWeatherByZipCodeBody">
<xsd:choice>
<xsd:sequence>
<xsd:element minOccurs="0" maxOccurs="1"
name="ZipCode"
type="xsd:string" />
</xsd:sequence>
<xsd:sequence>
<xsd:element minOccurs="0" maxOccurs="1"
name="ZipCodeTest" type="xsd:string" />
</xsd:sequence>
</xsd:choice>
</xsd:complexType>
This only generates a GetWeatherByZipCodeBody class, there is no
GetWeatherByZipCode so I can not reference that in the code itself, thus
the change of the code to point to the Body type.
Thanks,
Eric
On Fri, 2006-12-29 at 12:07 +0000, Karl Palsson wrote:
>
> The parameter needs to be an element, not a type, or at least, it does for
> ws-I, or something like that.
>
> You used to have this right?
>
> <element>
> <complex content>
> </element>
>
> And you made it
>
> <element type=mycomplex>
>
> <complextype name=mycomplex>
>
> And that was done to let xfire see the internal complex type, rather than
> hiding it inside the element anonymously. If I've followed this right so
> far, then you shouldn't have changed _anything_ in the code at all. Did you
> change the type in the code to point to the "Body" type? It should still
> point to the element.
>
> Cheers,
> Karl P
>
>
> > -----Original Message-----
> > From: Eric Miles [mailto:[EMAIL PROTECTED]
> > Sent: Thursday, December 28, 2006 8:45 PM
> > To: [email protected]
> > Subject: Re: [xfire-user] WsGen and anonymous complexTypes
> > with anxsd:choice not generating appropriately -- FOLLOW UP
> >
> > So I was going to attempt to work around this problem by
> > defining my complexType, rather than using an anonymous
> > complexType. I've run across another issue, possibly another
> > bug. When I define the complexType outside of the element
> > and reference the type like so:
> >
> > <xsd:element name="GetWeatherByZipCode"
> > type="tns:GetWeatherByZipCodeBody" />
> >
> > <xsd:complexType name="GetWeatherByZipCodeBody"> <xsd:choice>
> > <xsd:sequence> <xsd:element minOccurs="0" maxOccurs="1" name="ZipCode"
> > type="xsd:string" />
> > </xsd:sequence>
> > <xsd:sequence>
> > <xsd:element minOccurs="0" maxOccurs="1"
> > name="ZipCodeTest" type="xsd:string" />
> > </xsd:sequence>
> > </xsd:choice>
> > </xsd:complexType>
> >
> > ...Alter the code so that it references the new type (did not
> > change the WebParam name or anything, merely referenced the
> > new type) like so:
> >
> > @WebMethod
> > @WebResult(name="GetWeatherByZipCodeResponse")
> > GetWeatherByZipCodeResponse
> > GetWeatherByZipCode(@WebParam(name="GetWeatherByZipCode")
> > GetWeatherByZipCodeBody body, MessageContext context);
> >
> > When the WSDL is generated, it creates a 2nd
> > GetWeatherByZipCode element in my schema (after it uses the
> > schema I provide), like so (snippet):
> >
> > <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
> > xmlns:tns="http://www.webservicex.net"
> > elementFormDefault="qualified"
> > targetNamespace="http://www.webservicex.net">
> >
> > <xsd:element name="GetWeatherByZipCode"
> > type="tns:GetWeatherByZipCodeBody"/>
> >
> > <xsd:complexType name="GetWeatherByZipCodeBody">
> > <xsd:choice>
> > <xsd:sequence>
> > <xsd:element maxOccurs="1"
> > minOccurs="0" name="ZipCode" type="xsd:string"/>
> > </xsd:sequence>
> > <xsd:sequence>
> > <xsd:element maxOccurs="1"
> > minOccurs="0" name="ZipCodeTest" type="xsd:string"/>
> > </xsd:sequence>
> > </xsd:choice>
> > </xsd:complexType>
> >
> > <xsd:element name="GetWeatherByZipCodeResponse">
> > <xsd:complexType>
> > <xsd:sequence>
> > <xsd:element maxOccurs="1"
> > minOccurs="1" name="GetWeatherByZipCodeResult"
> > type="tns:WeatherForecastsType"/>
> > </xsd:sequence>
> > </xsd:complexType>
> > </xsd:element>
> > <xsd:complexType name="WeatherForecastsType">
> > <xsd:sequence>
> > <xsd:element maxOccurs="1"
> > minOccurs="1" name="Latitude" type="xsd:float"/>
> > <xsd:element maxOccurs="1"
> > minOccurs="1" name="Longitude" type="xsd:float"/>
> > <xsd:element maxOccurs="1"
> > minOccurs="1" name="AllocationFactor" type="xsd:float"/>
> > <xsd:element maxOccurs="1"
> > minOccurs="0" name="FipsCode" type="xsd:string"/>
> > <xsd:element maxOccurs="1"
> > minOccurs="0" name="PlaceName" type="xsd:string"/>
> > <xsd:element maxOccurs="1"
> > minOccurs="0" name="StateCode" type="xsd:string"/>
> > <xsd:element maxOccurs="1"
> > minOccurs="0" name="Status" type="xsd:string"/>
> > <xsd:element maxOccurs="1"
> > minOccurs="0" name="Details" type="tns:ArrayOfWeatherData"/>
> > </xsd:sequence>
> > </xsd:complexType>
> > <xsd:complexType name="ArrayOfWeatherData">
> > <xsd:sequence>
> > <xsd:element maxOccurs="unbounded"
> > minOccurs="0" name="WeatherData" type="tns:WeatherData"/>
> > </xsd:sequence>
> > </xsd:complexType>
> > <xsd:complexType name="WeatherData">
> > <xsd:sequence>
> > <xsd:element maxOccurs="1"
> > minOccurs="0" name="Day" type="xsd:string"/>
> > <xsd:element maxOccurs="1"
> > minOccurs="0" name="WeatherImage" type="xsd:string"/>
> > <xsd:element maxOccurs="1"
> > minOccurs="0" name="MaxTemperatureF" type="xsd:string"/>
> > <xsd:element maxOccurs="1"
> > minOccurs="0" name="MinTemperatureF" type="xsd:string"/>
> > <xsd:element maxOccurs="1"
> > minOccurs="0" name="MaxTemperatureC" type="xsd:string"/>
> > <xsd:element maxOccurs="1"
> > minOccurs="0" name="MinTemperatureC" type="xsd:string"/>
> > </xsd:sequence>
> > </xsd:complexType>
> > <xsd:element name="GetWeatherByZipCode"
> > type="tns:GetWeatherByZipCodeBody"/>
> > </xsd:schema>
> > Notice the last <xsd:element />, it's the same as the one
> > I've defined at the top of the schema however this 2nd one is
> > generated and inserted by the WSDL generation code. Why is
> > WSDL generation creating a 2nd element?
> >
> > Any thoughts?
> >
> > Thanks!
> > Eric Miles
> >
> >
> > On Thu, 2006-12-28 at 08:17 -1000, Dan Diephouse wrote:
> >
> >
> > This looks like a bug. Could you please file a JIRA
> > issue for it? If
> > you could attach your WSDL which shows the breakage
> > that'd be much
> > appreciated as well.
> >
> > Regards,
> >
> > - Dan
> >
> > On 12/28/06, Eric Miles <[EMAIL PROTECTED]> wrote:
> > >
> > > When I have an anonymous complexType defined on a
> > Jaxb2 service elemnt with
> > > an xsd:choice indicator, the WsGen task generates
> > clients without
> > > parameters. For example, if I take the
> > WeatherService example provided in
> > > the distribution and run WsGen on it, the resulting
> > interface has the
> > > appropriate in parameters on the web method. Below
> > are the relevant code
> > > snippets:
> > >
> > > xsd:
> > > <xsd:element name="GetWeatherByZipCode">
> > > <xsd:complexType>
> > > <xsd:sequence>
> > > <xsd:element minOccurs="0"
> > maxOccurs="1" name="ZipCode"
> > > type="xsd:string"/>
> > > </xsd:sequence>
> > > </xsd:complexType>
> > > </xsd:element>
> > >
> > > generated interface:
> > > @WebMethod(operationName =
> > "GetWeatherByZipCode", action = "")
> > > @WebResult(name = "GetWeatherByZipCodeResult",
> > targetNamespace =
> > > "http://www.webservicex.net")
> > > public WeatherForecastsType getWeatherByZipCode(
> > > @WebParam(name = "ZipCode", targetNamespace =
> > > "http://www.webservicex.net")
> > > String ZipCode);
> > >
> > >
> > > However, if I add an xsd:choice to the above XSD for the
> > > GetWeatherByZipCode element and run WsGen, I get NO
> > parameters for the
> > > resulting web method. See below for relevant code snippets:
> > >
> > > xsd:
> > > <xsd:element name="GetWeatherByZipCode">
> > > <xsd:complexType>
> > > <xsd:choice>
> > > <xsd:sequence>
> > > <xsd:element minOccurs="0"
> > maxOccurs="1" name="ZipCode"
> > > type="xsd:string"/>
> > > </xsd:sequence>
> > > <xsd:sequence>
> > > <xsd:element minOccurs="0"
> > maxOccurs="1" name="TestZipCode"
> > > type="xsd:string"/>
> > > </xsd:sequence>
> > > </xsd:choice>
> > > </xsd:complexType>
> > > </xsd:element>
> > >
> > > generated interface:
> > > @WebMethod(operationName =
> > "GetWeatherByZipCode", action = "")
> > > @WebResult(name = "GetWeatherByZipCodeResult",
> > targetNamespace =
> > > "http://www.webservicex.net")
> > > public WeatherForecastsType getWeatherByZipCode();
> > >
> > > Is this a bug with WsGen with an anonymous
> > complexType? I believe I tried
> > > this with an identified complexType and it worked
> > correctly. However, that
> > > method is undesirable for my Jaxb definition of my service.
> > >
> > > Thanks,
> > > Eric
> >
> >
> >
> >