[解决]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.
转载于:https://www.cnblogs.com/boazy/p/9783007.html
[解决]RESTEASY003215: could not find writer for content-type text/html type: java.lang.String相关推荐
- mybaits错误解决:There is no getter for property named 'parentId ' in class 'java.lang.String'
在使用mybaitis传参数的时候,如果仅传入一个类型为String的参数,那么在 xml文件中应该使用_parameter来代替参数名. 比如mapper中如下方法,只有一个String值 publ ...
- 完美解决Invalid layout of java.lang.String at value问题的方法
完美解决Invalid layout of java.lang.String at value问题的方法 参考文章: (1)完美解决Invalid layout of java.lang.String ...
- 解决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' 意思 ...
- 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 ...
- 解决IntelliJ IDEA报错:调用方法[manageApp]时发生异常java.lang.IllegalStateException: 启动子级时出错
解决IntelliJ IDEA报错:调用方法[manageApp]时发生异常java.lang.IllegalStateException: 启动子级时出错 问题描述: 笔者将一个在 Tomcat ...
- 已解决java.lang.Integer cannot be cast to java.lang.String异常的正确解决方法,亲测有效!!!
已解决java.lang.Integer cannot be cast to java.lang.String异常的正确解决方法,亲测有效!!! 文章目录 报错问题 解决方法 福利 报错问题 1.在执 ...
- 解决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 ...
- ClassCastException: java.lang.String cannot be cast to com.alibaba.fastjson.JSONObject 的解决办法
问题概述 关于这个问题,是与第三方公司合作,远程调用服务接口时(就相当于调用远程服务提供者)遇到的这个问题," java.lang.ClassCastException: java.lang ...
- 升级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 ...
- 已解决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异常的 ...
最新文章
- 两个数组的交集 II
- c#的chart标题_C#中CHART画图
- 单片机断电后不保存程序_51单片机运行过程
- Imagenet VGG-19网络加载和特征可视化
- python day29
- Leetcode1694. 重新格式化电话号码[C++题解]:字符串模拟题
- ab753变频器参数怎么拷贝到面板_技术贴:100吨连铸安川变频器的更换
- 基于S2SH的电子商务网站系统性能优化
- VMware vCloud® Suite 5.5功能介绍
- 半夜闲的真是蛋疼。。。决定写个小博文
- php mysql 地理位置_MySQL版中国省市区地址地区信息数据表
- C/C++[codeup 1397,2020]查找
- 电容元器件外观视觉检测系统方案设计-东莞康耐德
- ListView分页操作
- INT_MAX和INT_MIN的含义和用法
- Android ListView下拉刷新
- SpringBoot开发详解(三)--SpringBoot配置文件YML注意事项
- 相对论通俗演义(1-10) 第九章
- 遇一人白首 择一居终老
- Python 爬虫实战:分析豆瓣中最新电影的影评(词云显示)
热门文章
- hadoop namenode启动不了_hadoop全分布式是个什么鬼?!动手搭建Hadoop(4)
- C程序设计--指针(对 “ 数组 ” 进行输入输出操作)
- mysql spool csv报错_Oracle使用spool快速导出超大表
- mysql in 索引_项目中常用到的 19 条 MySQL 优化
- java速成书_java速成----一篇博文搞定基础
- php 多选按钮,单选和多选按钮如何给图片加样式
- ffmpeg yuv数据存储方式_一文理解 YUV
- 中国海洋大学c语言期末题库,中国海洋大学C语言期末笔试2010年秋A试题.doc
- 上传文件_Spring Boot文件上传
- GCN图卷积网络简单实现