我创建了一个有Map的DTO类。我正在使用自定义XMLAdapter处理此地图:
public class CmisObject {
public CmisObject() {
this.properties = new HashMap<String, CmisProperty>();
this.links = new ArrayList<String>();;
}
/* Here we override the default HashMap marshalling by Moxy */
@XmlAnyElement
@XmlJavaTypeAdapter(CmisPropertyMapAdapter.class)
private HashMap<String, CmisProperty> properties;
....
适配器的定义如下:
@Override
public Element marshal(Map<String, CmisProperty> map) throws Exception {
Document document = documentBuilder.newDocument();
Element rootElement = document.createElement("properties");
document.appendChild(rootElement);
for(Entry<String,CmisProperty> entry : map.entrySet()) {
Element childElement = document.createElementNS("http://www.foo.com/bar/cmis", entry.getKey());
CmisProperty cp = entry.getValue();
childElement.setAttribute("id", cp.getId());
childElement.setAttribute("localName", cp.getLocalName());
...
rootElement.appendChild(childElement);
}
return rootElement;
....
,最后我在包中定义了我的DTO类的package-info.java:
@XmlSchema(
namespace="http://www.foo.com/bar/baz",
xmlns = {
@XmlNs(namespaceURI = "http://www.foo.com/bar/cmis", prefix = "cmis")
},
elementFormDefault=XmlNsForm.QUALIFIED)
package com.foo.bar.beans;
import javax.xml.bind.annotation.*;
一切都按预期工作,我得到一个不错的JSON,但是,没有添加“cmis”前缀。
当我在我的应用程序中注册前缀映射时:
...
final Map<String, String> namespacePrefixMapper = new HashMap<String, String>();
namespacePrefixMapper.put("http://www.foo.com/bar/cmis", "cmis");
final MoxyJsonConfig moxyJsonConfig = new MoxyJsonConfig()
.setNamespacePrefixMapper(namespacePrefixMapper)
.setNamespaceSeparator(':');
final ContextResolver<MoxyJsonConfig> jsonConfigResolver = moxyJsonConfig.resolver();
register(jsonConfigResolver);
...
添加了所有需要的前缀。
据我了解,如果定义了package-info.java,则MOXy不需要注册步骤。
这可能是什么问题?
谢谢。