2012-09-18 24 views
2

我使用球衣客戶端向POST服務器發送POST請求。我在請求和響應中都使用了JAXB對象。球衣文字/ html郵件正文作者缺失

public RegisterUserResponse apply(RegisterUserRequest input) { 

    logger.debug("sending user authentication request"); 
    return webResource. 
      path(requestPath). 
      path(registerUserPath). 
      accept(MediaType.TEXT_HTML).  // set response content type 
      type(MediaType.APPLICATION_XML).  // set request content type 
      post(RegisterUserResponse.class, input); 
} 

這裏兩個RegisterUserRequest/Response類都是xml註釋的。

什麼我得到的響應是一個text/html的響應是在可轉換回RegistrationResponse

我收到一個錯誤說RegistrationResponse和文本/ HTML郵件正文的格式的XML字符串作家缺失。什麼可以解決這個問題。

我的異常堆棧跟蹤如下:

DEBUG RegisterUser - sending user registration request 
com.sun.jersey.api.client.ClientHandlerException: com.sun.jersey.api.client.ClientHandlerException: A message body writer for Java type, RegisterUserRequest, and MIME media type, text/html, was not found 
    at com.sun.jersey.client.urlconnection.URLConnectionClientHandler.handle(URLConnectionClientHandler.java:151) 
    at com.sun.jersey.api.client.Client.handle(Client.java:648) 
    at com.sun.jersey.api.client.WebResource.handle(WebResource.java:680) 
    at com.sun.jersey.api.client.WebResource.access$200(WebResource.java:74) 
    at com.sun.jersey.api.client.WebResource$Builder.post(WebResource.java:568) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:601) 
    at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:74) 
    at org.testng.internal.Invoker.invokeMethod(Invoker.java:673) 
    at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:846) 
    at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1170) 
    at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:125) 
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:109) 
    at org.testng.TestRunner.runWorkers(TestRunner.java:1147) 
    at org.testng.TestRunner.privateRun(TestRunner.java:749) 
    at org.testng.TestRunner.run(TestRunner.java:600) 
    at org.testng.SuiteRunner.runTest(SuiteRunner.java:317) 
    at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:312) 
    at org.testng.SuiteRunner.privateRun(SuiteRunner.java:274) 
    at org.testng.SuiteRunner.run(SuiteRunner.java:223) 
    at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52) 
    at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86) 
    at org.testng.TestNG.runSuitesSequentially(TestNG.java:1039) 
    at org.testng.TestNG.runSuitesLocally(TestNG.java:964) 
    at org.testng.TestNG.run(TestNG.java:900) 
    at org.testng.remote.RemoteTestNG.run(RemoteTestNG.java:110) 
    at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:205) 
    at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:174) 
    at org.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:111) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:601) 
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120) 
Caused by: com.sun.jersey.api.client.ClientHandlerException: A message body writer for Java type, RegisterUserRequest, and MIME media type, text/html, was not found 
    at com.sun.jersey.api.client.RequestWriter.writeRequestEntity(RequestWriter.java:288) 
    at com.sun.jersey.client.urlconnection.URLConnectionClientHandler._invoke(URLConnectionClientHandler.java:213) 
    at com.sun.jersey.client.urlconnection.URLConnectionClientHandler.handle(URLConnectionClientHandler.java:149) 
    ... 38 more 

回答

1

看來好像JAX-RS /澤西不會爲text/html媒體類型使用JAXB默認。您可以利用標準的MessageBodyReader/MessageBodyWriter機制來插入您自己的對利用JAXB的媒體類型的處理。

下面是一個答案我給包括樣本MessageBodyReader鏈接: