gpt4 book ai didi

java - 在运行时获取 @XmlType 的命名空间

转载 作者:行者123 更新时间:2023-12-04 05:48:29 26 4
gpt4 key购买 nike

我正在尝试输出 schemaLocation编码 xjc 时正确属性- 生成的类实例。根元素类如下所示:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"rootElement"
})
@XmlRootElement(name = "ROOTELEMENT")
public class ROOTELEMENT {
// Members
}

我看到有一个 package-info.java类位于所有生成的类所在的包中,具有以下内容:
@javax.xml.bind.annotation.XmlSchema(
namespace = "http://my.own.namespace",
elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)
package my.generated.classes.package;

JAXB XJC code generation - “schemaLocation” missing in xml generated by Marshaller的答案|建议设置 Marshaller.JAXB_SCHEMA_LOCATION属性(property),它确实有效:
marshaller.setProperty(Marshaller.JAXB_SCHEMA_LOCATION, "http://my.own.namespace my_schema.xsd");

但我想避免输入命名空间,如:
String namespace = getNamespace(rootElementInstance);
marshaller.setProperty(Marshaller.JAXB_SCHEMA_LOCATION, namespace + " my_schema.xsd");

对于如何实现 getNamespace() 的任何提示,我将不胜感激。功能。

编辑 : 我看到 XmlRootElementXmlType注释有 namespace()方法,这似乎是我所追求的(实际上,他们似乎委托(delegate) XmlSchema 中提供的 package-info.java )。但是,我无法获得 ROOTELEMENT 的实例转换为任何这些类型。

最佳答案

你需要捕获你的包(例如,使用 ROOTELEMENT.class.getPackage() 如果 ROOTELEMENT 在你想要的包中)。然后你可以简单地处理它如下:

Package package = // Here retrieve the package;
String namespace = package.getAnnotation(XmlSchema.class).namespace();
...etc...

关于java - 在运行时获取 @XmlType 的命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10384104/

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