- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我是 JAXB 的新手,在从 XML 到 Java 类实例的转换方面遇到了麻烦。
我有以下 XML:
<?xml version="1.0"?>
<response>
<category>client</category>
<action>Greeting</action>
<code>1000</code>
<msg>Your Connection with API Server is Successful</msg>
<resData>
<data name="svDate">2009-02-16 06:22:21</data>
</resData>
</response>
我开发了以下 Java 代码:
/**
* Copyright 2013. ABN Software. All Rights reserved.<br>
* Author ...... Andre<br>
* Created ..... 14.03.2013<br>
* <br>
*/
package net.regmaster.onlinenic.model;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementRef;
import javax.xml.bind.annotation.XmlRootElement;
import net.regmaster.onlinenic.enumtype.OnicEnumAction;
import net.regmaster.onlinenic.enumtype.OnicEnumCategory;
import net.regmaster.onlinenic.model.resdata.GreetingResData;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* @author annik
*
*/
@XmlRootElement(name = "response")
// @XmlType( propOrder = { "category", "action", "code", "message"})
public class OnicGreeting
{
private OnicEnumCategory category;
private OnicEnumAction action;
private Integer code;
private String message;
private GreetingResData resData;
//
private Logger LOG = LoggerFactory.getLogger(getClass());
/**
* Getter.
*
* @return the category
*/
public OnicEnumCategory getCategory() {
return category;
}
/**
* Setter.
*
* @param category
* the category to set
*/
public void setCategoryEnum(OnicEnumCategory category) {
this.category = category;
}
@XmlElement
public void setCategory(String category) {
try {
this.category = OnicEnumCategory.getEnum(category);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
LOG.error(e.getMessage());
}
}
/**
* Getter.
*
* @return the action
*/
public OnicEnumAction getAction() {
return action;
}
/**
* Setter.
*
* @param action
* the action to set
*/
public void setActionEnum(OnicEnumAction action) {
this.action = action;
}
@XmlElement
public void setAction(String action) {
try {
this.action = OnicEnumAction.getEnum(action);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
LOG.error(e.getMessage());
}
}
/**
* Getter.
*
* @return the code
*/
@XmlElement
public Integer getCode() {
return code;
}
/**
* Setter.
*
* @param code
* the code to set
*/
public void setCode(Integer code) {
this.code = code;
}
/**
* Getter.
*
* @return the message
*/
@XmlElement(name = "msg")
public String getMessage() {
return message;
}
/**
* Setter.
*
* @param message
* the message to set
*/
public void setMessage(String message) {
this.message = message;
}
/**
* Getter.
*
* @return the resData
*/
@XmlElementRef
public GreetingResData getResData() {
return resData;
}
/**
* Setter.
*
* @param resData
* the resData to set
*/
public void setResData(GreetingResData resData) {
this.resData = resData;
}
@Override
public String toString() {
return "category=" + category + ", action=" + action + ", code=" + code + ", msg=" + message
+ ", resData:" + resData.toString();
}
}
和
/**
* Copyright 2013. ABN Software. All Rights reserved.<br>
* Author ...... Andre<br>
* Created ..... 14.03.2013<br>
* <br>
*/
package net.regmaster.onlinenic.model.resdata;
import java.util.Calendar;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
import javax.xml.bind.annotation.XmlValue;
/**
* @author annik
*
*/
@XmlRootElement(name="resData")
public class GreetingResData extends AbstractResData
{
String svDate;
/**
* Constructor.
*
*/
public GreetingResData() {
// TODO Auto-generated constructor stub
}
/**
* Getter.
*
* @return the svDate
*/
@XmlAttribute
public String getSvDate() {
return svDate;
}
/**
* Setter.
*
* @param svDate
* the svDate to set
*/
public void setSvDate(String svDate) {
this.svDate = svDate;
}
}
这些代码示例运行但数据错误:
http://i.stack.imgur.com/qCCIM.png
请帮帮我。
我也不明白万一我会有很多不同的
<data ...>..</data>
我可以轻松简单地做些什么?
我的意思是这种情况:
<resData>
<data name="crDate">2004-12-17</data>
<data name="exDate">2009-01-02</data>
<data name="password">7fe11fd9d97ee40bdf57e561427c0a6</data>
<data name="dns">dns1.onlinenic.net</data>
<data name="dns">dns2.onlinenic.net</data>
<data name="r_name">123456</data>
<data name="r_org">123456</data>
<data name="r_country">BJ</data>
<data name="r_province">mokcup</data>
<data name="r_city">123456</data>
<data name="r_street">123456</data>
<data name="r_postalcode">123456</data>
<data name="r_voice">+86.5925391800</data>
<data name="r_fax">+86.5925391800</data>
<data name="r_email">asdfasdf@sadf.com</data>
....
最佳答案
谢谢 Blaise Doughan。但是在挖掘了 10 多个主题之后,我决定我必须从相反的方式开始。
我创建了新的测试,用于整理我的数据(对象)。实际上,我使用了我认为的 TDD(测试驱动开发)方式。因此,我用测试数据填充我的对象并应用编码(从数据创建 XML)并看到我得到了。数据不正确。我也查看了其他主题(感谢这个 Java/JAXB: Unmarshall Xml to specific subclass based on an attribute )并更正了我的数据结构
记住我喜欢得到
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<response>
<code>1000</code>
<message>Big message</message>
<resData>
<data name="svDate">2013.03.14</data>
</resData>
</response>
现在我的数据是:
package net.regmaster.onlinenic.model.response.resdata;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlValue;
import org.eclipse.persistence.oxm.annotations.XmlCustomizer;
/**
* @author annik
*
*/
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name="data")
//@XmlCustomizer(ResDataCustomiser.class)
public class XmlData
{
@XmlAttribute(name="name")
private String name;
@XmlValue
private String value;
/** Getter.
* @return the name
*/
public String getName() {
return name;
}
/** Setter.
* @param name the name to set
*/
public void setName(String name) {
this.name = name;
}
/** Getter.
* @return the value
*/
public String getValue() {
return value;
}
/** Setter.
* @param value the value to set
*/
public void setValue(String value) {
this.value = value;
}
}
和:
package net.regmaster.onlinenic.model.response.resdata;
import java.util.List;
import javax.xml.bind.annotation.XmlRootElement;
/**
* @author annik
*
*/
@XmlRootElement
public class ResData
{
private List<XmlData> data;
/**
* Getter.
*
* @return the data
*/
public List<XmlData> getData() {
return data;
}
/**
* Setter.
*
* @param data
* the data to set
*/
public void setData(List<XmlData> data) {
this.data = data;
}
}
和:
package net.regmaster.onlinenic.model.response;
import java.util.List;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElements;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;
import javax.xml.bind.annotation.XmlType;
import net.regmaster.onlinenic.enumtype.OnicEnumAction;
import net.regmaster.onlinenic.enumtype.OnicEnumCategory;
import net.regmaster.onlinenic.model.response.resdata.ResData;
import net.regmaster.onlinenic.model.response.resdata.XmlData;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* @author annik
*
*/
@XmlRootElement(name = "response")
//@XmlType( propOrder = { "category", "action", "code", "message"})
public class OnicGreetingResponse
{
private OnicEnumCategory category;
private OnicEnumAction action;
private Integer code;
private String message;
// private GreetingResData resData;
private ResData resData;
//
@XmlTransient
private Logger LOG = LoggerFactory.getLogger(getClass());
/**
* Getter.
*
* @return the category
*/
public OnicEnumCategory getCategory() {
return category;
}
/**
* Setter.
*
* @param category
* the category to set
*/
public void setCategoryEnum(OnicEnumCategory category) {
this.category = category;
}
@XmlElement
public void setCategory(String category) {
try {
this.category = OnicEnumCategory.getEnum(category);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
LOG.error(e.getMessage());
}
}
/**
* Getter.
*
* @return the action
*/
public OnicEnumAction getAction() {
return action;
}
/**
* Setter.
*
* @param action
* the action to set
*/
public void setActionEnum(OnicEnumAction action) {
this.action = action;
}
@XmlElement
public void setAction(String action) {
try {
this.action = OnicEnumAction.getEnum(action);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
LOG.error(e.getMessage());
}
}
/**
* Getter.
*
* @return the code
*/
@XmlElement
public Integer getCode() {
return code;
}
/**
* Setter.
*
* @param code
* the code to set
*/
public void setCode(Integer code) {
this.code = code;
}
/**
* Getter.
*
* @return the message
*/
@XmlElements(value={@XmlElement})
public String getMessage() {
return message;
}
/**
* Setter.
*
* @param message
* the message to set
*/
public void setMessage(String message) {
this.message = message;
}
/** Getter.
* @return the resData
*/
public ResData getResData() {
return resData;
}
/** Setter.
* @param resData the resData to set
*/
@XmlElement
public void setResData(ResData resData) {
this.resData = resData;
}
@Override
public String toString() {
return "category=" + category + ", action=" + action + ", code=" + code + ", msg=" + message
+ ", resData:" + resData.toString();
}
}
和 vu-alja :我明白了!
正如您在下面看到的,它以另一种方式工作: http://i.stack.imgur.com/35nzb.png
关于java - JAXB @XmlAttribute @XmlValue 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15415136/
我使用以下代码解析了一个 XML 文件并得到如下结果: url = htmlTreeParse("http://www.appannie.com/app/ios/candy-crush-saga/",
我想要这样的 XML: Foo 我可以通过一个看起来像这样的 JAXB 类成功地做到这一点: @XmlRootElement(name="simple") class Simple { @Xm
我有以下代码 @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "udt_TextType", propOrder = { "value" }
目标是使用 JAXB 生成以下 XML string data binary data 是否有允许generic 的解决方法@XmlValue字段(我需要存储 byte[] 和 Str
跟进JAXB and Composite Pattern ,我设法映射: foo bar
@JsonValue javadoc 声明:“类似于 javax.xml.bind.annotation.XmlValue 的标记注释”。为什么相似,有什么不同? 我作为 JAXB 的新手问这个问题,
是否可以有一个用值 AND 元素呈现的 JAXB 元素? 我正在尝试渲染类似的内容: This is some text 它甚至知道可能不是有效的 XML,但不幸的是,我尝试呈现
我是 JAXB 的新手,在从 XML 到 Java 类实例的转换方面遇到了麻烦。 我有以下 XML: client Greeting 1000 Your Conne
假设我有以下内容: library(XML) my.xml Star Trek TNG 1.0 Doctor Who Babylo
我看到这里发布了一个类似的问题,但它并没有帮助我解决问题,所以我在这里发布我的问题,看看是否有人可以修改我的代码以使其工作。 问题:如何访问混合内容字符串值并将其保存在 setPhrase(Strin
我想表示 List> 的一个实例在 XML 中如下所示: value1 value2 2012-08-19T13:00:59.412-04:00 哪里key1和 key2
现在我们正在构建一个函数,使用 apache.poi 将大型 xlsx 文件(超过 200MB)导入到数据库,并遍历读取该数据的所有 xml 文件。 该功能已完成,但有一个问题: 当我在 xlsx 单
bean : @XmlRootElement(name = "integer") @XmlAccessorType(XmlAccessType.FIELD) public class IntegerW
我已经看过一些与此相关的讨论,但无法在以下场景中应用。我正在尝试使用 jaxb 解码 xml。以下是我所有类(class)的层次结构。 @XmlRootElement(name="entry")
我有一个问题,其中 xmlValue剥离 我需要保留的标签(或转换为我可以 strsplit 打开的其他字符。 这是一个例子: > f xpathSApply(f, "//div[@class=\"
是否可以在使用@XmlElementRef 注释的引用对象上使用@XmlValue 注释?目标是生成以下 XML 输出: Blah 给定以下示例 JAXBContex
您好,我正在解码一个 XML 文件,该文件的标签可以包含一个值或一个元素列表。我想知道解码这种 XML 的最佳方法是什么。示例: value1 value2 value3
我收到以下错误: If a class has @XmlElement property, it cannot have @XmlValue property 更新类: @XmlType(pr
我有下一个 html,我想解析它: My input: bla bla bla bla My output in java: jaxbContext = JAX
我正在尝试使用 JAXB 定义 XML 到 Java 对象的绑定(bind)。一切正常,除非我尝试生成 XML,如this: Get Price read-only 来自 类定义为
我是一名优秀的程序员,十分优秀!