Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何创建返回xml和json的webservice函数?_Java_Jpa_Jersey_Eclipselink_Jax Rs - Fatal编程技术网

Java 如何创建返回xml和json的webservice函数?

Java 如何创建返回xml和json的webservice函数?,java,jpa,jersey,eclipselink,jax-rs,Java,Jpa,Jersey,Eclipselink,Jax Rs,我创建了一个web服务功能: @GET @Path("getusers/") @Produces({"application/xml","application/json"}) public Object getUsers() { String distanceQuery="SELECT UGL.user_id,UP.fname,UGL.mlatitude,UGL.mlogitude,UGL.mlogitude from user_gps_location UGL,user_profil

我创建了一个web服务功能:

@GET
@Path("getusers/")
@Produces({"application/xml","application/json"})
public Object getUsers()
{
    String distanceQuery="SELECT UGL.user_id,UP.fname,UGL.mlatitude,UGL.mlogitude,UGL.mlogitude from user_gps_location UGL,user_profile UP where UGL.user_id=UP.user_id";
    Query queryResult=em.createNativeQuery(distanceQuery);

    userList=queryResult.getResultList();
    return userList;
}
该函数返回一个结果列表: 如果我在选择application/json选项时使用浏览器进行测试,它可以正常工作:

结果:

[[1,"Ankit",37.334542,-121.890821,-121.890821],
[1,"Ankit",37.337749,-121.886702,-121.886702],
[1,"Ankit",37.336453,-121.884985,-121.884985],
[1,"Ankit",37.336453,-121.884985,-121.884985],
[1,"Ankit",37.336453,-121.884985,-121.884985],
[1,"Ankit",32.727798,-117.15683,-117.15683],
[1,"Ankit",37.334541666666674,-121.89081999999999,-121.89081999999999],
[1,"Ankit",37.33774833333334,-121.88670166666667,-121.88670166666667],
[1,"Ankit",37.33774833333334,-121.88670166666667,-121.88670166666667],
[1,"Ankit",37.334541666666674,-121.89081999999999,-121.89081999999999],
[1,"Ankit",37.334541666666674,-121.89081999999999,-121.89081999999999],
[1,"Ankit",37.33774833333334,-121.88670166666667,-121.88670166666667],
[2,"Niharika",37.334541666666674,-121.88670166666667,-121.88670166666667],
[2,"Niharika",37.334541666666674,-121.88670166666667,-121.88670166666667]]
但当我选择“application/xml”时,它会给我一个错误:

javax.ws.rs.WebApplicationException: com.sun.jersey.api.MessageException: A message body writer for Java class java.util.Vector, and Java type class java.util.Vector, and MIME media type application/xml was not found
谁能帮帮我,告诉我它怎么了

还有,我怎样才能返回一个格式良好的结果,如下所示

<id>1</id>
<name>Ankit</name>
1
安基特
我知道我需要为它使用一个类,但由于这是一个本机查询,我使用两个表并返回一个结果列表,我不知道如何执行该操作。

尝试更改

public Object getUsers() 

公共列表getUsers()
以匹配类型userList


另外,请确保域类上存在
@XMLRootElement
注释

我曾经遇到过类似的问题。问题的原因是我缺少一些库。(我无法生成JSON,我缺少
jersey JSON
依赖项)。通过添加依赖项,问题得到了解决

检查是否可以使用以下简单方法生成XML:

@GET
@Path("test")
@Produces(MediaType.APPLICATION_XML)
public List<String> test()
{
    List<String> test = new ArrayList<String>();
    test.add("string 1");
    test.add("string 2");
    return test;
}

如果您可以自由选择使用哪种JAX-RS实现,我强烈建议您看看。它提供了许多很酷的特性,比如bean验证,并提供了一个非常易于使用的客户端库。

Ya@XMLRootElement位于域类中。请告诉我,对于公共列表,我将在列表中提到哪个类对象,正如我前面提到的,我的查询有两个表用户\u gps\u位置和用户\u配置文件,我不知道如何将它们与返回结果进行映射。键入是多个表中的选择列表。否将其更改为列表后仍然不起作用,并给出以下错误:java.lang.ClassCastException:sun.reflect.generics.reflectiveObjects.GenericArrayTypeImpl无法强制转换为java.lang.Class,而在浏览器中它会给出以下错误消息:响应:{HTTP状态406-不可接受}请尝试不带泛型的列表。否,它仍然会给我错误:java.lang.ClassCastException:java.lang.Class无法转换为java.lang.reflect.ParameterizedType。据我所知,我认为我使用的是nativequery,它与任何域类都没有联系。这有什么不对吗?如果是,那么我该如何处理这个场景呢?嘿,正如你提到的,我添加了test()方法,你提到jersey-core-1.13是一个Maven依赖项,我将jersey-core-1.13.jar添加到我的netbeans项目类库中,然后运行webservice,但我仍然没有得到xml输出。在这里,我只想知道我将jersy-core-1.13添加到库中是正确的,还是需要进一步的步骤?如果没有,正如你提到的,我应该在哪里写上面的东西呢?
是一个Maven依赖项。Maven是一种非常常见且非常简单的构建和依赖关系管理工具。默认情况下,Netbeans使用Ant(iirc)。
@GET
@Path("test")
@Produces(MediaType.APPLICATION_XML)
public List<String> test()
{
    List<String> test = new ArrayList<String>();
    test.add("string 1");
    test.add("string 2");
    return test;
}
<dependency>
    <description></description>
    <groupId>com.sun.jersey</groupId>
    <artefactId>jersey-core</artefactId>
    <version>1.13</version>
</dependency>