客户端项服务端提交数据,服务端处理时经常会出现以下错误,纠结了很长时间,才找到正真解决的原因
严重: Fault occurred!
java.lang.IllegalArgumentException
at java.sql.Date.valueOf(Unknown Source)
at com.yjt.dao.AssetsDao.insertMsgOne(AssetsDao.java:202)
at com.yjt.service.InventoryImpl.InsertDataOne(InventoryImpl.java:27)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.codehaus.xfire.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:59)
at org.codehaus.xfire.service.invoker.ObjectInvoker.invoke(ObjectInvoker.java:45)
at org.codehaus.xfire.service.binding.ServiceInvocationHandler.sendMessage(ServiceInvocationHandler.java:320)
at org.codehaus.xfire.service.binding.ServiceInvocationHandler$1.run(ServiceInvocationHandler.java:86)
at org.codehaus.xfire.service.binding.ServiceInvocationHandler.execute(ServiceInvocationHandler.java:134)
at org.codehaus.xfire.service.binding.ServiceInvocationHandler.invoke(ServiceInvocationHandler.java:109)
at org.codehaus.xfire.handler.HandlerPipeline.invoke(HandlerPipeline.java:131)
at org.codehaus.xfire.transport.DefaultEndpoint.onReceive(DefaultEndpoint.java:64)
at org.codehaus.xfire.transport.AbstractChannel.receive(AbstractChannel.java:38)
at org.codehaus.xfire.transport.http.XFireServletController.invoke(XFireServletController.java:304)
at org.codehaus.xfire.transport.http.XFireServletController.doService(XFireServletController.java:129)
at org.codehaus.xfire.transport.http.XFireServlet.doPost(XFireServlet.java:116)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:291)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Unknown Source)
分析是参数不合规定,sql.date类型装换出现问题。
关于java.sql.Date.Date.valueOf(String date);
其中date是表示"yyyy-MM-dd"的形式日期字符串。
以下是API的方法说明:
public static Date valueOf(String s)将 JDBC 日期转义形式的字符串转换成 Date 值。
参数:
s - 表示 "yyyy-mm-dd" 形式的日期的 String 对象
返回:
表示给定日期的 java.sql.Date 对象
抛出:
IllegalArgumentException - 如果给定日期不是 JDBC 日期转义形式 (yyyy-mm-dd)
知道了这个问题,那应该就明白怎么解决了吧。
对于java客户端传过来的date参数,要用
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");//定义格式,
Date dt=new Date();
String date=df.format(dt);处理完后再将date传给服务端处理。
对于c#客户端传过来的date参数,要用
DateTime cgsj = CGSJDatePicker.Value;
string format="yyyy-MM-dd";
string tm=cgsj.ToString(format);
处理完后再将date传给服务端处理