gpt4 book ai didi

java - jaxb,子元素的单独命名空间

转载 作者:行者123 更新时间:2023-11-30 04:22:58 27 4
gpt4 key购买 nike

我正在尝试使用 jaxb 创建 XML,如下所示的格式,其中子元素具有单独的 namespace 。

 <soap:Envelope xmlns:soap="http://demo.org/soap/envelope/"      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Header>
<element1 xmlns="http://childnamespacehere">
<att1>test</att1>
<att2>test</att2>
</element1>
</soap:Header>
<soap:Body>
<element2 xmlns="http://childnamespacehere">
<att1>test</att1>
<att2>test</att2>
</element2 >
</soap:Body>
</soap:Envelope>

我的类(class)

  @XmlRootElement(name = "soap:Envelope", namespace = "http://schemas.xmlsoap.org/soap/envelope/")
public class Envelope

private Element1 element1;

private Element2 element2;

@XmlElementWrapper(name = "soap:Header")
@XmlElement(name = "Element1", namespace = "http://childelementnamespace/")
public void setElement1(Element1 element){ }

@XmlElementWrapper(name = "soap:Body")
@XmlElement(name = "Element2" , namespace = "http://childelementnamespace/")
public void setElement2(Element2 element){ }

但我生成的 xml 如下所示,其中子架构位于根级别。

 <soap:Envelope xsi:schemaLocation="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns2="http://childelementnamespace/"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soap:Header>
<ns2:Element1>
<att1>value</att1>
<att2>value</att2>
</ns2:Element1>
</soap:Header>
<soap:Body>
<ns2:Element2>
<att1>value</att1>
<att2>value</att2>
</ns2:Element2>
</soap:Body>
</soap:Envelope>

我在 package-info.java 中定义了 @xmlschema

 @XmlSchema(namespace = "http://schemas.xmlsoap.org/soap/envelope/",
xmlns = { @javax.xml.bind.annotation.XmlNs(prefix = "Element1", namespaceURI = "http://childelementnamespace"),
@javax.xml.bind.annotation.XmlNs(prefix = "Element2", namespaceURI = "http://childelementnamespace") },
elementFormDefault = XmlNsForm.QUALIFIED)

package com.model;

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

当我生成 xml 时,不会生成子元素的 namespace ,我只获得根元素的 namespace 。

最佳答案

我已经通过向对象(子节点)Element1 和 Element2 添加“xmlns”属性来解决。

  class Elemenet1

@XmlAttribute(name="xmlns")
String xmlns = "http://childnamespacehere";

public void setXmlns(String namespace){};

public String getXmlns(){};

输出

<soap:Envelope xmlns:soap="http://demo.org/soap/envelope/"      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Header>
<element1 xmlns="http://childnamespacehere">
<att1>test</att1>
<att2>test</att2>
</element1>
</soap:Header>
<soap:Body>
<element2 xmlns="http://childnamespacehere">
<att1>test</att1>
<att2>test</att2>
</element2 >
</soap:Body>
</soap:Envelope>

关于java - jaxb,子元素的单独命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16552633/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com