2016-08-15 2 views
1

Я делаю звонок POST. Вызов работает над одной системой (например, system1) и не работает в другой системе (скажем, system2).Ошибка в заголовке Accept-Encoding в jdk 1.8.0_91

Я получаю следующее сообщение об ошибке:

[2016-08-15 20:22:43.242] [qtp2024542466-14] [ERROR] [c.a.b.e.m.AbstractExceptionMapper] [Error executing rest API.Error Message: Illegal character(s) in message header field: Accept-Encoding:> Req: (POST //backend.morph.ai:8080/rest/panel/auth/signup?)@691675178 [email protected] 
Ref id: 201608152022-695a6dc8-10f6-4382-ae93-de62c84fcc21] [javax.ws.rs.ProcessingException: Illegal character(s) in message header field: Accept-Encoding: 
    at org.glassfish.jersey.client.ClientRuntime.invoke(ClientRuntime.java:263) 
    at org.glassfish.jersey.client.JerseyInvocation$1.call(JerseyInvocation.java:671) 
    at org.glassfish.jersey.client.JerseyInvocation$1.call(JerseyInvocation.java:668) 
    at org.glassfish.jersey.internal.Errors.process(Errors.java:315) 
    at org.glassfish.jersey.internal.Errors.process(Errors.java:297) 
    at org.glassfish.jersey.internal.Errors.process(Errors.java:228) 
    at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:444) 
    at org.glassfish.jersey.client.JerseyInvocation.invoke(JerseyInvocation.java:668) 
    at org.glassfish.jersey.client.JerseyInvocation$Builder.method(JerseyInvocation.java:428) 
    at org.glassfish.jersey.client.JerseyInvocation$Builder.post(JerseyInvocation.java:334) 
    at com-------------------------Internal Class 
    at com-------------------------Internal Class 
    at com-------------------------Internal Class 
    at com-------------------------Internal Class 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at org.glassfish.jersey.server.model.internal.ResourceMethodInvocationHandlerFactory$1.invoke(ResourceMethodInvocationHandlerFactory.java:81) 
    at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher$1.run(AbstractJavaResourceMethodDispatcher.java:144) 
    at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.invoke(AbstractJavaResourceMethodDispatcher.java:161) 
    at org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider$ResponseOutInvoker.doDispatch(JavaResourceMethodDispatcherProvider.java:160) 
    at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.dispatch(AbstractJavaResourceMethodDispatcher.java:99) 
    at org.glassfish.jersey.server.model.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:389) 
    at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:347) 
    at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:102) 
    at org.glassfish.jersey.server.ServerRuntime$2.run(ServerRuntime.java:308) 
    at org.glassfish.jersey.internal.Errors$1.call(Errors.java:271) 
    at org.glassfish.jersey.internal.Errors$1.call(Errors.java:267) 
    at org.glassfish.jersey.internal.Errors.process(Errors.java:315) 
    at org.glassfish.jersey.internal.Errors.process(Errors.java:297) 
    at org.glassfish.jersey.internal.Errors.process(Errors.java:267) 
    at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:317) 
    at org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:291) 
    at org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:1140) 
    at org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:403) 
    at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:386) 
    at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:334) 
    at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:221) 
    at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:816) 
    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1684) 
    at org.tuckey.web.filters.urlrewrite.RuleChain.handleRewrite(RuleChain.java:176) 
    at org.tuckey.web.filters.urlrewrite.RuleChain.doRules(RuleChain.java:145) 
    at org.tuckey.web.filters.urlrewrite.UrlRewriter.processRequest(UrlRewriter.java:92) 
    at org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:394) 
    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1667) 
    at com-------------------------Internal Class 
    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1667) 
    at org.eclipse.jetty.servlets.CrossOriginFilter.handle(CrossOriginFilter.java:275) 
    at org.eclipse.jetty.servlets.CrossOriginFilter.doFilter(CrossOriginFilter.java:238) 
    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1667) 
    at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:581) 
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143) 
    at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:548) 
    at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:226) 
    at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1113) 
    at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:511) 
    at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185) 
    at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1047) 
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) 
    at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:213) 
    at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:109) 
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:119) 
    at org.eclipse.jetty.server.Server.handle(Server.java:517) 
    at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:302) 
    at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:242) 
    at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:238) 
    at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:95) 
    at org.eclipse.jetty.io.SelectChannelEndPoint$2.run(SelectChannelEndPoint.java:57) 
    at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.produceAndRun(ExecuteProduceConsume.java:213) 
    at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.run(ExecuteProduceConsume.java:147) 
    at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:654) 
    at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:572) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: java.lang.IllegalArgumentException: Illegal character(s) in message header field: Accept-Encoding: 
    at sun.net.www.protocol.http.HttpURLConnection.checkMessageHeader(HttpURLConnection.java:489) 
    at sun.net.www.protocol.http.HttpURLConnection.isExternalMessageHeaderAllowed(HttpURLConnection.java:459) 
    at sun.net.www.protocol.http.HttpURLConnection.setRequestProperty(HttpURLConnection.java:3018) 
    at sun.net.www.protocol.https.HttpsURLConnectionImpl.setRequestProperty(HttpsURLConnectionImpl.java:316) 
    at org.glassfish.jersey.client.HttpUrlConnector.setOutboundHeaders(HttpUrlConnector.java:362) 
    at org.glassfish.jersey.client.HttpUrlConnector.access$100(HttpUrlConnector.java:91) 
    at org.glassfish.jersey.client.HttpUrlConnector$4.getOutputStream(HttpUrlConnector.java:325) 
    at org.glassfish.jersey.message.internal.CommittingOutputStream.commitStream(CommittingOutputStream.java:200) 
    at org.glassfish.jersey.message.internal.CommittingOutputStream.commitStream(CommittingOutputStream.java:194) 
    at org.glassfish.jersey.message.internal.CommittingOutputStream.commit(CommittingOutputStream.java:262) 
    at org.glassfish.jersey.message.internal.OutboundMessageContext.commitStream(OutboundMessageContext.java:816) 
    at org.glassfish.jersey.client.ClientRequest.writeEntity(ClientRequest.java:545) 
    at org.glassfish.jersey.client.HttpUrlConnector._apply(HttpUrlConnector.java:329) 
    at org.glassfish.jersey.client.HttpUrlConnector.apply(HttpUrlConnector.java:242) 
    at org.glassfish.jersey.client.ClientRuntime.invoke(ClientRuntime.java:254) 
    ... 73 common frames omitted 

Заголовок

Я посылаю следующий заголовок на обеих системах: Accept-Encoding: gzip, deflate, br

Java версии system1:

java version "1.8.0_51" 
Java(TM) SE Runtime Environment (build 1.8.0_51-b16) 
Java HotSpot(TM) 64-Bit Server VM (build 25.51-b03, mixed mode) 

system2:

openjdk version "1.8.0_91" 
OpenJDK Runtime Environment (build 1.8.0_91-8u91-b14-3ubuntu1~16.04.1-b14) 
OpenJDK 64-Bit Server VM (build 25.91-b14, mixed mode) 

Я также попытался проверить исходный код, в котором брошенную ошибка (код проверки checkMessageHeader метода):

dk8-b91: http://hg.openjdk.java.net/jdk8/jdk8/jdk/file/169451cf0cc5/src/share/classes/sun/net/www/protocol/http/HttpURLConnection.java

jdk8-b51: http://hg.openjdk.java.net/jdk8/jdk8/jdk/file/e865efbc7105/src/share/classes/sun/net/www/protocol/http/HttpURLConnection.java

В обоих файлах исходный код для checkMessageHeader является идентификатором кал. Также исходный код проверяет на \n и бросает ошибку после проверки некоторых условий, но только если присутствует \n. У меня нет ключа \n.

Я не могу понять, в чем проблема? Или как продолжить?

+0

Проверьте содержимое «Accept-Encoding», и если возможно, добавьте его в вопрос – 11thdimension

+0

Я уже добавил, что в вопросе см. Ниже общий стек. Позвольте мне выделить его –

+0

Попробуйте удалить ведущую запятую вместе со всеми пробелами. – 11thdimension

ответ

0

Получил решение для моего дела. Символ ':' создает проблему (по крайней мере, в моем случае).

Если я сделать следующее:

headers.put ("Authorization", Collections.singletonList ("Канал 123"));

Это нормально.

Итак, я думаю, что в исходной проблеме этого потока вместо предоставления ключа как «Accept-Encoding:», если предоставляется «Accept-Encoding», возможно, это может сработать.

Chrees!