【问题标题】:Java EE 7 Webservices on Wildfly - JSON issueWildfly 上的 Java EE 7 Web 服务 - JSON 问题
【发布时间】:2016-03-22 12:09:48
【问题描述】:

我创建了一个简单的 Web 服务,用于从给定的 @Path 获取 @GET 数据。在使用 @Produces(MediaType.APPLICATION_XML) 时一切正常,我可以看到 XML 输出,但是在将 MediaType.APPLICATION_XML 更改为 MediaType.APPLICATION_JSON 时出现此问题:

上下文路径:/bms

Servlet 路径:/资源

路径信息:/实际值

查询字符串:null

堆栈跟踪 org.jboss.resteasy.spi.LoggableFailure:RESTEASY003880:找不到类型的上下文数据:javax.ws.rs.ext.Providers

我使用Wildfly 10提供的org.jboss.spec:jboss-javaee-7.0:1.0.3-Final

[编辑]

@Entity
@Cacheable(false)
@Table(name = "tblActualValueFloat")
@XmlRootElement(name = "tblActualValueFloat")
@XmlAccessorType(XmlAccessType.FIELD)
public class ActualValueFloat extends AbstractModel {

        /*^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^*/
        @Id
        @Column(name = "PointSliceID")
        @XmlElement(name = "PointSliceID", required = false, type = Integer.class)
        private Integer id;
        @Column(name = "ActualValue")
        @XmlElement(name = "ActualValue", required = false, type = Double.class)
        private Double value;
        @Temporal(TemporalType.TIMESTAMP)
        @Column(name = "UTCDateTime")
        @XmlElement(name = "UTCDateTime", required = false, type = Date.class)
        private Date date;
        //setters and getters and equals
}

[编辑2]

好的,我发现这适用于 Glassfish 4.1,但不适用于 Wildfly 10。任何线索如何通过使用提供的 Java EE Web 服务 API 来避免这种情况?

【问题讨论】:

  • 这些依赖应该足够了:javax:javaee-web-api:7.0javax.ws.rs:javax.ws.rs-api(maven 范围 = provided 两者)。你不需要 jboss 规范依赖。
  • @assylias 修改和同样的问题 :(
  • @GET 方法的返回类型是什么?
  • List<Entity> returnedList,请参阅编辑后的帖子 :)
  • 如果我使用上面描述的依赖项和this simple class 创建一个全新的项目 - 我会得到正确的输出。也许尝试使用该类,看看它是否有助于确定问题的原因。

标签: java json web-services wildfly-10


【解决方案1】:

@Rafcik 当我排除 org.codehaus.jackson:jackson-jaxrs 时出现此错误:

A message body writer for Java class java.util.ArrayList, and Java type java.util.List<java.lang.String>, and MIME media type application/json was not found.
The registered message body writers compatible with the MIME media type are:
application/json ->
  com.sun.jersey.json.impl.provider.entity.JSONJAXBElementProvider$App
  com.sun.jersey.json.impl.provider.entity.JSONRootElementProvider$App
  com.sun.jersey.json.impl.provider.entity.JSONListElementProvider$App
*/* ->
  com.sun.jersey.core.impl.provider.entity.FormProvider
  com.sun.jersey.core.impl.provider.entity.MimeMultipartProvider
  com.sun.jersey.core.impl.provider.entity.StringProvider
  com.sun.jersey.core.impl.provider.entity.ByteArrayProvider

我通过添加以下初始化代码修复了错误“无法找到类型的上下文数据:javax.ws.rs.ext.Providers”:

ResteasyProviderFactory factory = ResteasyProviderFactory.getInstance();
ResteasyProviderFactory.pushContext(javax.ws.rs.ext.Providers.class, factory);
ResteasyClientBuilder resteasyClientBuilder = new
ResteasyClientBuilder().providerFactory(factory);
ResteasyClient client = resteasyClientBuilder.build();

【讨论】:

    【解决方案2】:

    好的,我研究了我的 org.jboss.weld.osgi.examples:weld-osgi-web-fwk:1.2.0.Beta1 带有添加 CORS 标头的过滤器,包含 org.codehaus.jackson:jackson-jaxrs,所以我已经排除了它,现在它即使在 Wildfly 10 上也能正常工作

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-02
      • 1970-01-01
      • 2013-12-19
      • 1970-01-01
      • 1970-01-01
      • 2020-05-13
      • 2017-03-14
      • 1970-01-01
      相关资源
      最近更新 更多