Java Web服务:BeanSerializer
什么时候会发生这样的错误Java Web服务:BeanSerializer,java,web-services,axis,Java,Web Services,Axis,什么时候会发生这样的错误 <ERROR> <BeanSerializer> <serialize> <Exception:> java.io.IOException: Non nillable element 'standardHeader' is null. at org.apache.axis.encoding.ser.BeanSerializer.serialize(BeanSerializer.java:215)
<ERROR> <BeanSerializer> <serialize> <Exception:>
java.io.IOException: Non nillable element 'standardHeader' is null.
at org.apache.axis.encoding.ser.BeanSerializer.serialize(BeanSerializer.java:215)
at org.apache.axis.encoding.SerializationContext.serializeActual(SerializationContext.java:1426)
at org.apache.axis.encoding.SerializationContext.serialize(SerializationContext.java:914)
at org.apache.axis.message.RPCParam.serialize(RPCParam.java:200)
at org.apache.axis.message.RPCElement.outputImpl(RPCElement.java:433)
at org.apache.axis.message.MessageElement.output(MessageElement.java:1208)
at org.apache.axis.message.SOAPBody.outputImpl(SOAPBody.java:139)
at org.apache.axis.message.SOAPEnvelope.outputImpl(SOAPEnvelope.java:477)
at org.apache.axis.message.MessageElement.output(MessageElement.java:1208)
at org.apache.axis.SOAPPart.writeTo(SOAPPart.java:315)
at org.apache.axis.SOAPPart.writeTo(SOAPPart.java:269)
at org.apache.axis.SOAPPart.saveChanges(SOAPPart.java:530)
at org.apache.axis.attachments.AttachmentsImpl.getAttachmentCount(AttachmentsImpl.java:519)
at org.apache.axis.Message.getContentType(Message.java:475)
at org.apache.axis.transport.http.AxisServlet.doPost(AxisServlet.java:775)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:763)
at org.apache.axis.transport.http.AxisServletBase.service(AxisServletBase.java:327)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)
at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:283)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:175)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3231)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:121)
at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2002)
at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:1908)
at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1362)
at weblogic.work.ExecuteRequestAdapter.execute(ExecuteRequestAdapter.java:21)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:145)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:117)
java.io.IOException:不可为零的元素“standardHeader”为空。
位于org.apache.axis.encoding.ser.BeanSerializer.serialize(BeanSerializer.java:215)
位于org.apache.axis.encoding.SerializationContext.SerializationActual(SerializationContext.java:1426)
位于org.apache.axis.encoding.SerializationContext.serialize(SerializationContext.java:914)
位于org.apache.axis.message.RPCParam.serialize(RPCParam.java:200)
位于org.apache.axis.message.RPCElement.outputinpl(RPCElement.java:433)
位于org.apache.axis.message.MessageElement.output(MessageElement.java:1208)
位于org.apache.axis.message.SOAPBody.outputinpl(SOAPBody.java:139)
位于org.apache.axis.message.SOAPEnvelope.outputinpl(SOAPEnvelope.java:477)
位于org.apache.axis.message.MessageElement.output(MessageElement.java:1208)
位于org.apache.axis.SOAPPart.writeTo(SOAPPart.java:315)
位于org.apache.axis.SOAPPart.writeTo(SOAPPart.java:269)
位于org.apache.axis.SOAPPart.saveChanges(SOAPPart.java:530)
位于org.apache.axis.attachments.attachmentsiml.getAttachmentCount(attachmentsiml.java:519)
位于org.apache.axis.Message.getContentType(Message.java:475)
位于org.apache.axis.transport.http.AxisServlet.doPost(AxisServlet.java:775)
位于javax.servlet.http.HttpServlet.service(HttpServlet.java:763)
位于org.apache.axis.transport.http.AxisServletBase.service(AxisServletBase.java:327)
位于javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
位于weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)
位于weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)
位于weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:283)
位于weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:175)
在weblogic.servlet.internal.WebAppServletContext$servleinvocationAction.run(WebAppServletContext.java:3231)
位于weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
位于weblogic.security.service.SecurityManager.runAs(SecurityManager.java:121)
位于weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2002)
位于weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:1908)
位于weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1362)
在weblogic.work.ExecuteRequestAdapter.execute(ExecuteRequestAdapter.java:21)
位于weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:145)
运行(ExecuteThread.java:117)
每当元素standardHeader
设置为null
,但在XSD中将其标记为nillable=“false”
。在创建JAXWS客户机时,会出现相同的错误:
2016-03-16 10:42:02 ERROR BeanSerializer:274 - Exception:
java.io.IOException: Non nillable element 'createDate' is null.
at org.apache.axis.encoding.ser.BeanSerializer.serialize(BeanSerializer.java:215)
因此,我调查了生成的JAXWS类的内容,发现:
elemField = new org.apache.axis.description.ElementDesc();
elemField.setFieldName("createDate");
elemField.setXmlName(new javax.xml.namespace.QName("", "createDate"));
elemField.setXmlType(new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "string"));
elemField.setNillable(false);
typeDesc.addFieldDesc(elemField);
代码的原因
elemField.setNillable(false);
在从WSDL创建JAXWS客户端时提供XSD
<xs:complexType name="AddEventRequestType">
<xs:sequence>
<xs:element name="id" type="xs:int"/>
<xs:element name="createDate" type="xs:string"/>
在XSD中设置minOccurs=0元素字段
elemField = new org.apache.axis.description.ElementDesc();
elemField.setFieldName("createDate");
elemField.setXmlName(new javax.xml.namespace.QName("", "createDate"));
elemField.setXmlType(new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "string"));
elemField.setMinOccurs(0); //it's treated as null value
elemField.setNillable(false);
typeDesc.addFieldDesc(elemField);