Please provide your kind advice to get me solve following problem
My REST web service services have to provide the support for the
content-type "application/x-www-form-urlencoded". So, I have developed my
service as follows.
Contract Definition :
--------------------------
> public class PaymentSandboxService {
>
> @POST
> @Consumes({"application/json", "application/x-www-form-urlencoded"})
> @Produces({"application/json", "application/x-www-form-urlencoded"})
> @Path("/2_1/payment/{endUserId}/transactions/amount")
> public Response charge(@Body
> final AmountTransaction amountTransaction, @PathParam("endUserId")
> final String endUserId) throws IOException {
>
> return null;
> }
> }
Bean Definitions :
-----------------------
> <cxf:rsServer id="rsServer" address="/{{publicAddress}}"
> serviceClass="org.jkd.lrn.PaymentSandboxService"
> loggingFeatureEnabled="true">
> <cxf:providers>
> <ref bean="jsonProvider" />
> <ref bean="formUrlEncodeProvider" />
> </cxf:providers>
> </cxf:rsServer>
> <bean id="jsonProvider"
> class="org.apache.cxf.jaxrs.provider.JSONProvider">
> <property name="marshallAsJaxbElement" value="true" />
> </bean>
>
> <bean id="formUrlEncodeProvider"
> class="org.apache.cxf.jaxrs.provider.FormEncodingProvider" />
When I send a request with Content-Type 'application/json' everything works
fine. But when a request is sent with the Content-Type
'application/x-www-form-urlencoded', request hits the server but it failed
while converting body to the data type AmountTransaction. Following is a
part of log I am getting in fuse.log.
> ID: 17
> Address:
> http://cnb69:8181/cxf/paymentsandbox/2_1/payment/tel:+916309700000/transactions/amount
> Encoding: ISO-8859-1
> Http-Method: POST
> Content-Type: application/x-www-form-urlencoded
> Headers: {Accept=[application/json], accept-encoding=[gzip,deflate],
> Authorization=[Basic a2FzdW5wYXlzYW5kYm94OnBANTV3MHJk],
> connection=[keep-alive], Content-Length=[670],
> content-type=[application/x-www-form-urlencoded], Host=[cnb69:8181],
> User-Agent=[Apache-HttpClient/4.1.1 (java 1.5)]}
> Payload: {
> "amountTransaction": {
> "clientCorrelator": "54321",
> "endUserId": "tel:+916309700000",
> "paymentAmount": {
> "chargingInformation": {
> "amount": "10.2662",
> "currency": "USD",
> "description": [
> "Alien Invaders Game"
> ]
> },
> "chargingMetaData": {
> "onBehalfOf": "Example Games Inc",
> "purchaseCategoryCode": "Game",
> "channel": "SMS",
> "taxAmount": "0"
> }
> },
> "referenceCode": "REF-12345",
> "transactionOperationStatus": "CHARGED"
> }
> }
> --------------------------------------
> 2013-07-05 13:44:27,477 | WARN | qtp1316166688-257 |
> org.apache.cxf.jaxrs.utils.JAXRSUtils | No message body reader has been
> found for request class AmountTransaction, ContentType :
> application/x-www-form-urlencoded.
> 2013-07-05 13:44:27,478 | INFO | qtp1316166688-257 |
> org.apache.cxf.interceptor.AbstractLoggingInterceptor | Outbound Message
> ---------------------------
> ID: 17
> Response-Code: 415
> Content-Type: text/xml
> Headers: {Date=[Fri, 05 Jul 2013 08:14:27 GMT], Content-Length=[0]}
> --------------------------------------
What have I done wrong? Is
"org.apache.cxf.jaxrs.provider.FormEncodingProvider" not the correct
provider for this case? If so, what is the correct way of implementation?
Thanks,
Kasun
--
View this message in context:
http://cxf.547215.n5.nabble.com/Consume-application-x-www-form-urlencoded-Content-Type-in-REST-Web-Service-cxf-rsServer-tp5730399.html
Sent from the cxf-user mailing list archive at Nabble.com.