[解决]RESTEASY003215: could not find writer for content-type text/html type: java.lang.String

一、问题描述

1)项目一开始采用JAX-RS 2.1+Jersey 2.26调用REST服务能正常调用并获得正确响应;

2)当项目引入dubbo 2.6.2后也用到rest而dubbo要用到RESTEasy,项目就引入了RESTEasy;

3)项目引入RESTEasy后,JAX-RS 2.1+Jersey 2.26调用REST服务出现异常!异常信息如下:

javax.ws.rs.ProcessingException: RESTEASY004655: Unable to invoke requestat org.jboss.resteasy.client.jaxrs.engines.ApacheHttpClient4Engine.invoke(ApacheHttpClient4Engine.java:321)at org.jboss.resteasy.client.jaxrs.internal.ClientInvocation.invoke(ClientInvocation.java:439)at org.jboss.resteasy.client.jaxrs.internal.ClientInvocation.invoke(ClientInvocation.java:61)at org.jboss.resteasy.client.jaxrs.internal.ClientInvocationBuilder.post(ClientInvocationBuilder.java:219)at com.lutao.pigeon.iclient.ibeplus.common.IBEPlusCaller.invoke(IBEPlusCaller.java:63)at com.lutao.pigeon.gds.ibe.service.impl.IbeGdsShoppingService.flightShopping(IbeGdsShoppingService.java:89)at com.lutao.pigeon.gds.resource.impl.GdsShoppingResource.flightShopping(GdsShoppingResource.java:37)at com.lutao.pigeon.gds.resource.impl.GdsShoppingResource$$FastClassBySpringCGLIB$$77b131d0.invoke(<generated>)at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:746)at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:88)at com.lutao.openservice.common.aspect.BaseRestAspectProcessor.syncAroundHandle(BaseRestAspectProcessor.java:340)at com.lutao.openservice.common.aspect.BaseRestAspectProcessor.lambda$asyncAroundHandle$0(BaseRestAspectProcessor.java:267)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)at java.lang.Thread.run(Thread.java:748)
Caused by: javax.ws.rs.ProcessingException: RESTEASY003215: could not find writer for content-type text/html type: java.lang.Stringat org.jboss.resteasy.core.interception.ClientWriterInterceptorContext.throwWriterNotFoundException(ClientWriterInterceptorContext.java:40)at org.jboss.resteasy.core.interception.AbstractWriterInterceptorContext.getWriter(AbstractWriterInterceptorContext.java:146)at org.jboss.resteasy.core.interception.AbstractWriterInterceptorContext.proceed(AbstractWriterInterceptorContext.java:121)at org.jboss.resteasy.client.jaxrs.internal.ClientInvocation.writeRequestBody(ClientInvocation.java:394)at org.jboss.resteasy.client.jaxrs.engines.ApacheHttpClient4Engine.writeRequestBodyToOutputStream(ApacheHttpClient4Engine.java:666)at org.jboss.resteasy.client.jaxrs.engines.ApacheHttpClient4Engine.buildEntity(ApacheHttpClient4Engine.java:631)at org.jboss.resteasy.client.jaxrs.engines.ApacheHttpClient4Engine.loadHttpMethod(ApacheHttpClient4Engine.java:509)at org.jboss.resteasy.client.jaxrs.engines.ApacheHttpClient4Engine.invoke(ApacheHttpClient4Engine.java:310)... 16 more

二、问题分析

1)从异常错误信息看调用REST服务端的代码变成了RESTEasy,而不是原正常的Jersey咯

2)在网上找问题看到一位同学讲把clientConfig参数去掉可解决问题,讲的应该有道这个clientConfig是Jersey包的代码而从异常错信息来看客户端用的是RESTEasy的代码;不过我的有这个clientConfig配置,所以我并没有去验证这位同学讲的解决方法;

3)创建代码,如下:

Client client = ClientBuilder.newBuilder(clientConfig).register(feature).build();

4)阅读 ClientBuilder.newBuilder() 源码发现,ClientBuilder的构建是这样子的:会加载 META-INF/services/javax.ws.rs.client.ClientBuilder 文件的的实现类并使用,如果在META-INF/services/javax.ws.rs.client.ClientBuilder 文件中未加载则默认使用 org.glassfish.jersey.client.JerseyClientBuilder 类;从这个逻辑中看出来之前rest服务正常调用是没有引入RESTEasy jar包,肯定设置使用的是Jersey,猜测RESTEasy jar包中应该有 META-INF/services/javax.ws.rs.client.ClientBuilder 文件并配置了RESTEasy的ClientBuilder的继承类才会导致JAX-RS加载到RESTEasy并使用RESTEasy作为客户端调用REST服务;

5)接着查找一下是否有RESTEasy的META-INF/services/javax.ws.rs.client.ClientBuilder,结果是有的,如下:

6)问题确认了我们就好处理咯。

三、问题解决

1)修改客户代码,指定使用Jersey,如下:

Client client = ClientBuilder.newBuilder(clientConfig).register(feature).build();

改为(直接指定使用JerseyClientBuilder.createClient(...)创建,这样、JAX-RX就不会根据 META-INF/services/javax.ws.rs.client.ClientBuilder 文件中去加载了)

Client client = JerseyClientBuilder.createClient(clientConfig)      .register(feature);

2)修改后,再次调用测试,能正常调用并响应正常。

end.

posted on 2018-10-13 15:18 流易 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/boazy/p/9783007.html

[解决]RESTEASY003215: could not find writer for content-type text/html type: java.lang.String相关推荐

  1. mybaits错误解决:There is no getter for property named 'parentId ' in class 'java.lang.String'

    在使用mybaitis传参数的时候,如果仅传入一个类型为String的参数,那么在 xml文件中应该使用_parameter来代替参数名. 比如mapper中如下方法,只有一个String值 publ ...

  2. 完美解决Invalid layout of java.lang.String at value问题的方法

    完美解决Invalid layout of java.lang.String at value问题的方法 参考文章: (1)完美解决Invalid layout of java.lang.String ...

  3. 解决MyBatis的报错 There is no getter for property named ‘*‘ in ‘class java.lang.String‘

    报错样式: Mapper的内容: 核心问题就是这一句: There is no getter for property named '*' in 'class java.lang.String' 意思 ...

  4. mybatis报错解决办法 :Result Maps collection does not contain value for java.lang.String

    错误 java.lang.IllegalArgumentException: Result Maps collection does not contain value for java.lang.S ...

  5. 解决IntelliJ IDEA报错:调用方法[manageApp]时发生异常java.lang.IllegalStateException: 启动子级时出错

    解决IntelliJ IDEA报错:调用方法[manageApp]时发生异常java.lang.IllegalStateException: 启动子级时出错 问题描述:   笔者将一个在 Tomcat ...

  6. 已解决java.lang.Integer cannot be cast to java.lang.String异常的正确解决方法,亲测有效!!!

    已解决java.lang.Integer cannot be cast to java.lang.String异常的正确解决方法,亲测有效!!! 文章目录 报错问题 解决方法 福利 报错问题 1.在执 ...

  7. 解决Java ,class java.lang.String cannot be cast to class java.lang.Integer

    @[TOC](解决 java.lang.ClassCastException: class java.lang.String cannot be cast to class java.lang.Int ...

  8. ClassCastException: java.lang.String cannot be cast to com.alibaba.fastjson.JSONObject 的解决办法

    问题概述 关于这个问题,是与第三方公司合作,远程调用服务接口时(就相当于调用远程服务提供者)遇到的这个问题," java.lang.ClassCastException: java.lang ...

  9. 升级ambari spark至spark3.0.2 bad substitution 和scala.MatchError: x.x (of class java.lang.String)错误解决

    场景描述:由于业务要求想要使用Hudi,而hudi需要spark2.4.5+版本,canal+kafka+sss+hudi 当前版本: hdp3.1.4 hadoop 3.1.0 hive 3.1.0 ...

  10. 已解决java.lang.ClassCastException: class java.lang.Integer cannot be cast to class java.lang.String异常的

    已解决java.lang.ClassCastException: class java.lang.Integer cannot be cast to class java.lang.String异常的 ...

最新文章

  1. 两个数组的交集 II
  2. c#的chart标题_C#中CHART画图
  3. 单片机断电后不保存程序_51单片机运行过程
  4. Imagenet VGG-19网络加载和特征可视化
  5. python day29
  6. Leetcode1694. 重新格式化电话号码[C++题解]:字符串模拟题
  7. ab753变频器参数怎么拷贝到面板_技术贴:100吨连铸安川变频器的更换
  8. 基于S2SH的电子商务网站系统性能优化
  9. VMware vCloud® Suite 5.5功能介绍
  10. 半夜闲的真是蛋疼。。。决定写个小博文
  11. php mysql 地理位置_MySQL版中国省市区地址地区信息数据表
  12. C/C++[codeup 1397,2020]查找
  13. 电容元器件外观视觉检测系统方案设计-东莞康耐德
  14. ListView分页操作
  15. INT_MAX和INT_MIN的含义和用法
  16. Android ListView下拉刷新
  17. SpringBoot开发详解(三)--SpringBoot配置文件YML注意事项
  18. 相对论通俗演义(1-10) 第九章
  19. 遇一人白首 择一居终老
  20. Python 爬虫实战:分析豆瓣中最新电影的影评(词云显示)

热门文章

  1. hadoop namenode启动不了_hadoop全分布式是个什么鬼?!动手搭建Hadoop(4)
  2. C程序设计--指针(对 “ 数组 ” 进行输入输出操作)
  3. mysql spool csv报错_Oracle使用spool快速导出超大表
  4. mysql in 索引_项目中常用到的 19 条 MySQL 优化
  5. java速成书_java速成----一篇博文搞定基础
  6. php 多选按钮,单选和多选按钮如何给图片加样式
  7. ffmpeg yuv数据存储方式_一文理解 YUV
  8. 中国海洋大学c语言期末题库,中国海洋大学C语言期末笔试2010年秋A试题.doc
  9. 上传文件_Spring Boot文件上传
  10. GCN图卷积网络简单实现