参数 JAXBElement 字符串 [英] parameter JAXBElement String
问题描述
我有一个关于 JAXB 的简单问题.这是示例代码:
I' have simple question about JAXB. Here is the sample code:
//setter that has input JAXBElement
b.setBIC(JAXBElement<String> value);
如何初始化使用来自其他对象的 String 的输入元素?
How can I initialize the input element, that uses String from other object?
推荐答案
您可以直接创建 JAXBElement
的实例,或者如果您从 XML 模式生成 Java 模型,请在生成的ObjectFactory
类.
You can create an instance of JAXBElement
directly or if you generated your Java model from an XML schema use a convience method on the generated ObjectFactory
class.
package org.example.schema;
import javax.xml.bind.*;
import javax.xml.namespace.QName;
public class Demo {
public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance("org.example.schema");
Root root = new Root();
QName fooQName = new QName("http://www.example.org/schema", "foo");
JAXBElement<String> fooValue = new JAXBElement<String>(fooQName, String.class, "FOO");
root.setFoo(fooValue);
ObjectFactory objectFactory = new ObjectFactory();
JAXBElement<String> barValue = objectFactory.createRootBar("BAR");
root.setBar(barValue);
Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(root, System.out);
}
}
schema.xsd
以上演示代码基于从以下 XML 模式生成的 Java 模型.您首先获得 JAXBElement
属性的原因是当您有一个元素同时是 nillable="true"
和 minOccurs="0"
.
The above demo code is based on a Java model generated from the following XML schema. The reason you get a JAXBElement<String>
property in the first place is when you have an element that is both nillable="true"
and minOccurs="0"
.
<?xml version="1.0" encoding="UTF-8"?>
<schema
xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.example.org/schema"
xmlns:tns="http://www.example.org/schema"
elementFormDefault="qualified">
<element name="root">
<complexType>
<sequence>
<element name="foo" type="string" minOccurs="0" nillable="true"/>
<element name="bar" type="string" minOccurs="0" nillable="true"/>
</sequence>
</complexType>
</element>
</schema>
根目录
以下类是从 schema.xsd
生成的,包含与您的问题中类似的属性.
The following class was generated from schema.xsd
and contains properties like the one in your question.
package org.example.schema;
import javax.xml.bind.JAXBElement;
import javax.xml.bind.annotation.*;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {"foo","bar"})
@XmlRootElement(name = "root")
public class Root {
@XmlElementRef(name = "foo", namespace = "http://www.example.org/schema", type = JAXBElement.class)
protected JAXBElement<String> foo;
@XmlElementRef(name = "bar", namespace = "http://www.example.org/schema", type = JAXBElement.class)
protected JAXBElement<String> bar;
public JAXBElement<String> getFoo() {
return foo;
}
public void setFoo(JAXBElement<String> value) {
this.foo = value;
}
public JAXBElement<String> getBar() {
return bar;
}
public void setBar(JAXBElement<String> value) {
this.bar = value;
}
}
对象工厂
下面是生成的 ObjectFactory
类,其中包含用于创建 JAXBElement
实例的便捷方法.
Below is the generated ObjectFactory
class that contains convenience methods for creating the instances of JAXBElement
.
package org.example.schema;
import javax.xml.bind.JAXBElement;
import javax.xml.bind.annotation.*;
import javax.xml.namespace.QName;
@XmlRegistry
public class ObjectFactory {
private final static QName _RootFoo_QNAME = new QName("http://www.example.org/schema", "foo");
private final static QName _RootBar_QNAME = new QName("http://www.example.org/schema", "bar");
public Root createRoot() {
return new Root();
}
@XmlElementDecl(namespace = "http://www.example.org/schema", name = "foo", scope = Root.class)
public JAXBElement<String> createRootFoo(String value) {
return new JAXBElement<String>(_RootFoo_QNAME, String.class, Root.class, value);
}
@XmlElementDecl(namespace = "http://www.example.org/schema", name = "bar", scope = Root.class)
public JAXBElement<String> createRootBar(String value) {
return new JAXBElement<String>(_RootBar_QNAME, String.class, Root.class, value);
}
}
这篇关于参数 JAXBElement 字符串的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!