参数 JAXBElement 字符串 [英] parameter JAXBElement String

查看:34
本文介绍了参数 JAXBElement 字符串的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个关于 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆