HTTP 400错误请求:javax.ws.rs.BadRequestException [英] HTTP 400 Bad Request : javax.ws.rs.BadRequestException

查看:593
本文介绍了HTTP 400错误请求:javax.ws.rs.BadRequestException的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我创建了一个RESTful Web服务,并编写了一个客户端来使用它.但是当我运行它时,我接受HTTP 400错误请求:javax.ws.rs.BadRequestException exeption.这是我的客户代码:

I create a RESTful web service and write a client to use it . but when I run it i take HTTP 400 Bad Request : javax.ws.rs.BadRequestException exeption . this is my client code :

    String webserviceURI = "http://localhost:8084/fsc-access";

ClientConfig clientConfig = new ClientConfig();
Client client = ClientBuilder.newClient(clientConfig);
URI serviceURI = UriBuilder.fromUri(webserviceURI).build();
WebTarget webTarget = client.target(serviceURI);
MultivaluedMap formData = new MultivaluedMapImpl();
formData.add("plate", plate);
formData.add("startTime", start.toString());
formData.add("endTime", end.toString());
Weightings weightings = new Weightings();
 weightings.getWeightings().addAll((Collection<? extends Weighting>) webTarget.path("rest").path("report").path("loadWeightingByPlate").
        request().accept(MediaType.APPLICATION_XML).post(javax.ws.rs.client.Entity.form(formData), Weightings.class));

这是我的网络服务:

@Path("/report")
public class WeightingRESTfulService {

@POST
@Path("/loadWeightingByPlate")
@Produces(MediaType.APPLICATION_XML)
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
public Weightings LoadWeightingInSpecTimeInSpecPlate(
        @FormParam("plate") String plate,
        @FormParam("startTime") String _startTime,
        @FormParam("endTime") String _endTime,
        @Context HttpServletRequest req) {
    Long startTime = new Long(_startTime);
    Long endTime = new Long(_endTime);
    try {
        Weightings weightings = new Weightings();
        weightings.getWeightings().addAll(Weighting.LoadWeightingInSpecTimeInSpecPlate(startTime, endTime, plate));
        System.out.println("no error");
        return weightings;
    } catch (Exception ex) {
        System.out.println("Exception = " + ex);
        return null;
    }
}
}

任何人都可以帮助我使用此Web服务吗?

can any one help me to use this web Service ?

有一些警告:

2015年8月21日23:18:11.797警告[http-nio-8084-exec-123] org.glassfish.jersey.servlet.WebComponent.filterFormParameters对URI的Servlet请求

21-Aug-2015 23:18:11.797 WARNING [http-nio-8084-exec-123] org.glassfish.jersey.servlet.WebComponent.filterFormParameters A servlet request to the URI http://localhost:8084/fsc-access/rest/report/loadWeightingByPlate contains form parameters in the request body but the request body has been consumed by the servlet or a servlet filter accessing the request parameters. Only resource methods using @FormParam will work as expected. Resource methods consuming the request body by other means will not work as expected.

并且有som exeprions:

and there is som exeprions :

线程"C3P0PooledConnectionPoolManager [identityToken-> 1hge1379bmmvkmpse6n4w | 7936e088] -AdminTaskTimer"中的异常java.lang.IllegalStateException:无法用java.lang.IllegalStateException覆盖原因:非法访问:该Web应用程序实例已被停止.无法加载com.mchange.v2.resourcepool.BasicResourcePool $ 1DestroyResourceTask.最终的后续堆栈跟踪是由出于调试目的引发的错误以及试图终止导致非法访问的线程引起的,并且不具有任何功能影响. 在java.lang.Throwable.initCause(Throwable.java:457) 在org.apache.catalina.loader.WebappClassLoader.checkStateForClassLoading(WebappClassLoader.java:1335) 在org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1216) 在org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1177) 在com.mchange.v2.resourcepool.BasicResourcePool.destroyResource(BasicResourcePool.java:1040) 在com.mchange.v2.resourcepool.BasicResourcePool.removeResource(BasicResourcePool.java:1507) 在com.mchange.v2.resourcepool.BasicResourcePool.removeResource(BasicResourcePool.java:1477) 在com.mchange.v2.resourcepool.BasicResourcePool.cullExpired(BasicResourcePool.java:1565) 在com.mchange.v2.resourcepool.BasicResourcePool.access $ 1900(BasicResourcePool.java:44) 在com.mchange.v2.resourcepool.BasicResourcePool $ CullTask​​.run(BasicResourcePool.java:2089) 在java.util.TimerThread.mainLoop(Timer.java:555) 在java.util.TimerThread.run(Timer.java:505) 引起原因:java.lang.ClassNotFoundException 在org.apache.catalina.loader.WebappClassLoader.checkStateForClassLoading(WebappClassLoader.java:1334) ...另外10个 线程"C3P0PooledConnectionPoolManager [identityToken-> 1hge1379bmmw228sz1sso | 53826b99] -AdminTaskTimer"中的异常java.lang.IllegalStateException:无法用java.lang.IllegalStateException覆盖原因:非法访问:该Web应用程序实例已被停止.无法加载com.mchange.v2.resourcepool.BasicResourcePool $ 1DestroyResourceTask.最终的后续堆栈跟踪是由出于调试目的引发的错误以及试图终止导致非法访问的线程引起的,并且不具有功能影响. 在java.lang.Throwable.initCause(Throwable.java:457) 在org.apache.catalina.loader.WebappClassLoader.checkStateForClassLoading(WebappClassLoader.java:1335) 在org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1216) 在org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1177) 在com.mchange.v2.resourcepool.BasicResourcePool.destroyResource(BasicResourcePool.java:1040) 在com.mchange.v2.resourcepool.BasicResourcePool.removeResource(BasicResourcePool.java:1507) 在com.mchange.v2.resourcepool.BasicResourcePool.removeResource(BasicResourcePool.java:1477) 在com.mchange.v2.resourcepool.BasicResourcePool.cullExpired(BasicResourcePool.java:1565) 在com.mchange.v2.resourcepool.BasicResourcePool.access $ 1900(BasicResourcePool.java:44) 在com.mchange.v2.resourcepool.BasicResourcePool $ CullTask​​.run(BasicResourcePool.java:2089) 在java.util.TimerThread.mainLoop(Timer.java:555) 在java.util.TimerThread.run(Timer.java:505) 引起原因:java.lang.ClassNotFoundException 在org.apache.catalina.loader.WebappClassLoader.checkStateForClassLoading(WebappClassLoader.java:1334) ...还有10个

Exception in thread "C3P0PooledConnectionPoolManager[identityToken->1hge1379bmmvkmpse6n4w|7936e088]-AdminTaskTimer" java.lang.IllegalStateException: Can't overwrite cause with java.lang.IllegalStateException: Illegal access: this web application instance has been stopped already. Could not load com.mchange.v2.resourcepool.BasicResourcePool$1DestroyResourceTask. The eventual following stack trace is caused by an error thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access, and has no functional impact. at java.lang.Throwable.initCause(Throwable.java:457) at org.apache.catalina.loader.WebappClassLoader.checkStateForClassLoading(WebappClassLoader.java:1335) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1216) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1177) at com.mchange.v2.resourcepool.BasicResourcePool.destroyResource(BasicResourcePool.java:1040) at com.mchange.v2.resourcepool.BasicResourcePool.removeResource(BasicResourcePool.java:1507) at com.mchange.v2.resourcepool.BasicResourcePool.removeResource(BasicResourcePool.java:1477) at com.mchange.v2.resourcepool.BasicResourcePool.cullExpired(BasicResourcePool.java:1565) at com.mchange.v2.resourcepool.BasicResourcePool.access$1900(BasicResourcePool.java:44) at com.mchange.v2.resourcepool.BasicResourcePool$CullTask.run(BasicResourcePool.java:2089) at java.util.TimerThread.mainLoop(Timer.java:555) at java.util.TimerThread.run(Timer.java:505) Caused by: java.lang.ClassNotFoundException at org.apache.catalina.loader.WebappClassLoader.checkStateForClassLoading(WebappClassLoader.java:1334) ... 10 more Exception in thread "C3P0PooledConnectionPoolManager[identityToken->1hge1379bmmw228sz1sso|53826b99]-AdminTaskTimer" java.lang.IllegalStateException: Can't overwrite cause with java.lang.IllegalStateException: Illegal access: this web application instance has been stopped already. Could not load com.mchange.v2.resourcepool.BasicResourcePool$1DestroyResourceTask. The eventual following stack trace is caused by an error thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access, and has no functional impact. at java.lang.Throwable.initCause(Throwable.java:457) at org.apache.catalina.loader.WebappClassLoader.checkStateForClassLoading(WebappClassLoader.java:1335) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1216) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1177) at com.mchange.v2.resourcepool.BasicResourcePool.destroyResource(BasicResourcePool.java:1040) at com.mchange.v2.resourcepool.BasicResourcePool.removeResource(BasicResourcePool.java:1507) at com.mchange.v2.resourcepool.BasicResourcePool.removeResource(BasicResourcePool.java:1477) at com.mchange.v2.resourcepool.BasicResourcePool.cullExpired(BasicResourcePool.java:1565) at com.mchange.v2.resourcepool.BasicResourcePool.access$1900(BasicResourcePool.java:44) at com.mchange.v2.resourcepool.BasicResourcePool$CullTask.run(BasicResourcePool.java:2089) at java.util.TimerThread.mainLoop(Timer.java:555) at java.util.TimerThread.run(Timer.java:505) Caused by: java.lang.ClassNotFoundException at org.apache.catalina.loader.WebappClassLoader.checkStateForClassLoading(WebappClassLoader.java:1334) ... 10 more

loggingfilter:

loggingfilter :

22-Aug-2015 00:32:32.969 INFO [http-nio-8084-exec-37] org.glassfish.jersey.filter.LoggingFilter.log 1 * Sending client request on thread http-nio-8084-exec-37
1 > POST http://localhost:8084/fsc-access/rest/report/loadWeightingByPlate
1 > Accept: application/xml
1 > Content-Type: application/x-www-form-urlencoded

22-Aug-2015 00:32:33.015 INFO [http-nio-8084-exec-37] org.glassfish.jersey.filter.LoggingFilter.log 2 * Client response received on thread http-nio-8084-exec-37    
2 < 200
    2 < Content-Length: 1026
    2 < Content-Type: application/xml
    2 < Date: Fri, 21 Aug 2015 19:54:48 GMT
    2 < Server: Apache-Coyote/1.1

推荐答案

您的资源正在返回Weightings的实例,因此您只需要强制转换它,而无需执行addAll()

Your resource is returning an instance of Weightings, so you just need to cast it, you don't need to do the addAll()

Weightings weightings = new Weightings();
 weightings.getWeightings().addAll((Collection<? extends Weighting>) webTarget.path("rest").path("report").path("loadWeightingByPlate").
        request().accept(MediaType.APPLICATION_XML).post(javax.ws.rs.client.Entity.form(formData), Weightings.class));

应该是:

Weightings weightings = (Weightings) webTarget.path("rest").path("report").path("loadWeightingByPlate").
    request().accept(MediaType.APPLICATION_XML).post(javax.ws.rs.client.Entity.form(formData), Weightings.class));

它不会解决您的400个异常,但是如果没有它,您将得到ClassCastException.

It won't fix your 400 exception, but you'll get a ClassCastException without it.

这篇关于HTTP 400错误请求:javax.ws.rs.BadRequestException的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆