【问题标题】:Apache CXF 2.4.6 to 2.5.3 upgradeApache CXF 2.4.6 到 2.5.3 升级
【发布时间】:2015-09-09 10:10:05
【问题描述】:

我尝试将以下代码从 Apache CXF 2.4.6 更新到 Apache CXF 2.5.3:

@Path("/myresource")
public class MyResource {

    @GET
    @Produces(MediaType.APPLICATION_JSON)
    public Root get() {

        Root root = new Root();
        root.setName("Test");
        return root;
    };
}

@XmlRootElement(namespace = "http://www.my.org", name = "root")
@XmlAccessorType(XmlAccessType.FIELD)
public class Root {

    @XmlElement
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

弹簧配置:

<jaxrs:server address="/myPath" id="myID"
    <jaxrs:serviceBeans>
        <ref bean="myResource" />
    </jaxrs:serviceBeans>
    <jaxrs:providers>
        <bean class="org.apache.cxf.jaxrs.provider.JAXBElementProvider"/>
        <bean class="com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider" />
    </jaxrs:providers>
</jaxrs:server>

使用 Apache CXF 2.4.6 和 Jackson 2.2.3,我得到了正确的 JSON:

{"name":"Test"}

使用 Apache CXF 2.5.3 和 Jackson 2.2.3 我得到一个错误的 JSON:

{"ns1.root":{"name":"Test"}}

客户:

JAXRSClientFactoryBean jaxrsClientFactoryBean = new JAXRSClientFactoryBean();
jaxrsClientFactoryBean.setAddress(address);
jaxrsClientFactoryBean.setProviders(Arrays.asList(new JacksonJaxbJsonProvider(), new JAXBElementProvider()));
jaxrsClientFactoryBean.setServiceClass(MyResource.class);
MyResource myResource = jaxrsClientFactoryBean.create(MyResource.class);
Root root = myResource.get();

在客户端(代理客户端)我得到一个异常:

javax.xml.bind.UnmarshalException: unexpected element (uri:"", local:"ns1.root"). Expected elements are <{http://www.my.org}root>

我阅读了migration guide,但没有找到我的问题的答案。

【问题讨论】:

  • 不确定您的设置是什么样的,但也许this 是您要找的?

标签: java json jackson jax-rs cxf


【解决方案1】:

由于您将根元素定义为“root”,因此该节点应该出现在序列化的 json 中。

您可以通过设置 json 提供程序的属性 dropRootName 来删除此根元素,如此处所述。

http://cxf.apache.org/docs/jax-rs-data-bindings.html#JAX-RSDataBindings-WrappingandUnwrappingJSONsequences

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-21
    • 1970-01-01
    • 2018-01-12
    • 1970-01-01
    • 1970-01-01
    • 2022-01-17
    相关资源
    最近更新 更多