CXF REST プロバイダーで私が直面している次の問題について、アドバイスを提供していただきありがとうございます。
Apache CXF を使用して REST Web サービス サーバーを開発しました。以下は、契約の定義です。これは Camel コンテキストで使用されることに注意してください。
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定義です:
<cxf:rsServer id="rsServer" address="/{{publicAddress}}" serviceClass="a.b.cPaymentSandboxService"
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" />
Content-Type 'application/json' でリクエストを送信すると、すべて正常に動作します。しかし、Content-Type 'application/x-www-form-urlencoded' でリクエストが送信されると、リクエストはサーバーにヒットしますが、本文を必要なデータ型に変換する際に失敗します。以下は、Fuse esb ログで取得しているログの一部です。
ログの一部:
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]}
--------------------------------------