Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/29.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 Jersey客户端在XML反序列化期间未设置字段_Java_Xml_Jaxb_Jersey_Jax Rs - Fatal编程技术网

Java Jersey客户端在XML反序列化期间未设置字段

Java Jersey客户端在XML反序列化期间未设置字段,java,xml,jaxb,jersey,jax-rs,Java,Xml,Jaxb,Jersey,Jax Rs,我正在设置Jersey JAX-RS客户机,以反序列化.NETWebAPI服务提供的XML。我遇到了一个路障,我打电话去收集一些东西。我能够在Jersey客户端上接收集合,但是,没有设置对象上的任何字段 XML: <?xml version="1.0"?> <ArrayOfEvent xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07

我正在设置Jersey JAX-RS客户机,以反序列化.NETWebAPI服务提供的XML。我遇到了一个路障,我打电话去收集一些东西。我能够在Jersey客户端上接收集合,但是,没有设置对象上的任何字段

XML:

<?xml version="1.0"?>
<ArrayOfEvent xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/TestApi.Models">
<Event>
    <Id>3</Id>
    <MeetingId>444</MeetingId>
    <Name>Jon's Meeting</Name>
</Event>
<Event>
    <Id>134</Id>
    <MeetingId>234</MeetingId>
    <Name>Super meeting</Name>
</Event>
<Event>
    <Id>43</Id>
    <MeetingId>9966</MeetingId>
    <Name>Test meeting!</Name>
</Event>
</ArrayOfEvent>
客户端代码:

 WebTarget target = client.target(baseUrl);

 target = target.path("Event");

 List<Event> events = target.request(MediaType.APPLICATION_XML).get(new GenericType<List<Event>>() {});
 for (Event e: events){
     System.out.println(e.toString());
 }
我曾尝试将@XmlElement添加到属性并指定名称,但没有成功。我还回顾了这些问题:

他们似乎很直截了当,但我不能得到同样的结果。从第一个问题开始,在事件类上使用XmlRootElement会引发异常。第二个问题是什么导致我正确地反序列化了集合,但丢失了字段数据

如何设置此选项以正确反序列化字段

编辑:我也尝试过使用根元素进行编辑

根元素类:

@XmlRootElement(name="ArrayOfEvent", namespace="http://schemas.datacontract.org/2004/07/TestApi.Models")
@XmlAccessorType(XmlAccessType.PUBLIC_MEMBER)
public class EventSearch {

    public List<Event> Events;
}

当我这样做时,EventSearch上的Events字段为空,因此我甚至没有对集合进行反序列化。

默认情况下,JAXB会将名为
Id
的字段转换为名为
Id
的元素,以获取所需的元素名称。您需要使用
@xmlement
注释

@XmlElement(name="Id")
public int Id;
您还需要映射名称空间限定。这是使用包级别的
@XmlSchema
注释完成的。为此,在与模型相同的包中添加一个名为
package info.java
的源文件,其中包含以下内容(修改包以匹配您自己的内容)

我在我的博客上写了更多关于JAXB和名称空间限定的内容:


我可能错了,但我希望有一个名为ArrayFelement的@XmlRootElement类或类似的类?更一般地说,如果您有XSD,您可以使用xsd2java工具生成JAXB bean……我已经尝试过了,我在最初的帖子中提到过,但仍然得到空字段。在这一点上我有点不知所措,Java不是我的主要语言。我需要设置JAXB的一些配置吗?@jtiger-我添加了一个更新,可以解决您的问题。就是这样!我在球衣的例子中没有看到,我感谢你的帮助。
@XmlRootElement(name="ArrayOfEvent", namespace="http://schemas.datacontract.org/2004/07/TestApi.Models")
@XmlAccessorType(XmlAccessType.PUBLIC_MEMBER)
public class EventSearch {

    public List<Event> Events;
}
WebTarget target = client.target(baseUrl);

target = target.path("Event");

EventSearch search = target.request(MediaType.APPLICATION_XML).get(EventSearch.class);
@XmlElement(name="Id")
public int Id;
@XmlSchema( 
    namespace = "http://schemas.datacontract.org/2004/07/TestApi.Models", 
    elementFormDefault = XmlNsForm.QUALIFIED) 
package your_package;

import javax.xml.bind.annotation.XmlNsForm;
import javax.xml.bind.annotation.XmlSchema;