java RESTEasy客户端。找不到contenttype应用程序/xml的编写器
我正在尝试使用RESTeasy连接到web服务
我使用的代码如下:
WebTarget resource = client.target(URL_DISPLAY);
Builder request = resource.request(MediaType.APPLICATION_XML);
long startTime = System.currentTimeMillis();
ClientResponse response = (ClientResponse)request.post(Entity.xml(text));
我一在eclipse中运行该程序,它就开始工作了
当我生成一个可运行的jar,或者甚至从控制台运行java时,它不起作用。堆栈跟踪如下所示:
javax.ws.rs.ProcessingException: Unable to invoke request
at org.jboss.resteasy.client.jaxrs.engines.ApacheHttpClient4Engine.invoke(ApacheHttpClient4Engine.java:287)
at org.jboss.resteasy.client.jaxrs.internal.ClientInvocation.invoke(ClientInvocation.java:407)
at org.jboss.resteasy.client.jaxrs.internal.ClientInvocationBuilder.post(ClientInvocationBuilder.java:195)
at webservices.WebServicesTest.requestDisplay(WebServicesTest.java:144)
at webservices.WebServicesTest.main(WebServicesTest.java:328)
Caused by: javax.ws.rs.ProcessingException: could not find writer for content-type application/xml type: webservices.DisplayText
at org.jboss.resteasy.core.interception.ClientWriterInterceptorContext.throwWriterNotFoundException(ClientWriterInterceptorContext.java:40)
at org.jboss.resteasy.core.interception.AbstractWriterInterceptorContext.getWriter(AbstractWriterInterceptorContext.java:138)
at org.jboss.resteasy.core.interception.AbstractWriterInterceptorContext.proceed(AbstractWriterInterceptorContext.java:117)
at org.jboss.resteasy.plugins.interceptors.encoding.GZIPEncodingInterceptor.aroundWriteTo(GZIPEncodingInterceptor.java:100)
at org.jboss.resteasy.core.interception.AbstractWriterInterceptorContext.proceed(AbstractWriterInterceptorContext.java:122)
at org.jboss.resteasy.client.jaxrs.internal.ClientInvocation.writeRequestBody(ClientInvocation.java:341)
at org.jboss.resteasy.client.jaxrs.engines.ApacheHttpClient4Engine.writeRequestBodyToOutputStream(ApacheHttpClient4Engine.java:558)
at org.jboss.resteasy.client.jaxrs.engines.ApacheHttpClient4Engine.buildEntity(ApacheHttpClient4Engine.java:524)
at org.jboss.resteasy.client.jaxrs.engines.ApacheHttpClient4Engine.loadHttpMethod(ApacheHttpClient4Engine.java:423)
at org.jboss.resteasy.client.jaxrs.engines.ApacheHttpClient4Engine.invoke(ApacheHttpClient4Engine.java:281)
... 4 more
DisplayText类的定义如下:
@XmlRootElement
public class DisplayText implements Serializable
我在pom中添加了以下软件包:
- resteasy客户端
- resteasy jaxrs
- resteasy jaxb提供程序 (最终版本3.0.8)
- com。太阳xml。束缚
它们都在运行时确定了作用域
我觉得奇怪的是,它在日食下工作。它可能是某种Jaxb配置吗?或上下文设置。 我也试过了
RegisterBuiltin.register(ResteasyProviderFactory.getInstance());
但它不起作用
# 1 楼答案
我用maven shade建造了它,解决了这个问题
这里最重要的一点是:
shade插件配置需要the service transformer,它合并了the service discovery mechanism使用的META-INF/services文件