我有以下类型,在架构中定义为:
<xsd:complexType name="any_t" mixed="true">
<xsd:sequence>
<xsd:any processContents="lax" minOccurs="0" maxOccurs="unbounded"></xsd:any>
</xsd:sequence>
</xsd:complexType>
生成的JAXB类:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "any_t", propOrder = {
"content"
})
public class AnyT implements Serializable
{
private final static long serialVersionUID = 1L;
@XmlMixed
@XmlAnyElement(lax = true)
protected List<Object> content;
public List<Object> getContent() {
if (content == null) {
content = new ArrayList<Object>();
}
return this.content;
}
}
使用此类型的一些JAXB类:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"addInfo"
})
@XmlRootElement(name = "FORM_OF_COOWNERS")
public class FormOfCoowners
implements Serializable
{
private final static long serialVersionUID = 1L;
@XmlElement(name = "add_info")
protected AnyT addInfo;
public AnyT getAddInfo() { return addInfo; }
public void setAddInfo(AnyT value) { this.addInfo = value; }
}
当我将此XML解组为JAXB对象时:
<FORM_OF_COOWNERS>
<add_info>
<info_analytics>
<issuer_subdiv>
<id><id>1940001</id></id>
</issuer_subdiv>
<fl_worker>Yes</fl_worker>
</info_analytics>
</add_info>
</FORM_OF_COOWNERS>
{"FORM_OF_COOWNERS":{"add_info":{"info_analytics":[{"issuer_subdiv":{"id":{"id":"1940001"}},"fl_worker":"Yes"}]}}}
这份名单从何而来?info_analytics映射到没有任何集合/数组的类型。
如果我得到这个JSON,umarshall将其转换为JAXB对象,marshall转换为XML,它将生成:
<info_analytics fl_worker="Yes">
<issuer_subdiv>
<id id="1940001">
<id>1940001</id>
</id>
</issuer_subdiv>
<fl_worker>Yes</fl_worker>
</info_analytics>
为什么元素作为属性重复?
def unmarshallToJaxbTyped[A : ClassTag](json: String): Throwable \/ A =
\/.fromTryCatchNonFatal {
val cls = classTag[A].runtimeClass
val jc = JAXBContext.newInstance(cls)
val unmarshaller = jc.createUnmarshaller()
unmarshaller.setProperty("eclipselink.media-type", "application/json")
unmarshaller.unmarshal(new StreamSource(new StringReader(json)), cls)
.getValue.asInstanceOf[A]
}
def marshallJaxbToJson(obj: Any): Throwable \/ String =
\/.fromTryCatchNonFatal {
val jc = JAXBContext.newInstance(obj.getClass)
val marshaller = jc.createMarshaller()
marshaller.setProperty("eclipselink.media-type", "application/json")
val writer = new StringWriter()
marshaller.marshal(obj, writer)
writer.getBuffer.toString
}
XML:
protected static synchronized JAXBContext getContext() {
if (jaxbContext == null)
try {
jaxbContext = JAXBContext.newInstance("org.example.models");
} catch (JAXBException ex) {
throw new RuntimeException(ex);
}
return jaxbContext;
}
public static void saveMessage(Object msg, OutputStream os) throws JAXBException {
Marshaller marshaller = getContext().createMarshaller();
marshaller.marshal(msg, os);
}
public static Object loadMessage(InputStream is) throws JAXBException {
Unmarshaller unmarshaller = getContext().createUnmarshaller();
return unmarshaller.unmarshal(is);
}
我不知道这种奇怪的往返:xml->java->json->java->XML需要多少次。我想您应该理解,XML比JSON支持更多的特性,这就是为什么不总是可以进行1对1映射的原因。
如果这对您来说是一个真正的问题,并且不仅仅是理论研究,请针对MOXY发射一个bug:https://bugs.eclipse.org/bugs/enter_bug.cgi?product=eclipselink
我正在尝试使用JAXB进行封送处理。 我的输出是这样的: ...但我需要这样的输出: 如果取消对代码的注释,则会得到。没有它,我可以编译,但我不能得到所需的精确输出。 我的豆子长这样: 适配器类
问题内容: 我通常对JOINS十分熟悉,但这是新的。 假设三个表(两个表的典型情况和第三个链接器表): (出于简化目的,我无法复制实际的结构,这不是我的代码。) 通常,要获得“谁在什么时候买了什么”的表格,我可以这样做: 但是我已经看到了这个: 这是什么?只是另一种语法,还是一种性能技巧? (它在SQLServer,FYI上,但是大概可以应用于其他…) 问题答案: 括号不会改变语义。子句的位置控制
null 杰克逊在默认情况下有能力做到这一点。
我有一个遗留web服务项目,它接收两个不同的XML模式,但属性名称相同(包括根元素)。我正在使用Spring、OXM和JAXB2进行编组/解组。 我已经用另一个问题解决了前面的一个问题,所以我使用SAX解析器来确定使用哪一个解组器。解析XML时,我检查一个值,然后就可以使用反编组器或其他反编组器。 我如何将其转换为更Spring(OXM)的方法呢?
问题内容: 当我尝试将[] byte编组为JSON格式时,我只有一个奇怪的字符串。 请看下面的代码。 我有两个疑问: 如何将[] bytes封送至JSON? 为什么[] byte成为此字符串? 输出为: 戈朗游乐场:https : //play.golang.org/p/wanppBGzNR 问题答案: 根据文档:https : //golang.org/pkg/encoding/json/#Ma
我对泛型是个新手。