Ok thanks for the reply.
Actually my Response object does not have only 1 field, it has more (i
simplified my example)
so 2) and 3) won't work.
For 1) yes it would work but actually i don't understand why by default 2
wrapping elements
are created for the response object (in Wrapped mode). As i said, for the
response object i get
the following structure :
<reponse xmlns="urn:mynamespace">
<return>
<field1>field1Value</field1>
<field2>field2Value</field2>
</return>
</response>
With a Response class like the following one :
@XmlAccessorType(AccessType.FIELD)
public class Response {
private String field1;
private String field2;
}
and the wsdl:part is the following :
<wsdl:message name="Response">
<wsdl:part element="tns:response" name="parameters">
</wsdl:part>
</wsdl:message>
referring to these types:
<xsd:element name="response" type="tns:Response"></xsd:element>
<xsd:complexType name="Response">
<xsd:sequence>
<xsd:element minOccurs="0" name="return"
type="ns0:Response"></xsd:element>
</xsd:sequence>
</xsd:complexType>
I wanted to get rid of the <return> element which i found useless using my
own Response wrapper but
i didn't manage to accomplish it. The generated WSDL looked fine but at
runtime my fields do not appear
in the response element when the method is invoked. I guess i'll have to
switch to BARE mode to make it work.
Luc
On Tue, Sep 28, 2010 at 4:16 PM, Daniel Kulp <[email protected]> wrote:
>
> A few thoughts:
>
> 1) You may just want to switch to BARE mode where you would have complete
> control over the JAXB objects used to form the request/response.
>
> 2) Why not just return a String from the method?
> @WebReturn(name="message")
> String generateResponse(..);
>
> 3) You MAY be able to do this with the wrapper like:
> @XmlElement(name="message")
> Response response
>
> and then adding an @XmlValue to the message thing in the Reponse. Not
> really
> sure though.
>
> Dan
>
>
> On Tuesday 28 September 2010 9:38:33 am Luc Dewavrin wrote:
> > Hi,
> >
> > i wanted to control the WSDL from a JAXWS webservice endpoint and used a
> > ResponseWrapper in order to do that.
> > I didn't like the generated WSDL since it used a wrapping "return"
> element
> > for the type of the wsdl:part for the response
> > and wanted to get rid of it.
> > The response element looked like this:
> > <response>
> > <return>
> > <message></message>
> > </return>
> > </reponse>
> >
> > All i want is a more "direct" type for the reponse without the <return>
> > element.
> > I thought about using a ResponseWrapper and created one:
> >
> > @ResponseWrapper(className="test.ResponseWrapper")
> > Response generateResponse()
> >
> > The generated WSDL looks fine since the type defined in the
> ResponseWrapper
> > is used directly (no more
> > wrapping element).
> >
> > Here's the content of the ReponseWrapper:
> > package test;
> >
> > @XmlRootElement
> > @XmlType(propOrder = {"message"})
> > @XmlAccessorType(XmlAccessType.FIELD)
> > public class ResponseWrapper {
> > @XmlElement(name="message")
> > private String message;
> > public String getMessage() {
> > return message;
> > }
> >
> > public void setMessage(String aMessage) {
> > message=aMessage;
> > }
> >
> > public void setResponse(Response response) {
> > this.message=response.getMessage();
> > }
> >
> > public Response getResponse() {
> > return new Response(message);
> > }
> >
> > }
> >
> > But when i invoke the webservice i never see the <message> element. The
> > field does not appear in the response.
> > Maybe i don't understand the usage of the ResponseWrapper and haven't
> found
> > much information on it .
> > I added a breakpoint in the setResponse method but it's never reached.
> >
> > Thanks in advance,
> > Luc
>
> --
> Daniel Kulp
> [email protected]
> http://dankulp.com/blog
>