Java Wildfly 上的 EE 7 Web 服务 - JSON 问题
Java EE 7 Webservices on Wildfly - JSON issue
我已经为给定 @Path
的 @GET
数据创建了一个简单的网络服务。在使用 @Produces(MediaType.APPLICATION_XML)
时一切正常,我可以看到 XML 输出,但是在将 MediaType.APPLICATION_XML
更改为 MediaType.APPLICATION_JSON
时出现此问题:
Context Path:/bms
Servlet Path:/resources
Path Info:/actualvalue
Query String:null
Stack Trace
org.jboss.resteasy.spi.LoggableFailure: RESTEASY003880: Unable to find contextual data of type: javax.ws.rs.ext.Providers
我使用 org.jboss.spec:jboss-javaee-7.0:1.0.3-Final
Wildfly 10
提供的
[编辑]
@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
}
[edit2]
好的,我看到这适用于 Glassfish 4.1,但不适用于 Wildfly 10..任何关于如何通过使用提供的 Java EE Web 服务 API 来避免这种情况的线索?
好的,我已经研究过我的 org.jboss.weld.osgi.examples:weld-osgi-web-fwk:1.2.0.Beta1 带有过滤器以添加 CORS Headers ,包含 org.codehaus.jackson:jackson-jaxrs,所以我排除了它,现在它甚至在 Wildfly 10
上也能正常工作
@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
我通过添加以下初始化代码修复了错误 "Unable to find contextual data of type: 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();
我已经为给定 @Path
的 @GET
数据创建了一个简单的网络服务。在使用 @Produces(MediaType.APPLICATION_XML)
时一切正常,我可以看到 XML 输出,但是在将 MediaType.APPLICATION_XML
更改为 MediaType.APPLICATION_JSON
时出现此问题:
Context Path:/bms
Servlet Path:/resources
Path Info:/actualvalue
Query String:null
Stack Trace org.jboss.resteasy.spi.LoggableFailure: RESTEASY003880: Unable to find contextual data of type: javax.ws.rs.ext.Providers
我使用 org.jboss.spec:jboss-javaee-7.0:1.0.3-Final
Wildfly 10
[编辑]
@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
}
[edit2]
好的,我看到这适用于 Glassfish 4.1,但不适用于 Wildfly 10..任何关于如何通过使用提供的 Java EE Web 服务 API 来避免这种情况的线索?
好的,我已经研究过我的 org.jboss.weld.osgi.examples:weld-osgi-web-fwk:1.2.0.Beta1 带有过滤器以添加 CORS Headers ,包含 org.codehaus.jackson:jackson-jaxrs,所以我排除了它,现在它甚至在 Wildfly 10
上也能正常工作@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
我通过添加以下初始化代码修复了错误 "Unable to find contextual data of type: 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();