You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@cxf.apache.org by Ganesh <so...@gmail.com> on 2012/03/24 12:10:06 UTC

Not able to receive inline JSON response for Multipart API

Hi All,

We have a two issues related to receiving *"application/json"* response from
CXF REST API.

1) When we do a file upload from ajax form submit we are receiving the
inline XML response for successful uploads. But actually we need it as JSON
response to handle in AJAX/JQUERY. 
In the server side api we used *@Consumes("multipart/form-data")* which can
accept file upload along with form data.

We tried to add *@Produces("application/json")* in the server side API.
After adding this we are able to get JSON response, But it's opening in the
popup and asking users to download it. Which is a bad experience to the
user. 

We are looking for the solution to retrieve it as inline rather than asking
download.


2) The second issue is we have an API to download CSV file from server side. 

In the API we used *@Produces("text/csv", "application/json")* and the
response class is *javax.ws.rs.core.Response*

Everything is working fine for the happy flows. But we have a use case to
handle the error scenario and customized error message needs to be displayed
to the user. For this we need to receive the JSON response as inline rather
than asking for download in the popup window. 

Is there any possible solutions to achieve this ?


Could any one please tell us the approach to resolve these issues?


Regards,
Ganesh.

--
View this message in context: http://cxf.547215.n5.nabble.com/Not-able-to-receive-inline-JSON-response-for-Multipart-API-tp5591532p5591532.html
Sent from the cxf-dev mailing list archive at Nabble.com.

Re: CXF and optional entity parameters

Posted by Sergey Beryozkin <sb...@gmail.com>.
Hi Anthony
On 18/04/12 12:32, Muller, Anthony wrote:
> Hello Sergey,
>
> In my usecase, the header I send is 'Content-Length', but header names are not casesentive I think?
>
> Result of logging interceptor:
> Headers: {Accept=[application/xml], connection=[keep-alive], Content-Length=[63], content-type=[application/xml], host=[localhost:9080], user-agent=[Java/1.6.0_25],...
>
I think the headers can be lower-case internally, I recall it was there 
for a long time, but as far as JAX-RS HttpHeaders is concerned (and 
which is used to retrieve Content-Length), it's case-insensitive.
I suspect my original code checking for the empty content was a bit 
primitive, I really hope it has been fixed in the latest 2.3.10 
maintenance release

Cheers, Sergey
> Anthony
>
> -----Original Message-----
> From: Sergey Beryozkin [mailto:sberyozkin@gmail.com]
> Sent: jeudi 29 mars 2012 17:23
> To: users@cxf.apache.org
> Subject: Re: CXF and optional entity parameters
>
> Hi Anthony
> On 29/03/12 15:27, Muller, Anthony wrote:
>> Thanks Sergey, your tip is working perfectly.
>>
> nice, thanks, by the way, I wonder how does HttpServletRequest determine
> the length<= 0, right now JAXBElementProvider checks 'Content-Length',
> do you have it in the lower case format coming in ?
>
> Can you please add the org.apache.cxf.interceptor.LoggingInInterceptor,
> using the "jaxrs.inInterceptors" servlet parameter if using
> CXFNonSpringJaxrsServlet ?
> I was a bit cautious about using InputStream.available() - it does not
> seem to guarantee the data are not actually available if if it returns 0.
>
> Re Nillable - I guess that can be done - it is the default for all the
> providers (if no body is available) except JAXB
>
> Thanks, Sergey
>
>
>
>> Cheers,
>> Anthony
>>
>> import java.io.IOException;
>> import java.io.InputStream;
>> import java.lang.annotation.Annotation;
>> import java.lang.reflect.Type;
>>
>> import javax.ws.rs.core.MediaType;
>> import javax.ws.rs.core.MultivaluedMap;
>>
>> import org.apache.cxf.jaxrs.provider.JAXBElementProvider;
>>
>> public class ExtendedJAXBElementProvider extends JAXBElementProvider {
>>
>> 	@Override
>> 	public Object readFrom(Class<Object>   type, Type genericType, Annotation[] anns, MediaType mt, MultivaluedMap<String, String>   headers, InputStream is) throws IOException {
>> 		if (getContext().getHttpServletRequest().getContentLength()<= 0) {
>> 			return null;
>> 		}
>> 		return super.readFrom(type, genericType, anns, mt, headers, is);
>> 	}
>> }
>>
>>
>> -----Original Message-----
>> From: Muller, Anthony [mailto:anthony.muller@sap.com]
>> Sent: jeudi 29 mars 2012 16:19
>> To: users@cxf.apache.org
>> Subject: RE: CXF and optional entity parameters
>>
>> Hey Sergey,
>>
>> I'm using the version 2.3.8.
>>
>> I'm going to check what I can do with JAXBElementProvider.
>>
>> Note: if I could add something like @Nullable on my parameter, it will be perfect :)
>>
>> Cheers,
>> Anthony
>>
>> -----Original Message-----
>> From: Sergey Beryozkin [mailto:sberyozkin@gmail.com]
>> Sent: mardi 27 mars 2012 17:11
>> To: users@cxf.apache.org
>> Subject: Re: CXF and optional entity parameters
>>
>> Hi
>> On 27/03/12 15:09, Muller, Anthony wrote:
>>> Hello,
>>>
>>> I did not find the answer of this issue.
>>>
>>> Everything works perfectly when "entity" (a JAXB pojo) is not null.
>>>
>>> @Path("/")
>>> public class myClass {
>>>
>>>        @PUT
>>>        @Path("/{p1}/something/{p2}/something/{p3}/something/{p4}")
>>>        @Consumes(MediaType.APPLICATION_XML)
>>>        Response updateStuff(
>>>                        @PathParam("p1") String p1,
>>>                        @PathParam("p2") Long p2,
>>>                        @PathParam("p3") String p3,
>>>                        @PathParam("p4") Long p4,
>>>                        MyEntity entity);
>>> }
>>>
>>> But if I do not send anything about "entity" (because it is optional), I received the bellow error.
>>
>> JAX-RS 1.1 requires 400 returned in cases where an empty payload is
>> presented to JAXB providers, which CXF version are you working with ?
>> Is it 2.3.7 ? I'm seeing JAXBElementProvider checking on Content-Length
>> header, can you please register a LoggingInInterceptor or capture the
>> request with the tcp trace utility and let me know if Content-Length is
>> available ?
>>
>>>
>>> Please can you help me to fix?
>>>
>>
>> If you do expect 'null' then the best thing to do is to register a
>> custom JAXBElementProvider which overrides readFrom(...) and return null
>> if the request is empty, the protected getContext() returning CXF
>> MessageContext will help...
>>
>> Let me know please if you need more info...
>>
>> Sergey
>>
>>> Regards,
>>> Anthony
>>>
>>>
>>> 27 mars 2012 16:03:47 org.apache.cxf.jaxrs.provider.AbstractJAXBProvider handleJAXBException
>>> ATTENTION: javax.xml.bind.UnmarshalException
>>>     - with linked exception:
>>> [com.ctc.wstx.exc.WstxEOFException: Unexpected EOF in prolog
>>>     at [row,col {unknown-source}]: [1,0]]
>>> 	at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.handleStreamException(UnmarshallerImpl.java:426)
>>> 	at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:362)
>>> 	at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:332)
>>> 	at org.apache.cxf.jaxrs.provider.JAXBElementProvider.unmarshalFromInputStream(JAXBElementProvider.java:223)
>>> 	at org.apache.cxf.jaxrs.provider.JAXBElementProvider.doUnmarshal(JAXBElementProvider.java:189)
>>> 	at org.apache.cxf.jaxrs.provider.JAXBElementProvider.readFrom(JAXBElementProvider.java:160)
>>> 	at org.apache.cxf.jaxrs.utils.JAXRSUtils.readFromMessageBody(JAXRSUtils.java:990)
>>> 	at org.apache.cxf.jaxrs.utils.JAXRSUtils.processParameter(JAXRSUtils.java:589)
>>> 	at org.apache.cxf.jaxrs.utils.JAXRSUtils.processParameters(JAXRSUtils.java:554)
>>> 	at org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.processRequest(JAXRSInInterceptor.java:230)
>>> 	at org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.handleMessage(JAXRSInInterceptor.java:88)
>>> 	at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:255)
>>> 	at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:113)
>>> 	at org.apache.cxf.transport.servlet.ServletDestination.invoke(ServletDestination.java:97)
>>> 	at org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:461)
>>> 	at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:149)
>>> 	at org.apache.cxf.transport.servlet.AbstractCXFServlet.invoke(AbstractCXFServlet.java:148)
>>> 	at org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:179)
>>> 	at org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPost(AbstractHTTPServlet.java:103)
>>> 	at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
>>> 	at org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:159)
>>> 	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
>>> 	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
>>> 	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
>>> 	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:185)
>>> 	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
>>> 	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:151)
>>> 	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
>>> 	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
>>> 	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
>>> 	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:405)
>>> 	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:269)
>>> 	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515)
>>> 	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:300)
>>> 	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
>>> 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
>>> 	at java.lang.Thread.run(Thread.java:662)
>>> Caused by: com.ctc.wstx.exc.WstxEOFException: Unexpected EOF in prolog
>>>     at [row,col {unknown-source}]: [1,0]
>>> 	at com.ctc.wstx.sr.StreamScanner.throwUnexpectedEOF(StreamScanner.java:682)
>>> 	at com.ctc.wstx.sr.BasicStreamReader.handleEOF(BasicStreamReader.java:2090)
>>> 	at com.ctc.wstx.sr.BasicStreamReader.nextFromProlog(BasicStreamReader.java:1996)
>>> 	at com.ctc.wstx.sr.BasicStreamReader.next(BasicStreamReader.java:1100)
>>> 	at com.sun.xml.bind.v2.runtime.unmarshaller.StAXStreamConnector.bridge(StAXStreamConnector.java:160)
>>> 	at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:360)
>>> 	... 35 more
>>>
>>>
>>>
>>
>>
>
>



RE: CXF and optional entity parameters

Posted by "Muller, Anthony" <an...@sap.com>.
Hello Sergey,

In my usecase, the header I send is 'Content-Length', but header names are not casesentive I think?

Result of logging interceptor:
Headers: {Accept=[application/xml], connection=[keep-alive], Content-Length=[63], content-type=[application/xml], host=[localhost:9080], user-agent=[Java/1.6.0_25],...

Anthony

-----Original Message-----
From: Sergey Beryozkin [mailto:sberyozkin@gmail.com] 
Sent: jeudi 29 mars 2012 17:23
To: users@cxf.apache.org
Subject: Re: CXF and optional entity parameters

Hi Anthony
On 29/03/12 15:27, Muller, Anthony wrote:
> Thanks Sergey, your tip is working perfectly.
>
nice, thanks, by the way, I wonder how does HttpServletRequest determine 
the length <= 0, right now JAXBElementProvider checks 'Content-Length', 
do you have it in the lower case format coming in ?

Can you please add the org.apache.cxf.interceptor.LoggingInInterceptor, 
using the "jaxrs.inInterceptors" servlet parameter if using 
CXFNonSpringJaxrsServlet ?
I was a bit cautious about using InputStream.available() - it does not 
seem to guarantee the data are not actually available if if it returns 0.

Re Nillable - I guess that can be done - it is the default for all the 
providers (if no body is available) except JAXB

Thanks, Sergey



> Cheers,
> Anthony
>
> import java.io.IOException;
> import java.io.InputStream;
> import java.lang.annotation.Annotation;
> import java.lang.reflect.Type;
>
> import javax.ws.rs.core.MediaType;
> import javax.ws.rs.core.MultivaluedMap;
>
> import org.apache.cxf.jaxrs.provider.JAXBElementProvider;
>
> public class ExtendedJAXBElementProvider extends JAXBElementProvider {
>
> 	@Override
> 	public Object readFrom(Class<Object>  type, Type genericType, Annotation[] anns, MediaType mt, MultivaluedMap<String, String>  headers, InputStream is) throws IOException {
> 		if (getContext().getHttpServletRequest().getContentLength()<= 0) {
> 			return null;
> 		}
> 		return super.readFrom(type, genericType, anns, mt, headers, is);
> 	}
> }
>
>
> -----Original Message-----
> From: Muller, Anthony [mailto:anthony.muller@sap.com]
> Sent: jeudi 29 mars 2012 16:19
> To: users@cxf.apache.org
> Subject: RE: CXF and optional entity parameters
>
> Hey Sergey,
>
> I'm using the version 2.3.8.
>
> I'm going to check what I can do with JAXBElementProvider.
>
> Note: if I could add something like @Nullable on my parameter, it will be perfect :)
>
> Cheers,
> Anthony
>
> -----Original Message-----
> From: Sergey Beryozkin [mailto:sberyozkin@gmail.com]
> Sent: mardi 27 mars 2012 17:11
> To: users@cxf.apache.org
> Subject: Re: CXF and optional entity parameters
>
> Hi
> On 27/03/12 15:09, Muller, Anthony wrote:
>> Hello,
>>
>> I did not find the answer of this issue.
>>
>> Everything works perfectly when "entity" (a JAXB pojo) is not null.
>>
>> @Path("/")
>> public class myClass {
>>
>>       @PUT
>>       @Path("/{p1}/something/{p2}/something/{p3}/something/{p4}")
>>       @Consumes(MediaType.APPLICATION_XML)
>>       Response updateStuff(
>>                       @PathParam("p1") String p1,
>>                       @PathParam("p2") Long p2,
>>                       @PathParam("p3") String p3,
>>                       @PathParam("p4") Long p4,
>>                       MyEntity entity);
>> }
>>
>> But if I do not send anything about "entity" (because it is optional), I received the bellow error.
>
> JAX-RS 1.1 requires 400 returned in cases where an empty payload is
> presented to JAXB providers, which CXF version are you working with ?
> Is it 2.3.7 ? I'm seeing JAXBElementProvider checking on Content-Length
> header, can you please register a LoggingInInterceptor or capture the
> request with the tcp trace utility and let me know if Content-Length is
> available ?
>
>>
>> Please can you help me to fix?
>>
>
> If you do expect 'null' then the best thing to do is to register a
> custom JAXBElementProvider which overrides readFrom(...) and return null
> if the request is empty, the protected getContext() returning CXF
> MessageContext will help...
>
> Let me know please if you need more info...
>
> Sergey
>
>> Regards,
>> Anthony
>>
>>
>> 27 mars 2012 16:03:47 org.apache.cxf.jaxrs.provider.AbstractJAXBProvider handleJAXBException
>> ATTENTION: javax.xml.bind.UnmarshalException
>>    - with linked exception:
>> [com.ctc.wstx.exc.WstxEOFException: Unexpected EOF in prolog
>>    at [row,col {unknown-source}]: [1,0]]
>> 	at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.handleStreamException(UnmarshallerImpl.java:426)
>> 	at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:362)
>> 	at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:332)
>> 	at org.apache.cxf.jaxrs.provider.JAXBElementProvider.unmarshalFromInputStream(JAXBElementProvider.java:223)
>> 	at org.apache.cxf.jaxrs.provider.JAXBElementProvider.doUnmarshal(JAXBElementProvider.java:189)
>> 	at org.apache.cxf.jaxrs.provider.JAXBElementProvider.readFrom(JAXBElementProvider.java:160)
>> 	at org.apache.cxf.jaxrs.utils.JAXRSUtils.readFromMessageBody(JAXRSUtils.java:990)
>> 	at org.apache.cxf.jaxrs.utils.JAXRSUtils.processParameter(JAXRSUtils.java:589)
>> 	at org.apache.cxf.jaxrs.utils.JAXRSUtils.processParameters(JAXRSUtils.java:554)
>> 	at org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.processRequest(JAXRSInInterceptor.java:230)
>> 	at org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.handleMessage(JAXRSInInterceptor.java:88)
>> 	at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:255)
>> 	at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:113)
>> 	at org.apache.cxf.transport.servlet.ServletDestination.invoke(ServletDestination.java:97)
>> 	at org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:461)
>> 	at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:149)
>> 	at org.apache.cxf.transport.servlet.AbstractCXFServlet.invoke(AbstractCXFServlet.java:148)
>> 	at org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:179)
>> 	at org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPost(AbstractHTTPServlet.java:103)
>> 	at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
>> 	at org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:159)
>> 	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
>> 	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
>> 	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
>> 	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:185)
>> 	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
>> 	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:151)
>> 	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
>> 	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
>> 	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
>> 	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:405)
>> 	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:269)
>> 	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515)
>> 	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:300)
>> 	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
>> 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
>> 	at java.lang.Thread.run(Thread.java:662)
>> Caused by: com.ctc.wstx.exc.WstxEOFException: Unexpected EOF in prolog
>>    at [row,col {unknown-source}]: [1,0]
>> 	at com.ctc.wstx.sr.StreamScanner.throwUnexpectedEOF(StreamScanner.java:682)
>> 	at com.ctc.wstx.sr.BasicStreamReader.handleEOF(BasicStreamReader.java:2090)
>> 	at com.ctc.wstx.sr.BasicStreamReader.nextFromProlog(BasicStreamReader.java:1996)
>> 	at com.ctc.wstx.sr.BasicStreamReader.next(BasicStreamReader.java:1100)
>> 	at com.sun.xml.bind.v2.runtime.unmarshaller.StAXStreamConnector.bridge(StAXStreamConnector.java:160)
>> 	at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:360)
>> 	... 35 more
>>
>>
>>
>
>


-- 
Sergey Beryozkin

Talend Community Coders
http://coders.talend.com/

Blog: http://sberyozkin.blogspot.com

Re: CXF and optional entity parameters

Posted by Sergey Beryozkin <sb...@gmail.com>.
On 29/03/12 16:23, Sergey Beryozkin wrote:
> Hi Anthony
> On 29/03/12 15:27, Muller, Anthony wrote:
>> Thanks Sergey, your tip is working perfectly.
>>
> nice, thanks, by the way, I wonder how does HttpServletRequest determine
> the length <= 0, right now JAXBElementProvider checks 'Content-Length',
> do you have it in the lower case format coming in ?
>
> Can you please add the org.apache.cxf.interceptor.LoggingInInterceptor,
> using the "jaxrs.inInterceptors" servlet parameter if using
> CXFNonSpringJaxrsServlet ?
> I was a bit cautious about using InputStream.available() - it does not
> seem to guarantee the data are not actually available if if it returns 0.
>
> Re Nillable - I guess that can be done - it is the default for all the
> providers (if no body is available) except JAXB

That is done - we merged it to 2.3.10-SNAPSHOT too, it's not exactly a 
bug fix, this new annotation :-), but it went along with the possible 
bug fix to do with the Content-Length check, now an explicit conversion 
to Long is done and negative values are also checked...

https://issues.apache.org/jira/browse/CXF-4217

Cheers, Sergey
>
>
>
>> Cheers,
>> Anthony
>>
>> import java.io.IOException;
>> import java.io.InputStream;
>> import java.lang.annotation.Annotation;
>> import java.lang.reflect.Type;
>>
>> import javax.ws.rs.core.MediaType;
>> import javax.ws.rs.core.MultivaluedMap;
>>
>> import org.apache.cxf.jaxrs.provider.JAXBElementProvider;
>>
>> public class ExtendedJAXBElementProvider extends JAXBElementProvider {
>>
>> @Override
>> public Object readFrom(Class<Object> type, Type genericType,
>> Annotation[] anns, MediaType mt, MultivaluedMap<String, String>
>> headers, InputStream is) throws IOException {
>> if (getContext().getHttpServletRequest().getContentLength()<= 0) {
>> return null;
>> }
>> return super.readFrom(type, genericType, anns, mt, headers, is);
>> }
>> }
>>
>>
>> -----Original Message-----
>> From: Muller, Anthony [mailto:anthony.muller@sap.com]
>> Sent: jeudi 29 mars 2012 16:19
>> To: users@cxf.apache.org
>> Subject: RE: CXF and optional entity parameters
>>
>> Hey Sergey,
>>
>> I'm using the version 2.3.8.
>>
>> I'm going to check what I can do with JAXBElementProvider.
>>
>> Note: if I could add something like @Nullable on my parameter, it will
>> be perfect :)
>>
>> Cheers,
>> Anthony
>>
>> -----Original Message-----
>> From: Sergey Beryozkin [mailto:sberyozkin@gmail.com]
>> Sent: mardi 27 mars 2012 17:11
>> To: users@cxf.apache.org
>> Subject: Re: CXF and optional entity parameters
>>
>> Hi
>> On 27/03/12 15:09, Muller, Anthony wrote:
>>> Hello,
>>>
>>> I did not find the answer of this issue.
>>>
>>> Everything works perfectly when "entity" (a JAXB pojo) is not null.
>>>
>>> @Path("/")
>>> public class myClass {
>>>
>>> @PUT
>>> @Path("/{p1}/something/{p2}/something/{p3}/something/{p4}")
>>> @Consumes(MediaType.APPLICATION_XML)
>>> Response updateStuff(
>>> @PathParam("p1") String p1,
>>> @PathParam("p2") Long p2,
>>> @PathParam("p3") String p3,
>>> @PathParam("p4") Long p4,
>>> MyEntity entity);
>>> }
>>>
>>> But if I do not send anything about "entity" (because it is
>>> optional), I received the bellow error.
>>
>> JAX-RS 1.1 requires 400 returned in cases where an empty payload is
>> presented to JAXB providers, which CXF version are you working with ?
>> Is it 2.3.7 ? I'm seeing JAXBElementProvider checking on Content-Length
>> header, can you please register a LoggingInInterceptor or capture the
>> request with the tcp trace utility and let me know if Content-Length is
>> available ?
>>
>>>
>>> Please can you help me to fix?
>>>
>>
>> If you do expect 'null' then the best thing to do is to register a
>> custom JAXBElementProvider which overrides readFrom(...) and return null
>> if the request is empty, the protected getContext() returning CXF
>> MessageContext will help...
>>
>> Let me know please if you need more info...
>>
>> Sergey
>>
>>> Regards,
>>> Anthony
>>>
>>>
>>> 27 mars 2012 16:03:47
>>> org.apache.cxf.jaxrs.provider.AbstractJAXBProvider handleJAXBException
>>> ATTENTION: javax.xml.bind.UnmarshalException
>>> - with linked exception:
>>> [com.ctc.wstx.exc.WstxEOFException: Unexpected EOF in prolog
>>> at [row,col {unknown-source}]: [1,0]]
>>> at
>>> com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.handleStreamException(UnmarshallerImpl.java:426)
>>>
>>> at
>>> com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:362)
>>>
>>> at
>>> com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:332)
>>>
>>> at
>>> org.apache.cxf.jaxrs.provider.JAXBElementProvider.unmarshalFromInputStream(JAXBElementProvider.java:223)
>>>
>>> at
>>> org.apache.cxf.jaxrs.provider.JAXBElementProvider.doUnmarshal(JAXBElementProvider.java:189)
>>>
>>> at
>>> org.apache.cxf.jaxrs.provider.JAXBElementProvider.readFrom(JAXBElementProvider.java:160)
>>>
>>> at
>>> org.apache.cxf.jaxrs.utils.JAXRSUtils.readFromMessageBody(JAXRSUtils.java:990)
>>>
>>> at
>>> org.apache.cxf.jaxrs.utils.JAXRSUtils.processParameter(JAXRSUtils.java:589)
>>>
>>> at
>>> org.apache.cxf.jaxrs.utils.JAXRSUtils.processParameters(JAXRSUtils.java:554)
>>>
>>> at
>>> org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.processRequest(JAXRSInInterceptor.java:230)
>>>
>>> at
>>> org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.handleMessage(JAXRSInInterceptor.java:88)
>>>
>>> at
>>> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:255)
>>>
>>> at
>>> org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:113)
>>>
>>> at
>>> org.apache.cxf.transport.servlet.ServletDestination.invoke(ServletDestination.java:97)
>>>
>>> at
>>> org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:461)
>>>
>>> at
>>> org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:149)
>>>
>>> at
>>> org.apache.cxf.transport.servlet.AbstractCXFServlet.invoke(AbstractCXFServlet.java:148)
>>>
>>> at
>>> org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:179)
>>>
>>> at
>>> org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPost(AbstractHTTPServlet.java:103)
>>>
>>> at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
>>> at
>>> org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:159)
>>>
>>> at
>>> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
>>>
>>> at
>>> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
>>>
>>> at
>>> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
>>>
>>> at
>>> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:185)
>>>
>>> at
>>> org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
>>>
>>> at
>>> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:151)
>>>
>>> at
>>> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
>>>
>>> at
>>> org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
>>>
>>> at
>>> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
>>>
>>> at
>>> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:405)
>>>
>>> at
>>> org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:269)
>>>
>>> at
>>> org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515)
>>>
>>> at
>>> org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:300)
>>>
>>> at
>>> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
>>>
>>> at
>>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
>>>
>>> at java.lang.Thread.run(Thread.java:662)
>>> Caused by: com.ctc.wstx.exc.WstxEOFException: Unexpected EOF in prolog
>>> at [row,col {unknown-source}]: [1,0]
>>> at
>>> com.ctc.wstx.sr.StreamScanner.throwUnexpectedEOF(StreamScanner.java:682)
>>> at
>>> com.ctc.wstx.sr.BasicStreamReader.handleEOF(BasicStreamReader.java:2090)
>>> at
>>> com.ctc.wstx.sr.BasicStreamReader.nextFromProlog(BasicStreamReader.java:1996)
>>>
>>> at com.ctc.wstx.sr.BasicStreamReader.next(BasicStreamReader.java:1100)
>>> at
>>> com.sun.xml.bind.v2.runtime.unmarshaller.StAXStreamConnector.bridge(StAXStreamConnector.java:160)
>>>
>>> at
>>> com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:360)
>>>
>>> ... 35 more
>>>
>>>
>>>
>>
>>
>
>


-- 
Sergey Beryozkin

Talend Community Coders
http://coders.talend.com/

Blog: http://sberyozkin.blogspot.com

Re: CXF and optional entity parameters

Posted by Sergey Beryozkin <sb...@gmail.com>.
Hi Anthony
On 29/03/12 15:27, Muller, Anthony wrote:
> Thanks Sergey, your tip is working perfectly.
>
nice, thanks, by the way, I wonder how does HttpServletRequest determine 
the length <= 0, right now JAXBElementProvider checks 'Content-Length', 
do you have it in the lower case format coming in ?

Can you please add the org.apache.cxf.interceptor.LoggingInInterceptor, 
using the "jaxrs.inInterceptors" servlet parameter if using 
CXFNonSpringJaxrsServlet ?
I was a bit cautious about using InputStream.available() - it does not 
seem to guarantee the data are not actually available if if it returns 0.

Re Nillable - I guess that can be done - it is the default for all the 
providers (if no body is available) except JAXB

Thanks, Sergey



> Cheers,
> Anthony
>
> import java.io.IOException;
> import java.io.InputStream;
> import java.lang.annotation.Annotation;
> import java.lang.reflect.Type;
>
> import javax.ws.rs.core.MediaType;
> import javax.ws.rs.core.MultivaluedMap;
>
> import org.apache.cxf.jaxrs.provider.JAXBElementProvider;
>
> public class ExtendedJAXBElementProvider extends JAXBElementProvider {
>
> 	@Override
> 	public Object readFrom(Class<Object>  type, Type genericType, Annotation[] anns, MediaType mt, MultivaluedMap<String, String>  headers, InputStream is) throws IOException {
> 		if (getContext().getHttpServletRequest().getContentLength()<= 0) {
> 			return null;
> 		}
> 		return super.readFrom(type, genericType, anns, mt, headers, is);
> 	}
> }
>
>
> -----Original Message-----
> From: Muller, Anthony [mailto:anthony.muller@sap.com]
> Sent: jeudi 29 mars 2012 16:19
> To: users@cxf.apache.org
> Subject: RE: CXF and optional entity parameters
>
> Hey Sergey,
>
> I'm using the version 2.3.8.
>
> I'm going to check what I can do with JAXBElementProvider.
>
> Note: if I could add something like @Nullable on my parameter, it will be perfect :)
>
> Cheers,
> Anthony
>
> -----Original Message-----
> From: Sergey Beryozkin [mailto:sberyozkin@gmail.com]
> Sent: mardi 27 mars 2012 17:11
> To: users@cxf.apache.org
> Subject: Re: CXF and optional entity parameters
>
> Hi
> On 27/03/12 15:09, Muller, Anthony wrote:
>> Hello,
>>
>> I did not find the answer of this issue.
>>
>> Everything works perfectly when "entity" (a JAXB pojo) is not null.
>>
>> @Path("/")
>> public class myClass {
>>
>>       @PUT
>>       @Path("/{p1}/something/{p2}/something/{p3}/something/{p4}")
>>       @Consumes(MediaType.APPLICATION_XML)
>>       Response updateStuff(
>>                       @PathParam("p1") String p1,
>>                       @PathParam("p2") Long p2,
>>                       @PathParam("p3") String p3,
>>                       @PathParam("p4") Long p4,
>>                       MyEntity entity);
>> }
>>
>> But if I do not send anything about "entity" (because it is optional), I received the bellow error.
>
> JAX-RS 1.1 requires 400 returned in cases where an empty payload is
> presented to JAXB providers, which CXF version are you working with ?
> Is it 2.3.7 ? I'm seeing JAXBElementProvider checking on Content-Length
> header, can you please register a LoggingInInterceptor or capture the
> request with the tcp trace utility and let me know if Content-Length is
> available ?
>
>>
>> Please can you help me to fix?
>>
>
> If you do expect 'null' then the best thing to do is to register a
> custom JAXBElementProvider which overrides readFrom(...) and return null
> if the request is empty, the protected getContext() returning CXF
> MessageContext will help...
>
> Let me know please if you need more info...
>
> Sergey
>
>> Regards,
>> Anthony
>>
>>
>> 27 mars 2012 16:03:47 org.apache.cxf.jaxrs.provider.AbstractJAXBProvider handleJAXBException
>> ATTENTION: javax.xml.bind.UnmarshalException
>>    - with linked exception:
>> [com.ctc.wstx.exc.WstxEOFException: Unexpected EOF in prolog
>>    at [row,col {unknown-source}]: [1,0]]
>> 	at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.handleStreamException(UnmarshallerImpl.java:426)
>> 	at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:362)
>> 	at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:332)
>> 	at org.apache.cxf.jaxrs.provider.JAXBElementProvider.unmarshalFromInputStream(JAXBElementProvider.java:223)
>> 	at org.apache.cxf.jaxrs.provider.JAXBElementProvider.doUnmarshal(JAXBElementProvider.java:189)
>> 	at org.apache.cxf.jaxrs.provider.JAXBElementProvider.readFrom(JAXBElementProvider.java:160)
>> 	at org.apache.cxf.jaxrs.utils.JAXRSUtils.readFromMessageBody(JAXRSUtils.java:990)
>> 	at org.apache.cxf.jaxrs.utils.JAXRSUtils.processParameter(JAXRSUtils.java:589)
>> 	at org.apache.cxf.jaxrs.utils.JAXRSUtils.processParameters(JAXRSUtils.java:554)
>> 	at org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.processRequest(JAXRSInInterceptor.java:230)
>> 	at org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.handleMessage(JAXRSInInterceptor.java:88)
>> 	at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:255)
>> 	at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:113)
>> 	at org.apache.cxf.transport.servlet.ServletDestination.invoke(ServletDestination.java:97)
>> 	at org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:461)
>> 	at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:149)
>> 	at org.apache.cxf.transport.servlet.AbstractCXFServlet.invoke(AbstractCXFServlet.java:148)
>> 	at org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:179)
>> 	at org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPost(AbstractHTTPServlet.java:103)
>> 	at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
>> 	at org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:159)
>> 	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
>> 	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
>> 	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
>> 	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:185)
>> 	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
>> 	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:151)
>> 	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
>> 	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
>> 	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
>> 	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:405)
>> 	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:269)
>> 	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515)
>> 	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:300)
>> 	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
>> 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
>> 	at java.lang.Thread.run(Thread.java:662)
>> Caused by: com.ctc.wstx.exc.WstxEOFException: Unexpected EOF in prolog
>>    at [row,col {unknown-source}]: [1,0]
>> 	at com.ctc.wstx.sr.StreamScanner.throwUnexpectedEOF(StreamScanner.java:682)
>> 	at com.ctc.wstx.sr.BasicStreamReader.handleEOF(BasicStreamReader.java:2090)
>> 	at com.ctc.wstx.sr.BasicStreamReader.nextFromProlog(BasicStreamReader.java:1996)
>> 	at com.ctc.wstx.sr.BasicStreamReader.next(BasicStreamReader.java:1100)
>> 	at com.sun.xml.bind.v2.runtime.unmarshaller.StAXStreamConnector.bridge(StAXStreamConnector.java:160)
>> 	at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:360)
>> 	... 35 more
>>
>>
>>
>
>


-- 
Sergey Beryozkin

Talend Community Coders
http://coders.talend.com/

Blog: http://sberyozkin.blogspot.com

RE: CXF and optional entity parameters

Posted by "Muller, Anthony" <an...@sap.com>.
Thanks Sergey, your tip is working perfectly.

Cheers,
Anthony

import java.io.IOException;
import java.io.InputStream;
import java.lang.annotation.Annotation;
import java.lang.reflect.Type;

import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.MultivaluedMap;

import org.apache.cxf.jaxrs.provider.JAXBElementProvider;

public class ExtendedJAXBElementProvider extends JAXBElementProvider {

	@Override
	public Object readFrom(Class<Object> type, Type genericType, Annotation[] anns, MediaType mt, MultivaluedMap<String, String> headers, InputStream is) throws IOException {
		if (getContext().getHttpServletRequest().getContentLength() <= 0) {
			return null;
		}
		return super.readFrom(type, genericType, anns, mt, headers, is);
	}
}


-----Original Message-----
From: Muller, Anthony [mailto:anthony.muller@sap.com] 
Sent: jeudi 29 mars 2012 16:19
To: users@cxf.apache.org
Subject: RE: CXF and optional entity parameters

Hey Sergey,

I'm using the version 2.3.8.

I'm going to check what I can do with JAXBElementProvider.

Note: if I could add something like @Nullable on my parameter, it will be perfect :)

Cheers,
Anthony

-----Original Message-----
From: Sergey Beryozkin [mailto:sberyozkin@gmail.com] 
Sent: mardi 27 mars 2012 17:11
To: users@cxf.apache.org
Subject: Re: CXF and optional entity parameters

Hi
On 27/03/12 15:09, Muller, Anthony wrote:
> Hello,
>
> I did not find the answer of this issue.
>
> Everything works perfectly when "entity" (a JAXB pojo) is not null.
>
> @Path("/")
> public class myClass {
>
>      @PUT
>      @Path("/{p1}/something/{p2}/something/{p3}/something/{p4}")
>      @Consumes(MediaType.APPLICATION_XML)
>      Response updateStuff(
>                      @PathParam("p1") String p1,
>                      @PathParam("p2") Long p2,
>                      @PathParam("p3") String p3,
>                      @PathParam("p4") Long p4,
>                      MyEntity entity);
> }
>
> But if I do not send anything about "entity" (because it is optional), I received the bellow error.

JAX-RS 1.1 requires 400 returned in cases where an empty payload is 
presented to JAXB providers, which CXF version are you working with ?
Is it 2.3.7 ? I'm seeing JAXBElementProvider checking on Content-Length
header, can you please register a LoggingInInterceptor or capture the 
request with the tcp trace utility and let me know if Content-Length is 
available ?

>
> Please can you help me to fix?
>

If you do expect 'null' then the best thing to do is to register a 
custom JAXBElementProvider which overrides readFrom(...) and return null 
if the request is empty, the protected getContext() returning CXF 
MessageContext will help...

Let me know please if you need more info...

Sergey

> Regards,
> Anthony
>
>
> 27 mars 2012 16:03:47 org.apache.cxf.jaxrs.provider.AbstractJAXBProvider handleJAXBException
> ATTENTION: javax.xml.bind.UnmarshalException
>   - with linked exception:
> [com.ctc.wstx.exc.WstxEOFException: Unexpected EOF in prolog
>   at [row,col {unknown-source}]: [1,0]]
> 	at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.handleStreamException(UnmarshallerImpl.java:426)
> 	at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:362)
> 	at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:332)
> 	at org.apache.cxf.jaxrs.provider.JAXBElementProvider.unmarshalFromInputStream(JAXBElementProvider.java:223)
> 	at org.apache.cxf.jaxrs.provider.JAXBElementProvider.doUnmarshal(JAXBElementProvider.java:189)
> 	at org.apache.cxf.jaxrs.provider.JAXBElementProvider.readFrom(JAXBElementProvider.java:160)
> 	at org.apache.cxf.jaxrs.utils.JAXRSUtils.readFromMessageBody(JAXRSUtils.java:990)
> 	at org.apache.cxf.jaxrs.utils.JAXRSUtils.processParameter(JAXRSUtils.java:589)
> 	at org.apache.cxf.jaxrs.utils.JAXRSUtils.processParameters(JAXRSUtils.java:554)
> 	at org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.processRequest(JAXRSInInterceptor.java:230)
> 	at org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.handleMessage(JAXRSInInterceptor.java:88)
> 	at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:255)
> 	at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:113)
> 	at org.apache.cxf.transport.servlet.ServletDestination.invoke(ServletDestination.java:97)
> 	at org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:461)
> 	at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:149)
> 	at org.apache.cxf.transport.servlet.AbstractCXFServlet.invoke(AbstractCXFServlet.java:148)
> 	at org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:179)
> 	at org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPost(AbstractHTTPServlet.java:103)
> 	at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
> 	at org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:159)
> 	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
> 	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
> 	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
> 	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:185)
> 	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
> 	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:151)
> 	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
> 	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
> 	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
> 	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:405)
> 	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:269)
> 	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515)
> 	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:300)
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
> 	at java.lang.Thread.run(Thread.java:662)
> Caused by: com.ctc.wstx.exc.WstxEOFException: Unexpected EOF in prolog
>   at [row,col {unknown-source}]: [1,0]
> 	at com.ctc.wstx.sr.StreamScanner.throwUnexpectedEOF(StreamScanner.java:682)
> 	at com.ctc.wstx.sr.BasicStreamReader.handleEOF(BasicStreamReader.java:2090)
> 	at com.ctc.wstx.sr.BasicStreamReader.nextFromProlog(BasicStreamReader.java:1996)
> 	at com.ctc.wstx.sr.BasicStreamReader.next(BasicStreamReader.java:1100)
> 	at com.sun.xml.bind.v2.runtime.unmarshaller.StAXStreamConnector.bridge(StAXStreamConnector.java:160)
> 	at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:360)
> 	... 35 more
>
>
>


-- 
Sergey Beryozkin

Talend Community Coders
http://coders.talend.com/

Blog: http://sberyozkin.blogspot.com

RE: CXF and optional entity parameters

Posted by "Muller, Anthony" <an...@sap.com>.
Hey Sergey,

I'm using the version 2.3.8.

I'm going to check what I can do with JAXBElementProvider.

Note: if I could add something like @Nullable on my parameter, it will be perfect :)

Cheers,
Anthony

-----Original Message-----
From: Sergey Beryozkin [mailto:sberyozkin@gmail.com] 
Sent: mardi 27 mars 2012 17:11
To: users@cxf.apache.org
Subject: Re: CXF and optional entity parameters

Hi
On 27/03/12 15:09, Muller, Anthony wrote:
> Hello,
>
> I did not find the answer of this issue.
>
> Everything works perfectly when "entity" (a JAXB pojo) is not null.
>
> @Path("/")
> public class myClass {
>
>      @PUT
>      @Path("/{p1}/something/{p2}/something/{p3}/something/{p4}")
>      @Consumes(MediaType.APPLICATION_XML)
>      Response updateStuff(
>                      @PathParam("p1") String p1,
>                      @PathParam("p2") Long p2,
>                      @PathParam("p3") String p3,
>                      @PathParam("p4") Long p4,
>                      MyEntity entity);
> }
>
> But if I do not send anything about "entity" (because it is optional), I received the bellow error.

JAX-RS 1.1 requires 400 returned in cases where an empty payload is 
presented to JAXB providers, which CXF version are you working with ?
Is it 2.3.7 ? I'm seeing JAXBElementProvider checking on Content-Length
header, can you please register a LoggingInInterceptor or capture the 
request with the tcp trace utility and let me know if Content-Length is 
available ?

>
> Please can you help me to fix?
>

If you do expect 'null' then the best thing to do is to register a 
custom JAXBElementProvider which overrides readFrom(...) and return null 
if the request is empty, the protected getContext() returning CXF 
MessageContext will help...

Let me know please if you need more info...

Sergey

> Regards,
> Anthony
>
>
> 27 mars 2012 16:03:47 org.apache.cxf.jaxrs.provider.AbstractJAXBProvider handleJAXBException
> ATTENTION: javax.xml.bind.UnmarshalException
>   - with linked exception:
> [com.ctc.wstx.exc.WstxEOFException: Unexpected EOF in prolog
>   at [row,col {unknown-source}]: [1,0]]
> 	at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.handleStreamException(UnmarshallerImpl.java:426)
> 	at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:362)
> 	at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:332)
> 	at org.apache.cxf.jaxrs.provider.JAXBElementProvider.unmarshalFromInputStream(JAXBElementProvider.java:223)
> 	at org.apache.cxf.jaxrs.provider.JAXBElementProvider.doUnmarshal(JAXBElementProvider.java:189)
> 	at org.apache.cxf.jaxrs.provider.JAXBElementProvider.readFrom(JAXBElementProvider.java:160)
> 	at org.apache.cxf.jaxrs.utils.JAXRSUtils.readFromMessageBody(JAXRSUtils.java:990)
> 	at org.apache.cxf.jaxrs.utils.JAXRSUtils.processParameter(JAXRSUtils.java:589)
> 	at org.apache.cxf.jaxrs.utils.JAXRSUtils.processParameters(JAXRSUtils.java:554)
> 	at org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.processRequest(JAXRSInInterceptor.java:230)
> 	at org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.handleMessage(JAXRSInInterceptor.java:88)
> 	at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:255)
> 	at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:113)
> 	at org.apache.cxf.transport.servlet.ServletDestination.invoke(ServletDestination.java:97)
> 	at org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:461)
> 	at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:149)
> 	at org.apache.cxf.transport.servlet.AbstractCXFServlet.invoke(AbstractCXFServlet.java:148)
> 	at org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:179)
> 	at org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPost(AbstractHTTPServlet.java:103)
> 	at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
> 	at org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:159)
> 	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
> 	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
> 	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
> 	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:185)
> 	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
> 	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:151)
> 	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
> 	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
> 	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
> 	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:405)
> 	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:269)
> 	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515)
> 	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:300)
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
> 	at java.lang.Thread.run(Thread.java:662)
> Caused by: com.ctc.wstx.exc.WstxEOFException: Unexpected EOF in prolog
>   at [row,col {unknown-source}]: [1,0]
> 	at com.ctc.wstx.sr.StreamScanner.throwUnexpectedEOF(StreamScanner.java:682)
> 	at com.ctc.wstx.sr.BasicStreamReader.handleEOF(BasicStreamReader.java:2090)
> 	at com.ctc.wstx.sr.BasicStreamReader.nextFromProlog(BasicStreamReader.java:1996)
> 	at com.ctc.wstx.sr.BasicStreamReader.next(BasicStreamReader.java:1100)
> 	at com.sun.xml.bind.v2.runtime.unmarshaller.StAXStreamConnector.bridge(StAXStreamConnector.java:160)
> 	at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:360)
> 	... 35 more
>
>
>


-- 
Sergey Beryozkin

Talend Community Coders
http://coders.talend.com/

Blog: http://sberyozkin.blogspot.com

Re: CXF and optional entity parameters

Posted by Sergey Beryozkin <sb...@gmail.com>.
Hi
On 27/03/12 15:09, Muller, Anthony wrote:
> Hello,
>
> I did not find the answer of this issue.
>
> Everything works perfectly when "entity" (a JAXB pojo) is not null.
>
> @Path("/")
> public class myClass {
>
>      @PUT
>      @Path("/{p1}/something/{p2}/something/{p3}/something/{p4}")
>      @Consumes(MediaType.APPLICATION_XML)
>      Response updateStuff(
>                      @PathParam("p1") String p1,
>                      @PathParam("p2") Long p2,
>                      @PathParam("p3") String p3,
>                      @PathParam("p4") Long p4,
>                      MyEntity entity);
> }
>
> But if I do not send anything about "entity" (because it is optional), I received the bellow error.

JAX-RS 1.1 requires 400 returned in cases where an empty payload is 
presented to JAXB providers, which CXF version are you working with ?
Is it 2.3.7 ? I'm seeing JAXBElementProvider checking on Content-Length
header, can you please register a LoggingInInterceptor or capture the 
request with the tcp trace utility and let me know if Content-Length is 
available ?

>
> Please can you help me to fix?
>

If you do expect 'null' then the best thing to do is to register a 
custom JAXBElementProvider which overrides readFrom(...) and return null 
if the request is empty, the protected getContext() returning CXF 
MessageContext will help...

Let me know please if you need more info...

Sergey

> Regards,
> Anthony
>
>
> 27 mars 2012 16:03:47 org.apache.cxf.jaxrs.provider.AbstractJAXBProvider handleJAXBException
> ATTENTION: javax.xml.bind.UnmarshalException
>   - with linked exception:
> [com.ctc.wstx.exc.WstxEOFException: Unexpected EOF in prolog
>   at [row,col {unknown-source}]: [1,0]]
> 	at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.handleStreamException(UnmarshallerImpl.java:426)
> 	at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:362)
> 	at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:332)
> 	at org.apache.cxf.jaxrs.provider.JAXBElementProvider.unmarshalFromInputStream(JAXBElementProvider.java:223)
> 	at org.apache.cxf.jaxrs.provider.JAXBElementProvider.doUnmarshal(JAXBElementProvider.java:189)
> 	at org.apache.cxf.jaxrs.provider.JAXBElementProvider.readFrom(JAXBElementProvider.java:160)
> 	at org.apache.cxf.jaxrs.utils.JAXRSUtils.readFromMessageBody(JAXRSUtils.java:990)
> 	at org.apache.cxf.jaxrs.utils.JAXRSUtils.processParameter(JAXRSUtils.java:589)
> 	at org.apache.cxf.jaxrs.utils.JAXRSUtils.processParameters(JAXRSUtils.java:554)
> 	at org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.processRequest(JAXRSInInterceptor.java:230)
> 	at org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.handleMessage(JAXRSInInterceptor.java:88)
> 	at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:255)
> 	at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:113)
> 	at org.apache.cxf.transport.servlet.ServletDestination.invoke(ServletDestination.java:97)
> 	at org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:461)
> 	at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:149)
> 	at org.apache.cxf.transport.servlet.AbstractCXFServlet.invoke(AbstractCXFServlet.java:148)
> 	at org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:179)
> 	at org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPost(AbstractHTTPServlet.java:103)
> 	at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
> 	at org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:159)
> 	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
> 	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
> 	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
> 	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:185)
> 	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
> 	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:151)
> 	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
> 	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
> 	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
> 	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:405)
> 	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:269)
> 	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515)
> 	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:300)
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
> 	at java.lang.Thread.run(Thread.java:662)
> Caused by: com.ctc.wstx.exc.WstxEOFException: Unexpected EOF in prolog
>   at [row,col {unknown-source}]: [1,0]
> 	at com.ctc.wstx.sr.StreamScanner.throwUnexpectedEOF(StreamScanner.java:682)
> 	at com.ctc.wstx.sr.BasicStreamReader.handleEOF(BasicStreamReader.java:2090)
> 	at com.ctc.wstx.sr.BasicStreamReader.nextFromProlog(BasicStreamReader.java:1996)
> 	at com.ctc.wstx.sr.BasicStreamReader.next(BasicStreamReader.java:1100)
> 	at com.sun.xml.bind.v2.runtime.unmarshaller.StAXStreamConnector.bridge(StAXStreamConnector.java:160)
> 	at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:360)
> 	... 35 more
>
>
>


-- 
Sergey Beryozkin

Talend Community Coders
http://coders.talend.com/

Blog: http://sberyozkin.blogspot.com

CXF and optional entity parameters

Posted by "Muller, Anthony" <an...@sap.com>.
Hello,

I did not find the answer of this issue.

Everything works perfectly when "entity" (a JAXB pojo) is not null.

@Path("/")
public class myClass {

    @PUT
    @Path("/{p1}/something/{p2}/something/{p3}/something/{p4}")
    @Consumes(MediaType.APPLICATION_XML)
    Response updateStuff(
                    @PathParam("p1") String p1,
                    @PathParam("p2") Long p2,
                    @PathParam("p3") String p3,
                    @PathParam("p4") Long p4,
                    MyEntity entity); 
}

But if I do not send anything about "entity" (because it is optional), I received the bellow error.

Please can you help me to fix?

Regards,
Anthony


27 mars 2012 16:03:47 org.apache.cxf.jaxrs.provider.AbstractJAXBProvider handleJAXBException
ATTENTION: javax.xml.bind.UnmarshalException
 - with linked exception:
[com.ctc.wstx.exc.WstxEOFException: Unexpected EOF in prolog
 at [row,col {unknown-source}]: [1,0]]
	at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.handleStreamException(UnmarshallerImpl.java:426)
	at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:362)
	at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:332)
	at org.apache.cxf.jaxrs.provider.JAXBElementProvider.unmarshalFromInputStream(JAXBElementProvider.java:223)
	at org.apache.cxf.jaxrs.provider.JAXBElementProvider.doUnmarshal(JAXBElementProvider.java:189)
	at org.apache.cxf.jaxrs.provider.JAXBElementProvider.readFrom(JAXBElementProvider.java:160)
	at org.apache.cxf.jaxrs.utils.JAXRSUtils.readFromMessageBody(JAXRSUtils.java:990)
	at org.apache.cxf.jaxrs.utils.JAXRSUtils.processParameter(JAXRSUtils.java:589)
	at org.apache.cxf.jaxrs.utils.JAXRSUtils.processParameters(JAXRSUtils.java:554)
	at org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.processRequest(JAXRSInInterceptor.java:230)
	at org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor.handleMessage(JAXRSInInterceptor.java:88)
	at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:255)
	at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:113)
	at org.apache.cxf.transport.servlet.ServletDestination.invoke(ServletDestination.java:97)
	at org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:461)
	at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:149)
	at org.apache.cxf.transport.servlet.AbstractCXFServlet.invoke(AbstractCXFServlet.java:148)
	at org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:179)
	at org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPost(AbstractHTTPServlet.java:103)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
	at org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:159)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:185)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:151)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:405)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:269)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:300)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:662)
Caused by: com.ctc.wstx.exc.WstxEOFException: Unexpected EOF in prolog
 at [row,col {unknown-source}]: [1,0]
	at com.ctc.wstx.sr.StreamScanner.throwUnexpectedEOF(StreamScanner.java:682)
	at com.ctc.wstx.sr.BasicStreamReader.handleEOF(BasicStreamReader.java:2090)
	at com.ctc.wstx.sr.BasicStreamReader.nextFromProlog(BasicStreamReader.java:1996)
	at com.ctc.wstx.sr.BasicStreamReader.next(BasicStreamReader.java:1100)
	at com.sun.xml.bind.v2.runtime.unmarshaller.StAXStreamConnector.bridge(StAXStreamConnector.java:160)
	at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:360)
	... 35 more




Re: Not able to receive inline JSON response for Multipart API

Posted by Sergey Beryozkin <sb...@gmail.com>.
Hi Ganesh

I'm forwarding it to the users list

I wonder if you are looking for JSONP or similar approaches ?
Have a look at this documentation:

http://cxf.apache.org/docs/jax-rs-data-bindings.html#JAX-RSDataBindings-JSONWithPadding

Cheers, Sergey

On 24/03/12 11:10, Ganesh wrote:
> Hi All,
>
> We have a two issues related to receiving *"application/json"* response from
> CXF REST API.
>
> 1) When we do a file upload from ajax form submit we are receiving the
> inline XML response for successful uploads. But actually we need it as JSON
> response to handle in AJAX/JQUERY.
> In the server side api we used *@Consumes("multipart/form-data")* which can
> accept file upload along with form data.
>
> We tried to add *@Produces("application/json")* in the server side API.
> After adding this we are able to get JSON response, But it's opening in the
> popup and asking users to download it. Which is a bad experience to the
> user.
>
> We are looking for the solution to retrieve it as inline rather than asking
> download.
>
>
> 2) The second issue is we have an API to download CSV file from server side.
>
> In the API we used *@Produces("text/csv", "application/json")* and the
> response class is *javax.ws.rs.core.Response*
>
> Everything is working fine for the happy flows. But we have a use case to
> handle the error scenario and customized error message needs to be displayed
> to the user. For this we need to receive the JSON response as inline rather
> than asking for download in the popup window.
>
> Is there any possible solutions to achieve this ?
>
>
> Could any one please tell us the approach to resolve these issues?
>
>
> Regards,
> Ganesh.
>
> --
> View this message in context: http://cxf.547215.n5.nabble.com/Not-able-to-receive-inline-JSON-response-for-Multipart-API-tp5591532p5591532.html
> Sent from the cxf-dev mailing list archive at Nabble.com.


-- 
Sergey Beryozkin

Talend Community Coders
http://coders.talend.com/

Blog: http://sberyozkin.blogspot.com

Re: Not able to receive inline JSON response for Multipart API

Posted by Sergey Beryozkin <sb...@gmail.com>.
Hi Ganesh

I'm forwarding it to the users list

I wonder if you are looking for JSONP or similar approaches ?
Have a look at this documentation:

http://cxf.apache.org/docs/jax-rs-data-bindings.html#JAX-RSDataBindings-JSONWithPadding

Cheers, Sergey

On 24/03/12 11:10, Ganesh wrote:
> Hi All,
>
> We have a two issues related to receiving *"application/json"* response from
> CXF REST API.
>
> 1) When we do a file upload from ajax form submit we are receiving the
> inline XML response for successful uploads. But actually we need it as JSON
> response to handle in AJAX/JQUERY.
> In the server side api we used *@Consumes("multipart/form-data")* which can
> accept file upload along with form data.
>
> We tried to add *@Produces("application/json")* in the server side API.
> After adding this we are able to get JSON response, But it's opening in the
> popup and asking users to download it. Which is a bad experience to the
> user.
>
> We are looking for the solution to retrieve it as inline rather than asking
> download.
>
>
> 2) The second issue is we have an API to download CSV file from server side.
>
> In the API we used *@Produces("text/csv", "application/json")* and the
> response class is *javax.ws.rs.core.Response*
>
> Everything is working fine for the happy flows. But we have a use case to
> handle the error scenario and customized error message needs to be displayed
> to the user. For this we need to receive the JSON response as inline rather
> than asking for download in the popup window.
>
> Is there any possible solutions to achieve this ?
>
>
> Could any one please tell us the approach to resolve these issues?
>
>
> Regards,
> Ganesh.
>
> --
> View this message in context: http://cxf.547215.n5.nabble.com/Not-able-to-receive-inline-JSON-response-for-Multipart-API-tp5591532p5591532.html
> Sent from the cxf-dev mailing list archive at Nabble.com.


-- 
Sergey Beryozkin

Talend Community Coders
http://coders.talend.com/

Blog: http://sberyozkin.blogspot.com