Java Can';在XML文件中看不到名称空间前缀
我分析了一些对象,但问题是JAXB编写默认名称空间前缀,而不是预定义的前缀。你知道是什么导致了这个问题吗 我期望看到的Java Can';在XML文件中看不到名称空间前缀,java,jaxb,marshalling,Java,Jaxb,Marshalling,我分析了一些对象,但问题是JAXB编写默认名称空间前缀,而不是预定义的前缀。你知道是什么导致了这个问题吗 我期望看到的 <xbrli:entity> .... 不提供指定所用命名空间前缀的标准方法 扩展名-NamespacePrefixMapper 对于JAXB参考实现和EclipseLink JAXB(MOXy)的最新版本,可以使用NamespacePrefixMapper扩展来控制使用的名称空间前缀 MyNamespaceMapper import com.sun.xml.in
<xbrli:entity>
....
不提供指定所用命名空间前缀的标准方法
扩展名-NamespacePrefixMapper
对于JAXB参考实现和EclipseLink JAXB(MOXy)的最新版本,可以使用NamespacePrefixMapper
扩展来控制使用的名称空间前缀
MyNamespaceMapper
import com.sun.xml.internal.bind.marshaller.NamespacePrefixMapper;
//import com.sun.xml.bind.marshaller.NamespacePrefixMapper;
public class MyNamespaceMapper extends NamespacePrefixMapper {
private static final String FOO_PREFIX = ""; // DEFAULT NAMESPACE
private static final String FOO_URI = "http://www.example.com/FOO";
private static final String BAR_PREFIX = "bar";
private static final String BAR_URI = "http://www.example.com/BAR";
@Override
public String getPreferredPrefix(String namespaceUri, String suggestion, boolean requirePrefix) {
if(FOO_URI.equals(namespaceUri)) {
return FOO_PREFIX;
} else if(BAR_URI.equals(namespaceUri)) {
return BAR_PREFIX;
}
return suggestion;
}
@Override
public String[] getPreDeclaredNamespaceUris() {
return new String[] { FOO_URI, BAR_URI };
}
}
指定名称空间前缀apper
下面是如何在封送拆收器上设置名称空间前缀apper
的示例
Marshaller m = ctx.createMarshaller();
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
try {
m.setProperty("com.sun.xml.internal.bind.namespacePrefixMapper", new MyNamespaceMapper());
//m.setProperty("com.sun.xml.bind.namespacePrefixMapper", new MyNamespaceMapper());
} catch(PropertyException e) {
// In case another JAXB implementation is used
}
扩展-利用@XmlSchema
EclipseLink JAXB(MOXy)和JAXB参考实现的最新版本将使用在包级别@XmlSchema
注释上定义的名称空间前缀
@XmlSchema(
elementFormDefault=XmlNsForm.QUALIFIED,
namespace="http://www.example.com/FOO",
xmlns={
@XmlNs(prefix="", namespaceURI="http://www.example.com/FOO")
@XmlNs(prefix="bar", namespaceURI="http://www.example.com/BAR")
}
)
package blog.prefix;
import javax.xml.bind.annotation.*;
更多信息
不提供指定所用名称空间前缀的标准方法
扩展名-NamespacePrefixMapper
对于JAXB参考实现和EclipseLink JAXB(MOXy)的最新版本,可以使用NamespacePrefixMapper
扩展来控制使用的名称空间前缀
MyNamespaceMapper
import com.sun.xml.internal.bind.marshaller.NamespacePrefixMapper;
//import com.sun.xml.bind.marshaller.NamespacePrefixMapper;
public class MyNamespaceMapper extends NamespacePrefixMapper {
private static final String FOO_PREFIX = ""; // DEFAULT NAMESPACE
private static final String FOO_URI = "http://www.example.com/FOO";
private static final String BAR_PREFIX = "bar";
private static final String BAR_URI = "http://www.example.com/BAR";
@Override
public String getPreferredPrefix(String namespaceUri, String suggestion, boolean requirePrefix) {
if(FOO_URI.equals(namespaceUri)) {
return FOO_PREFIX;
} else if(BAR_URI.equals(namespaceUri)) {
return BAR_PREFIX;
}
return suggestion;
}
@Override
public String[] getPreDeclaredNamespaceUris() {
return new String[] { FOO_URI, BAR_URI };
}
}
指定名称空间前缀apper
下面是如何在封送拆收器上设置名称空间前缀apper
的示例
Marshaller m = ctx.createMarshaller();
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
try {
m.setProperty("com.sun.xml.internal.bind.namespacePrefixMapper", new MyNamespaceMapper());
//m.setProperty("com.sun.xml.bind.namespacePrefixMapper", new MyNamespaceMapper());
} catch(PropertyException e) {
// In case another JAXB implementation is used
}
扩展-利用@XmlSchema
EclipseLink JAXB(MOXy)和JAXB参考实现的最新版本将使用在包级别@XmlSchema
注释上定义的名称空间前缀
@XmlSchema(
elementFormDefault=XmlNsForm.QUALIFIED,
namespace="http://www.example.com/FOO",
xmlns={
@XmlNs(prefix="", namespaceURI="http://www.example.com/FOO")
@XmlNs(prefix="bar", namespaceURI="http://www.example.com/BAR")
}
)
package blog.prefix;
import javax.xml.bind.annotation.*;
更多信息