java - cxf webclient - 异常[请求处理失败;嵌套异常是 Status : 406

标签 java rest cxf

我在使用 CXF Webclient 时遇到以下错误(406),但是当我使用 URL api 时,我得到了预期的输出。

INFO: Reloading Context with name [/assignment] is completed
http://localhost:8080/assignment/cxf/login/test/test1
Result--><?xml version="1.0" encoding="UTF-8" standalone="yes"?><user>    <userName>test</userName>    <firstName>Mike</firstName>    <lastName>Tom</lastName></user>
Aug 02, 2013 11:20:31 PM org.apache.cxf.jaxrs.utils.JAXRSUtils findTargetMethod
WARNING: No operation matching request path "/assignment/cxf/login/test/test1" is found, Relative Path: /login/test/test1, HTTP Method: GET, ContentType: */*, Accept: application/xml,. Please enable FINE/TRACE log level for more details.
Aug 02, 2013 11:20:31 PM org.apache.cxf.jaxrs.impl.WebApplicationExceptionMapper toResponse
WARNING: WebApplicationException has been caught : no cause is available
Aug 02, 2013 11:20:31 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [dispatcher] in context with path [/assignment] threw exception [Request processing failed; nested exception is Status : 406
Headers : 
Date : Sat, 03 Aug 2013 04:20:31 GMT
Content-Length : 0
Server : Apache-Coyote/1.1
] with root cause
Status : 406
Headers : 
Date : Sat, 03 Aug 2013 04:20:31 GMT
Content-Length : 0
Server : Apache-Coyote/1.1

    at org.apache.cxf.jaxrs.client.WebClient.doInvoke(WebClient.java:680)
    at org.apache.cxf.jaxrs.client.WebClient.invoke(WebClient.java:324)
    at org.apache.cxf.jaxrs.client.WebClient.get(WebClient.java:421)
    at com.viasat.test.login.servlet.LoginServlet.processLogin(LoginServlet.java:45)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

我的客户端代码是:

        URL url = new URL("http://localhost:8080/assignment/cxf/login/"+name+"/"+password);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod("GET");
        conn.setRequestProperty("Accept", "application/json");
         BufferedReader br = new BufferedReader(new InputStreamReader(
            (conn.getInputStream())));
        StringBuilder res = new StringBuilder();
        String output;
        while ((output = br.readLine()) != null) {
            res.append(output);
        }
        System.out.println("Result-->"+res.toString());
        WebClient webClient = WebClient.create("http://localhost:8080/assignment/cxf/login/"+name+"/"+password);            
    //  WebClient t = webClient.path("");
        String res = webClient.accept("text/xml").get(String.class);
        System.out.println("=============="+res);

休息端点服务类:

@GET
    @Path("/login/{userName}/{password}")
    @Produces({MediaType.APPLICATION_JSON, MediaType.TEXT_XML })
    public String userLogin(@PathParam("userName")String username, @PathParam("password")String password)
            throws JAXBException, PropertyException, FileNotFoundException {

问题

1)我需要进行哪些更改才能修复错误

2)要以 Json 形式返回,我需要进行哪些更改?如果我写 conn.setRequestProperty("Accept", "application/xml"); 我收到错误。

最佳答案

找到解决方案:

客户端更改:

WebClient webClient = WebClient.create("http://localhost:8080/assignment/cxf/login/test/test1");            
String res = webClient.accept("application/xml").get(String.class);

此处而不是 String res = webClient.accept("text/xml").get(String.class); 制作

 String res = webClient.accept("application/xml").get(String.class);

服务类别更改:

    @GET
    @Path("/login/{userName}/{password}")
    @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
    @Consumes({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
    public String userLogin(@PathParam("userName")String username, @PathParam("password")String password)

在 userLogin 方法中更改了 MediaType.APPLICATION_XML 而不是 MediaType.TEXT_XML

关于java - cxf webclient - 异常[请求处理失败;嵌套异常是 Status : 406,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18029237/

相关文章:

java - 从另一个类调用方法来获取 x 和 y 问题

java - Android:系统覆盖

spring - Apache CXF 管道匹配策略

java - 单击 fragment ListView 上的项目后如何刷新数据

java - 我们如何在 CrudRepository 中实现自定义查找方法以仅从数据库中获取特定列?

android - 用于 native 客户端(android、iOS)的超媒体 API?

Java Rest - 使用 GET 方法发送参数化列表

rest - 我应该如何将 SAML 登录与 REST API + SPA 应用程序一起使用?

java - WebServiceContext 在 Apache cxf Web 服务中为空

java - Apache CXF 设置上传大小