Ok...
Miguel

On Fri, Dec 16, 2011 at 5:26 AM, Sergey Beryozkin <[email protected]> wrote:
> Hi
>
> Are you recommending to get all the XML responses from JAX-RS methods
> wrapped up, and similarly unwrapped on the input ?
> We don't really do that in case of JAX-RS, I think it will only introduce
> the problems;
>
> It seems to be of some possible use for cases when we have empty responses
> (@XmlElement) or explicit collections (@XmlElementWrapper) -
> in the latter case you can configure JAXBElementProvider to customize the
> collection wrapper element name - however I can see that @XmlElementWrapper
> can be done too; in the former case the message body writers are not even
> checked if Response entity is empty, so I think you should use
> ResponseHandler if you do need an xml instead
>
> Cheers, Sergey
>
>
>
>
> On 15/12/11 21:49, Miguel Martins Feitosa Filho wrote:
>>
>> Hello CXF Users,
>>
>> Just wanted to get a response in the list for this problem:
>>
>> For SOAP (JAX-WS) calls adding to the SEI*:
>>
>> @WebResult(name="X")
>> @XmlElement(nillable=true)
>> public dataX getDataX() ;
>>
>> when dataX is null produces the nice/desired output:
>> <X xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; xsi:nil="true"/>
>>
>> For REST (JAX-RS) calls the annotation is not considered as it seems
>> JAX-RS does not consider the annotations of the SEI only the
>> annotations in the return type itself (@XmlType, @XmlRootElement), so
>> to get the same output in REST used ResponseHandler as Dan explained
>> in his response copied below:
>>
>> for JAX-RS you can override the Response in ResponseHandler filter, for
>> example:
>> if (Response.getEntity() == null) {
>>   return response.status(status).entity("<myresponse/>").build();
>> }
>>
>> It seems that one should always use a wrapper class for JAX-RS because if
>> :
>>
>> class WrapperX {
>> @XmlElement(nillable=true)
>>  public dataX getItem();
>> }
>> was used as the return type for getDataX above then the annotation
>> above would be considered and work.
>> This is yet another reason why these wrapper classes should be used in
>> REST services as they avoid a lot of issues I have faced recently such
>> as returning collection List and the @XmlElementWrapper annotation.
>>
>> It also seems that it is possible to have a class WrapperX that could
>> return different types of dataX that would be correctly marshalled to
>> XML as their runtime type.
>>
>> If you are using JAXB then the documentation has some interesting
>> examples of these marshalling issues:
>>
>>
>> http://jaxb.java.net/tutorial/section_6_2_7_8-Annotations-for-Mixed-Content-XmlElementRef-XmlMixed.html#Annotations%20for%20Mixed%20Content:%20XmlElementRef,%20XmlMixed
>>
>> Thanks,
>> Miguel
>>
>> *Service Endpoint Interface
>>
>>
>>
>> For REST calls the Respo
>>
>> On Mon, Dec 12, 2011 at 11:10 AM, Miguel Martins Feitosa Filho
>> <[email protected]>  wrote:
>>>
>>> Hello CXF Users,
>>>
>>> If a SEI has annotations of the form:
>>>        @GET
>>>        @Path(" thepath ")
>>>        @WebResult(name = "methodResponseData"")
>>>        @XmlElementWrapper(name = "ListOfMethodResponseData")
>>>       public MethodResponseData" method() throws MyAppException;
>>>
>>> how can we treat the the situation where method returns null?
>>>
>>> With my current cxf-2.5, jdk1.7.0_01 setup the use of null simply
>>> outputs an empty string.
>>>
>>> For REST:
>>> If the return of method() is null the xml outputs nothing (zero bytes).
>>>
>>> For SOAP:
>>> If the return of method() is null the xml is simply the soap envelope
>>> and wrapper.
>>> The wrapper of course appears because I am using the
>>> @SOAPBinding(parameterStyle=ParameterStyle.WRAPPED,use=Use.LITERAL)
>>> annotation.
>>>
>>> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/";>
>>>        <soap:Body>
>>>                <MyApp:methodResponse xmlns:MyApp="http://mynamespace/"/>
>>>        </soap:Body>
>>> </soap:Envelope>
>>>
>>> When using the wsdl2java client code this works as expected and the
>>> return value of the method as created by CXF is null.
>>>
>>> One solution to treat the null return value would be instead to throw
>>> some application exception of the kind ResponseNotFoundException.
>>> Another is to return an empty xml tag such as
>>> <methodResponseData />
>>>
>>> This is more desirable than the exception in the case of our application.
>>>
>>> Question:
>>>
>>> 1) Is it possible to get
>>> REST output of the form:
>>> <methodResponseData />
>>>
>>> and
>>>
>>> SOAP output of the form:
>>> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/";>
>>>        <soap:Body>
>>>                <MyApp:methodResponse xmlns:MyApp="http://mynamespace/";>
>>>                        <methodResponseData/>
>>>              </MyApp:methodResponse>
>>>        </soap:Body>
>>> </soap:Envelope>
>>>
>>> and still have the CXF client return a null method response
>>>
>>> 2) Is the idea to use an empty xml tag to represent null a bad one
>>> such as<methodResponseData/>? Is there a better way to handle this
>>> problem?
>>>
>>> Thank you,
>>>
>>> Miguel Feitosa
>
>
>
> --
> Sergey Beryozkin
>
> Talend Community Coders
> http://coders.talend.com/
>
> Blog: http://sberyozkin.blogspot.com

Reply via email to