我正在使用 xjc 编译带有命名空间和任何元素的 XML 模式。我将根据需要包含来自外部名称空间的元素,并且需要处理包含新版本的元素定义的情况,或者可能来自另一个名称空间的具有相同名称的元素。显然,它的 XML 版本运行良好,我得到了客户端所有元素的正确 QNAME,但是,对于 JSON,我得到一个不合格的 QNAME,只有元素名称存在。这意味着我无法区分来自一个命名空间的名为“bob”的元素与来自第二个命名空间的名为“bob”的不同元素。
我已经阅读了我能找到的所有材料,并相信这是我需要在服务器端做的,但是,我不知道我在客户端需要什么:
@Provider
final static class JsonMoxyConfigurationContextResolver implements ContextResolver<MoxyJsonConfig> {
@Override
public MoxyJsonConfig getContext(Class<?> objectType) {
final MoxyJsonConfig configuration = new MoxyJsonConfig();
Map<String, String> namespacePrefixMapper = new HashMap<String, String>(2);
namespacePrefixMapper.put("http://schema.jaxbmoxy.examples.jersey.glassfish.org/2013/08/customer", "c");
namespacePrefixMapper.put("http://schema.jaxbmoxy.examples.jersey.glassfish.org/2013/08/other", "o");
configuration.setNamespacePrefixMapper(namespacePrefixMapper);
configuration.setNamespaceSeparator('.');
return configuration;
}
}
“c”模式是我定义的基本模式,“o”模式包含我将通过 ANY 合并的元素定义。对于下面的示例,我从外部命名空间导入 o.stats 和 o.email。下面是在服务器端生成的 JSON:
{"c.customer": [
{
"id": "3",
"personal-info": {
"name": "Bobby Boogie",
"o.stats": [{
"age": "45",
"height": "160 cm",
"weight": "70 kg"
}]
},
"contact-info": {
"address": {
"city": "My Town",
"street": "123 Any Street",
"country": "CA"
},
"phone-number": [
{
"type": "work",
"value": "613-555-1111"
},
{
"type": "cell",
"value": "613-555-2222"
}
]
}
},
{
"id": "2",
"personal-info": {
"name": "Fred Finkleman",
"o.stats": [{
"age": "55",
"height": "182 cm",
"weight": "86 kg"
}]
},
"contact-info": {
"address": {
"city": "Fredsville",
"street": "1 Happy Street",
"country": "US"
},
"phone-number": [
{
"type": "work",
"value": "613-555-1111"
},
{
"type": "cell",
"value": "613-555-2222"
}
],
"o.email": ["fred@email.com"]
}
},
{
"id": "1",
"personal-info": {
"name": "Tom Dooley",
"o.stats": [{
"age": "45",
"height": "160 cm",
"weight": "70 kg"
}]
},
"contact-info": {
"address": {
"city": "My Town",
"street": "123 Any Street",
"country": "CA"
},
"phone-number": [
{
"type": "work",
"value": "613-555-1111"
},
{
"type": "cell",
"value": "613-555-2222"
}
]
}
}
]}
我在客户端需要什么配置代码才能使其正常运行?目前我有以下内容:
@Override
protected void configureClient(ClientConfig clientConfig) {
clientConfig.register(new MoxyXmlFeature());
new ResourceConfig().property(MarshallerProperties.JSON_NAMESPACE_SEPARATOR, ".");
}
谢谢!