Несколько пространств имен JAXB с несколькими префиксами

Я пытаюсь создать сложный XML-файл со структурой, как показано ниже, с помощью JAXB:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
 <xc:XCache xmlns:xc="xCache" xc:action="Action">
  <xc:XCacheArea xc:value="SomeParameters">
    <sp:nickName xc:value="value" xmlns:sp="test.SomeParameters">
 </xc:XCacheArea>
</xc:XCache>

Но чем глубже я пытаюсь применить определенное пространство имен, тем сложнее его реализовать.

Результат, который я получаю, следующий:

<xc:XCache xmlns:xc="XCache" xmlns:mp="SomeParameters" xc:action="Action">
 <xc:XCacheArea xc:value="SomeParameters">
   <sp:nickName/>
</xc:XCacheArea>

Очевидно, что JAXB вводит пространство имен xmlns:mp="SomeParameters" в корневой элемент, где этого не ожидается.

Мой код:

App.class

public class App {

public static void main(String[] args) {

    App app = new App();
    app.run();

}

private void run() {

    XCache cache = new XCache();
    cache.setAction("Action");
    cache.setxCacheArea(new XCacheArea("SomeParameters", new NickName()));

    try {
        JAXBContext jaxbContext = JAXBContext.newInstance(XCache.class);
        Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
        jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        jaxbMarshaller.marshal(cache, new File("test.xml"));
    } catch (Exception e) {
        e.printStackTrace();
    }
}

NickName.class

public class NickName {

private String value;
}

ник \ package-info.java

@XmlSchema(namespace = "SomeParameters",
    elementFormDefault = XmlNsForm.QUALIFIED,
    attributeFormDefault = XmlNsForm.QUALIFIED,
    xmlns = {
            @XmlNs(prefix = "sp", namespaceURI = "SomeParameters")
    })
package com.utils.collection.xml.nickname;

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

xcache \ package.info.java

@XmlSchema(namespace = "XCache",
    elementFormDefault = XmlNsForm.QUALIFIED,
    attributeFormDefault = XmlNsForm.QUALIFIED,
    xmlns = {
            @XmlNs(prefix = "xc", namespaceURI = "XCache")

    })
package com.utils.collection.xml.xmlcache;
import javax.xml.bind.annotation.XmlNs;
import javax.xml.bind.annotation.XmlNsForm;
import javax.xml.bind.annotation.XmlSchema;

XCache.class

@XmlRootElement(namespace = "XCache", name = "XCache")
public class XCache {

private String action;
private XCacheArea xCacheArea;

public XCacheArea getxCacheArea() {
    return xCacheArea;
}

@XmlElement(namespace = "XCache", name = "XCacheArea")
public void setxCacheArea(XCacheArea xCacheArea) {
    this.xCacheArea = xCacheArea;
}

public String getAction() {
    return action;
}

@XmlAttribute(name = "action", namespace = "XCache")
public void setAction(String action) {
    this.action = action;
}
}

XCacheArea.class

public class XCacheArea {

private String value;
private NickName nickName;

public NickName getNickName() {
    return nickName;
}
@XmlElement(name = "nickName", namespace = "SomeParameters")
public void setNickName(NickName nickName) {
    this.nickName = nickName;
}

public String getValue() {
    return value;
}

@XmlAttribute(name = "value", namespace = "XCache")
public void setValue(String value) {
    this.value = value;
}
}

EDIT: структура проекта

0
задан 13 August 2018 в 14:38

0 ответов

Другие вопросы по тегам:

Похожие вопросы: