Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.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/4/powerbi/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
xs:string的JSON解组 问题:_Json_Jaxb_Glassfish - Fatal编程技术网

xs:string的JSON解组 问题:

xs:string的JSON解组 问题:,json,jaxb,glassfish,Json,Jaxb,Glassfish,当编组JSONs对象时,我们面临着奇怪的问题,包括以下内容{“@type”:“xs:string”}。编组此对象会导致NullPointerException。请参见下面的堆栈跟踪: java.lang.NullPointerException at com.sun.org.apache.xalan.internal.xsltc.trax.SAX2DOM.startElement(SAX2DOM.java:204) at com.sun.org.apache.xml.internal.seria

当编组JSONs对象时,我们面临着奇怪的问题,包括以下内容{“@type”:“xs:string”}。编组此对象会导致NullPointerException。请参见下面的堆栈跟踪:

java.lang.NullPointerException
at com.sun.org.apache.xalan.internal.xsltc.trax.SAX2DOM.startElement(SAX2DOM.java:204)
at com.sun.org.apache.xml.internal.serializer.ToXMLSAXHandler.closeStartTag(ToXMLSAXHandler.java:208)
at com.sun.org.apache.xml.internal.serializer.ToXMLSAXHandler.characters(ToXMLSAXHandler.java:528)
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerHandlerImpl.characters(TransformerHandlerImpl.java:172)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.DomLoader.text(DomLoader.java:128)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext.text(UnmarshallingContext.java:499)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.InterningXmlVisitor.text(InterningXmlVisitor.java:78)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.StAXStreamConnector.processText(StAXStreamConnector.java:324)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.StAXStreamConnector.handleEndElement(StAXStreamConnector.java:202)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.StAXStreamConnector.bridge(StAXStreamConnector.java:171)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:355)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:334)
at com.sun.jersey.json.impl.BaseJSONUnmarshaller.unmarshalJAXBElementFromJSON(BaseJSONUnmarshaller.java:108)
at com.sun.jersey.json.impl.BaseJSONUnmarshaller.unmarshalFromJSON(BaseJSONUnmarshaller.java:97)
at JerseyNPETest.testNPEUnmarshal(JerseyNPETest.java:20)
问题发生在从外部服务获取响应并通过glassfish(简单REST调用)将其转换为隐式时

我们调查了这个问题,发现它实际上与JSON解组器有关

测试用例: 编组- 为了验证我们的发现,我们创建了一个类,其中包含名为propertyA的Object类型的成员。然后,我们将propertyA的值设置为“some value”,并使用默认的封送处理程序对其进行封送处理,从而生成JSON字符串“{”@type:“xs:string”,“$”:“some value”}

解组-之后,我们使用了默认的解组器。试图解组此JSON字符串导致出现上述异常

请参见下面的测试用例:

import com.sun.jersey.api.json.JSONConfiguration;
import com.sun.jersey.json.impl.BaseJSONUnmarshaller;
import org.junit.Test;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.annotation.XmlRootElement;
import java.io.StringReader;

public class JerseyNPETest {

private static final String ERROR = "{\"additionalObject\":{\"@type\":\"xs:string\",\"$\":\"some value\"}}";

@Test
public void testNPEUnmarshal() throws JAXBException {
    final JAXBContext context = JAXBContext.newInstance(AnObject.class);
    final JSONConfiguration jsonConfig = JSONConfiguration.DEFAULT;
    final BaseJSONUnmarshaller unmarshaller = new BaseJSONUnmarshaller(context, jsonConfig);
    final StringReader reader = new StringReader(ERROR);
    final AnObject result = unmarshaller.unmarshalFromJSON(reader, AnObject.class);
}

@XmlRootElement
public static class AnObject {

    private Object additionalObject;

    public Object getAdditionalObject() {
        return additionalObject;
    }

    public void setAdditionalObject(final Object additionalObject) {
        this.additionalObject = additionalObject;
    }
}
}
问题: 一般来说,如何解决这一问题,例如通过配置glassfish来避免这个问题? 目前我们正在使用glassfish 3.1.2.2。非常感谢您的帮助