net.sf.json.JSONException: Object is null

Spring+CXF的webService服务端调用时报如下错误:

[ WARN]_2018-05-17 11:16:18 - org.apache.cxf.common.logging.LogUtils.doLog(LogUtils.java:449):Application {http://aiocs.openboss.asiainfo.com/services/CRMProcessSheet}CRMProcessSheetService#{http://aiocs.openboss.asiainfo.com/services/CRMProcessSheet}replyWorkSheet has thrown exception, unwinding now
org.apache.cxf.interceptor.Fault: Object is null
 at org.apache.cxf.service.invoker.AbstractInvoker.createFault(AbstractInvoker.java:162)
 at org.apache.cxf.jaxws.AbstractJAXWSMethodInvoker.createFault(AbstractJAXWSMethodInvoker.java:267)
 at org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:128)
 at org.apache.cxf.jaxws.AbstractJAXWSMethodInvoker.invoke(AbstractJAXWSMethodInvoker.java:232)
 at org.apache.cxf.jaxws.JAXWSMethodInvoker.invoke(JAXWSMethodInvoker.java:85)
 at org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:74)
 at org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(ServiceInvokerInterceptor.java:59)
 at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
 at java.util.concurrent.FutureTask.run(FutureTask.java:262)
 at org.apache.cxf.interceptor.ServiceInvokerInterceptor$2.run(ServiceInvokerInterceptor.java:126)
 at org.apache.cxf.workqueue.SynchronousExecutor.execute(SynchronousExecutor.java:37)
 at org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage(ServiceInvokerInterceptor.java:131)
 at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:308)
 at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121)
 at org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:252)
 at org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:234)
 at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:208)
 at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:160)
 at org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:180)
 at org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:299)
 at org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPost(AbstractHTTPServlet.java:218)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:648)
 at org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:274)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:230)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
 at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
 at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:121)
 at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
 at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198)
 at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:108)
 at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
 at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
 at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
 at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:620)
 at org.apache.catalina.valves.RemoteIpValve.invoke(RemoteIpValve.java:677)
 at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
 at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:349)
 at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:784)
 at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
 at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:802)
 at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1410)
 at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
 at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
 at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
 at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
 at java.lang.Thread.run(Thread.java:745)
Caused by: net.sf.json.JSONException: Object is null
 at net.sf.json.JSONNull.isEmpty(JSONNull.java:69)
 at Serializer_1.write1(Unknown Source)
 at Serializer_1.write(Unknown Source)
 at com.alibaba.fastjson.serializer.ListSerializer.write(ListSerializer.java:127)
 at com.alibaba.fastjson.serializer.MapSerializer.write(MapSerializer.java:186)
 at com.alibaba.fastjson.serializer.JSONSerializer.write(JSONSerializer.java:374)
 at com.alibaba.fastjson.JSON.toJSONString(JSON.java:595)
 at com.alibaba.fastjson.JSON.toString(JSON.java:589)
 at com.cmos.ngroute.ws.eoms.server.CRMProcessSheetImpl.replyWorkSheet(CRMProcessSheetImpl.java:346)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
 at java.lang.reflect.Method.invoke(Method.java:606)
 at org.apache.cxf.service.invoker.AbstractInvoker.performInvocation(AbstractInvoker.java:180)
 at org.apache.cxf.jaxws.JAXWSMethodInvoker.performInvocation(JAXWSMethodInvoker.java:66)
 at org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:96)
 ... 47 more

上网查找一些帖子,有不同说法,有的说net.sf.json.JSONArray包不太好用,还有说未初始化,查看代码如下:

List attachInfoList = InterUtils.parseAttachRef(attachRef);
		HashMap<String, Object> attachMap = null;
		if(attachInfoList.size()>0){
			attachMap = new HashMap<String, Object>();
			AttachInfo attachInfo = null;
			for (int i = 0; i < attachInfoList.size(); i++) {
				attachInfo = (AttachInfo)attachInfoList.get(i);
				attachMap.put("attachName", attachInfo.getAttachName());
				attachMap.put("attachPath", attachInfo.getAttachURL());
				attachMap.put("attachSize", attachInfo.getAttachLength());
			}
		}

感觉有可能是attachMap未初始话导致的问题,于是编写以下测试类:

import java.util.HashMap;
import java.util.List;
import net.sf.json.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.cmos.csf.api.client.extend.CsfInputObject;
import com.cmos.ngroute.ws.utils.AttachInfo;
import com.cmos.ngroute.ws.utils.InterUtils;

public class TestReqJson {
	public static void main(String[] args) {
		String attachRef = "<attachRef><attachInfo><attachName>1.docx</attachName><attachURL>http://00.00.00.00:81/accessories/uploadfile/sheet/complaint/20171226161905.docx</attachURL><attachLength>11670</attachLength></attachInfo></attachRef>";
//		String attachRef = "";
		List attachInfoList = InterUtils.parseAttachRef(attachRef);
		HashMap<String, Object> attachMap = new HashMap<String, Object>();
		if(attachInfoList.size()>0){
			AttachInfo attachInfo = null;
			for (int i = 0; i < attachInfoList.size(); i++) {
				attachInfo = (AttachInfo)attachInfoList.get(i);
				attachMap.put("attachName", attachInfo.getAttachName());
				attachMap.put("attachPath", attachInfo.getAttachURL());
				attachMap.put("attachSize", attachInfo.getAttachLength());
			}
		}
		JSONArray attachJson = JSONArray.fromObject(attachMap);
		CsfInputObject csfInputObject = new CsfInputObject();
		JSONObject reqJson = new JSONObject();
	    reqJson.put("sheetType", "56");
	    reqJson.put("serviceType", 0);
	    reqJson.put("serialNo", "20180516080840X320657447");
	    reqJson.put("attachRef", attachJson);
	    String s = reqJson.toString();
	    System.out.println(s);
	    csfInputObject.setObject(reqJson.toString());
	}
}



相关文章
相关标签/搜索