MOXY不会在JSON中添加名称空间前缀

时间:2014-08-13 16:45:23

标签: java json jersey moxy

我创建了一个有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不需要注册步骤。

这可能是什么问题?

谢谢。

0 个答案:

没有答案