Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将json转换为没有根元素的实体?_Java_Jax Ws_Cxf - Fatal编程技术网

Java 如何将json转换为没有根元素的实体?

Java 如何将json转换为没有根元素的实体?,java,jax-ws,cxf,Java,Jax Ws,Cxf,我从Web服务返回了以下json字符串。JAXB注释实体必须是什么样子?我的问题是:json没有任何“外部”根元素 { "Header": "head", "ProductIdentifier": "WLW", "Version": "2" } //JAXB: @XmlRootElement class JsonVO { private String header, productIdentifier, version; //constructor, getter, sett

我从Web服务返回了以下json字符串。JAXB注释实体必须是什么样子?我的问题是:json没有任何“外部”根元素

{
"Header": "head",
"ProductIdentifier": "WLW",
"Version": "2"
}
//JAXB:

@XmlRootElement
class JsonVO {
    private String header, productIdentifier, version;

    //constructor, getter, setter
}
解组:

builder.get(JsonVO.class);
结果:

org.apache.cxf.jaxrs.utils.JAXRSUtils logMessageHandlerProblem
Schwerwiegend: No message body reader has been found for class com.craps.service.Reseed, ContentType: application/json
使用,您将无法直接将JSON响应绑定到JAXB注释bean。你可以用它来做这个,我用它来做这个

首先,将MOXy依赖项添加到项目中。如果使用Maven,可以添加:

    <dependency>
        <groupId>org.eclipse.persistence</groupId>
        <artifactId>eclipselink</artifactId>
        <version>2.5.1</version>
    </dependency>

默认情况下,MOXyJsonProvider支持不带根元素的JSON,因此您不需要任何其他配置。

另一种解决方案是不使用Moxy。只是修改JSONProvider配置

这是cxf配置文件

jaxrs:server id="KPService" address="/KPApp">
        <jaxrs:serviceBeans>
            <ref bean="kpBean" />
        </jaxrs:serviceBeans>
        <jaxrs:providers>

            <bean class="org.apache.cxf.jaxrs.provider.json.JSONProvider">
                <property name="dropRootElement" value="true" />
                <property name="dropCollectionWrapperElement" value="false" />
                <property name="ignoreNamespaces" value="true" />
                <property name="convention" value="mapped"/>
                <property name="unmarshallAsJaxbElement" value="true" />
                <!-- <property name="writeXsiType" value="false" /> -->
                <property name="readXsiType" value="false" />
            </bean>

            <ref bean="schemaGen"/>

        </jaxrs:providers>

        <jaxrs:features>
            <cxf:logging />
        </jaxrs:features>

    </jaxrs:server>

    <bean id="kpBean"
        class="com.rest.KPResource"></bean>

    <bean id="schemaGen" class="org.apache.cxf.jaxrs.model.wadl.WadlGenerator">
        <property name="linkJsonToXmlSchema" value="true" />
        <property name="schemaLocations">
            <list>
                <value>classpath:/json.schema</value>
            </list>
        </property>
        <property name="useJaxbContextForQnames" value="true" />
        <property name="ignoreMessageWriters" value="false" />
        <property name="addResourceAndMethodIds" value="true" />
    </bean>
jaxrs:server id=“KPService”address=“/KPApp”>
类路径:/json.schema

您使用什么库来处理JSON?MOXy?我使用CXF rs框架和
jersey media json处理
作为json解析器。
jaxrs:server id="KPService" address="/KPApp">
        <jaxrs:serviceBeans>
            <ref bean="kpBean" />
        </jaxrs:serviceBeans>
        <jaxrs:providers>

            <bean class="org.apache.cxf.jaxrs.provider.json.JSONProvider">
                <property name="dropRootElement" value="true" />
                <property name="dropCollectionWrapperElement" value="false" />
                <property name="ignoreNamespaces" value="true" />
                <property name="convention" value="mapped"/>
                <property name="unmarshallAsJaxbElement" value="true" />
                <!-- <property name="writeXsiType" value="false" /> -->
                <property name="readXsiType" value="false" />
            </bean>

            <ref bean="schemaGen"/>

        </jaxrs:providers>

        <jaxrs:features>
            <cxf:logging />
        </jaxrs:features>

    </jaxrs:server>

    <bean id="kpBean"
        class="com.rest.KPResource"></bean>

    <bean id="schemaGen" class="org.apache.cxf.jaxrs.model.wadl.WadlGenerator">
        <property name="linkJsonToXmlSchema" value="true" />
        <property name="schemaLocations">
            <list>
                <value>classpath:/json.schema</value>
            </list>
        </property>
        <property name="useJaxbContextForQnames" value="true" />
        <property name="ignoreMessageWriters" value="false" />
        <property name="addResourceAndMethodIds" value="true" />
    </bean>